diff --git a/.branding b/.branding index 9aaf3e42cb..ab3a12bc40 100644 --- a/.branding +++ b/.branding @@ -1,2 +1,2 @@ -https://github.com/Keavon/graphite-branded-assets/archive/0d004aa61e6b48d316e8e5db6d59ccc4788f192d.tar.gz -772d64518be43c99977ba56f69e574531c56e83d2df2f42ab066f77f74b0dd1f +https://github.com/Keavon/graphite-branded-assets/archive/6687dc6d3d8552948458d00d35e2bee3a40ab66b.tar.gz +7663b4a35f377a5d3363430a725a1d5f634fbdc56adca5e43167786b8fe1b253 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5f1c0dc14f..6ea127f049 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,11 +2,25 @@ "image": "mcr.microsoft.com/devcontainers/base:debian", "features": { "ghcr.io/devcontainers/features/rust:1": { - "profile": "default" + "profile": "default", + "targets": "wasm32-unknown-unknown" }, - "ghcr.io/devcontainers/features/node:1": {} + "ghcr.io/devcontainers/features/node:1": { + // NOTICE: keep in sync with `.nvmrc` + "version": "24" + } + }, + // NOTICE: keep these tool versions in sync with `.github/workflows/build.yml`, `.nix/dev.nix` and `.nix/pkgs/graphite.nix` (wasm-bindgen-cli), `tools/cargo-run/src/requirements.rs` (wasm-bindgen-cli, cargo-about), `tools/cargo-run/src/requirements/wasm_opt.rs` (Binaryen), and the `wasm-bindgen` crate in `Cargo.toml` + "containerEnv": { + "WASM_BINDGEN_CLI_VERSION": "0.2.121", + "CARGO_ABOUT_VERSION": "0.9.2", + "BINARYEN_VERSION": "130", + "CARGO_BINSTALL_VERSION": "1.23.0" + }, + "onCreateCommand": { + "Install cargo-about and wasm-bindgen-cli": "curl -sSfL https://github.com/cargo-bins/cargo-binstall/releases/download/v$CARGO_BINSTALL_VERSION/cargo-binstall-$(uname -m)-unknown-linux-musl.tgz | tar xz -C $CARGO_HOME/bin && BINSTALL_DISABLE_TELEMETRY=true cargo binstall --no-confirm cargo-about@$CARGO_ABOUT_VERSION wasm-bindgen-cli@$WASM_BINDGEN_CLI_VERSION", + "Install Binaryen wasm-opt": "curl -sSfL https://github.com/WebAssembly/binaryen/releases/download/version_$BINARYEN_VERSION/binaryen-version_$BINARYEN_VERSION-$(uname -m)-linux.tar.gz | tar xz -C $CARGO_HOME/bin --strip-components=2 binaryen-version_$BINARYEN_VERSION/bin/wasm-opt" }, - "onCreateCommand": "cargo install cargo-about && cargo install -f wasm-bindgen-cli@0.2.121", "customizations": { "vscode": { // NOTE: Keep this in sync with `.vscode/extensions.json` @@ -16,14 +30,16 @@ "tamasfe.even-better-toml", // Web "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", "svelte.svelte-vscode", "vitaliymaz.vscode-svg-previewer", // Code quality "wayou.vscode-todo-highlight", "streetsidesoftware.code-spell-checker", - // Helpful + // Git "mhutchie.git-graph", "qezhu.gitlink", + // Helpful "wmaurer.change-case" ] } diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..a0bb28b685 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,34 @@ +# Keavon Chambers (@Keavon keavon@keavon.com) + + +# Dennis Kobert (@TrueDoctor dennis@kobert.dev) + +/document/format/ @TrueDoctor + +/node-graph/graph-craft/ @TrueDoctor +/node-graph/preprocessor/ @TrueDoctor +/node-graph/node-macro/ @TrueDoctor +/node-graph/interpreted-executor/ @TrueDoctor +/node-graph/graphene-cli/ @TrueDoctor + +# Timon Schelling (@timon-schelling me@timon.zip) + +/.nix/ @timon-schelling +/flake.nix @timon-schelling +/flake.lock @timon-schelling + +/desktop/ @timon-schelling + +/editor/src/messages/future/ @timon-schelling +/editor/src/messages/resource_storage/ @timon-schelling +/editor/src/messages/network/ @timon-schelling +/editor/src/messages/app_window/ @timon-schelling +/editor/src/messages/clipboard/ @timon-schelling +/editor/src/messages/viewport/ @timon-schelling + +/libraries/wgpu-sync/ @timon-schelling + +/node-graph/libraries/canvas-utils/ @timon-schelling + +/tools/cargo-run/ @timon-schelling +/tools/third-party-licenses/ @timon-schelling diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d089c6d135..0979958053 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -58,6 +58,7 @@ jobs: RUSTC_WRAPPER: /usr/bin/sccache CARGO_INCREMENTAL: 0 SCCACHE_DIR: /var/lib/github-actions/.cache + # NOTICE: keep these tool versions in sync with the other jobs in this file, `.devcontainer/devcontainer.json`, `.nix/dev.nix` and `.nix/pkgs/graphite.nix` (wasm-bindgen-cli), `tools/cargo-run/src/requirements.rs` (wasm-bindgen-cli, cargo-about), `tools/cargo-run/src/requirements/wasm_opt.rs` (Binaryen), and the `wasm-bindgen` crate in `Cargo.toml` WASM_BINDGEN_CLI_VERSION: "0.2.121" BINARYEN_VERSION: "130" steps: @@ -302,9 +303,11 @@ jobs: pull-requests: write env: + # NOTICE: keep these tool versions in sync with the other jobs in this file, `.devcontainer/devcontainer.json`, `.nix/dev.nix` and `.nix/pkgs/graphite.nix` (wasm-bindgen-cli), `tools/cargo-run/src/requirements.rs` (wasm-bindgen-cli, cargo-about), `tools/cargo-run/src/requirements/wasm_opt.rs` (Binaryen), and the `wasm-bindgen` crate in `Cargo.toml` WASM_BINDGEN_CLI_VERSION: "0.2.121" BINARYEN_VERSION: "130" - CARGO_ABOUT_VERSION: "0.9.0" + CARGO_ABOUT_VERSION: "0.9.2" + CARGO_BINSTALL_VERSION: "1.23.0" steps: - name: πŸ“₯ Clone repository @@ -341,7 +344,9 @@ jobs: frontend/package-lock.json - name: πŸ“¦ Install Cargo-binstall - uses: cargo-bins/cargo-binstall@main + uses: cargo-bins/cargo-binstall@v1.23.0 + with: + version: ${{ env.CARGO_BINSTALL_VERSION }} - name: 🚧 Install native dependencies shell: pwsh @@ -497,9 +502,11 @@ jobs: pull-requests: write env: + # NOTICE: keep these tool versions in sync with the other jobs in this file, `.devcontainer/devcontainer.json`, `.nix/dev.nix` and `.nix/pkgs/graphite.nix` (wasm-bindgen-cli), `tools/cargo-run/src/requirements.rs` (wasm-bindgen-cli, cargo-about), `tools/cargo-run/src/requirements/wasm_opt.rs` (Binaryen), and the `wasm-bindgen` crate in `Cargo.toml` WASM_BINDGEN_CLI_VERSION: "0.2.121" BINARYEN_VERSION: "130" - CARGO_ABOUT_VERSION: "0.9.0" + CARGO_ABOUT_VERSION: "0.9.2" + CARGO_BINSTALL_VERSION: "1.23.0" steps: - name: πŸ“₯ Clone repository @@ -535,6 +542,11 @@ jobs: package-lock.json frontend/package-lock.json + - name: πŸ“¦ Install Cargo-binstall + uses: cargo-bins/cargo-binstall@v1.23.0 + with: + version: ${{ env.CARGO_BINSTALL_VERSION }} + - name: 🚧 Install native dependencies env: GITHUB_TOKEN: ${{ github.token }} @@ -544,8 +556,7 @@ jobs: brew install \ pkg-config \ openssl@3 \ - llvm \ - cargo-binstall + llvm echo "OPENSSL_DIR=$(brew --prefix openssl@3)" >> $GITHUB_ENV echo "PKG_CONFIG_PATH=$(brew --prefix openssl@3)/lib/pkgconfig" >> $GITHUB_ENV @@ -650,17 +661,20 @@ jobs: codesign --force --options runtime --entitlements "$ENTITLEMENTS" --sign "$CERTIFICATE" "$APP_PATH/Contents/Frameworks/Graphite Helper.app" codesign --force --options runtime --entitlements "$ENTITLEMENTS" --sign "$CERTIFICATE" "$APP_PATH/Contents/Frameworks/Graphite Helper (GPU).app" codesign --force --options runtime --entitlements "$ENTITLEMENTS" --sign "$CERTIFICATE" "$APP_PATH/Contents/Frameworks/Graphite Helper (Renderer).app" + find "$APP_PATH/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries" -name "*.dylib" -exec codesign --force --options runtime --entitlements "$ENTITLEMENTS" --sign "$CERTIFICATE" {} \; codesign --force --options runtime --entitlements "$ENTITLEMENTS" --sign "$CERTIFICATE" "$APP_PATH/Contents/Frameworks/Chromium Embedded Framework.framework" - codesign --force --options runtime --entitlements "$ENTITLEMENTS" --sign "$CERTIFICATE" "$APP_PATH/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/libcef_sandbox.dylib" - codesign --force --options runtime --entitlements "$ENTITLEMENTS" --sign "$CERTIFICATE" "$APP_PATH/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/libEGL.dylib" - codesign --force --options runtime --entitlements "$ENTITLEMENTS" --sign "$CERTIFICATE" "$APP_PATH/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/libGLESv2.dylib" - codesign --force --options runtime --entitlements "$ENTITLEMENTS" --sign "$CERTIFICATE" "$APP_PATH/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/libvk_swiftshader.dylib" codesign --force --options runtime --entitlements "$ENTITLEMENTS" --sign "$CERTIFICATE" "$APP_PATH" --deep codesign --verify --deep --strict --verbose=4 "$APP_PATH" ditto -c -k --keepParent "$APP_PATH" "$ZIP_PATH" - xcrun notarytool submit "$ZIP_PATH" --wait --apple-id "$APPLE_EMAIL" --team-id "$APPLE_TEAM_ID" --password "$APPLE_PASSWORD" + SUBMISSION_ID=$(xcrun notarytool submit "$ZIP_PATH" --wait --output-format json --apple-id "$APPLE_EMAIL" --team-id "$APPLE_TEAM_ID" --password "$APPLE_PASSWORD" | tee /dev/stderr | jq -r '.id') + STATUS=$(xcrun notarytool info "$SUBMISSION_ID" --output-format json --apple-id "$APPLE_EMAIL" --team-id "$APPLE_TEAM_ID" --password "$APPLE_PASSWORD" | jq -r '.status') + if [ "$STATUS" != "Accepted" ]; then + echo "Notarization failed with status: $STATUS" + xcrun notarytool log "$SUBMISSION_ID" --apple-id "$APPLE_EMAIL" --team-id "$APPLE_TEAM_ID" --password "$APPLE_PASSWORD" + exit 1 + fi rm "$ZIP_PATH" xcrun stapler staple -v "$APP_PATH" diff --git a/.gitignore b/.gitignore index bb602ac1f9..1b028dda2e 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ flamegraph.svg .direnv .DS_Store .nvim.lua +/.devcontainer/devcontainer-lock.json diff --git a/.nix/pkgs/graphite-cef.nix b/.nix/pkgs/graphite-cef.nix index 732ffd0943..66b8ad418b 100644 --- a/.nix/pkgs/graphite-cef.nix +++ b/.nix/pkgs/graphite-cef.nix @@ -1,10 +1,10 @@ { pkgs, ... }: let - version = "149.0.5+g6770623+chromium-149.0.7827.197"; + version = "151.3.24+g2384915+chromium-151.0.7922.174"; hashes = { - aarch64-linux = "sha256-cBAvcvs1rAg5EKJkCt81RZYupCWpUNIC/nLt3PJow7Q="; - x86_64-linux = "sha256-OPGMBJmvvLiLdBDniBQwx7LmTGGI59AcesJdILSeqcs="; + aarch64-linux = "sha256-R5ZbnDallYvdbW/bP+M2DzjRfWWRTvY2q63hSIHNxZs="; + x86_64-linux = "sha256-21PEP9rOi37krw8AUSARbWlzqp2Ot3AsBhe635voaE4="; }; selectSystem = @@ -12,17 +12,19 @@ let attrs.${pkgs.stdenv.hostPlatform.system} or (throw "Unsupported system ${pkgs.stdenv.hostPlatform.system}"); + url = "https://cef-builds.spotifycdn.com/cef_binary_${version}_${ + selectSystem { + aarch64-linux = "linuxarm64"; + x86_64-linux = "linux64"; + } + }_minimal.tar.bz2"; + src = pkgs.fetchurl { - url = "https://cef-builds.spotifycdn.com/cef_binary_${version}_${ - selectSystem { - aarch64-linux = "linuxarm64"; - x86_64-linux = "linux64"; - } - }_minimal.tar.bz2"; + inherit url; hash = selectSystem hashes; }; in -pkgs.cef-binary.overrideAttrs (finalAttrs: { +pkgs.cef-binary.overrideAttrs { version = builtins.head (builtins.split "\\+" version); inherit src; postInstall = '' @@ -38,9 +40,9 @@ pkgs.cef-binary.overrideAttrs (finalAttrs: { echo '${ builtins.toJSON { type = "minimal"; - name = builtins.baseNameOf finalAttrs.src.url; + name = builtins.baseNameOf url; sha1 = ""; } }' > $out/archive.json ''; -}) +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json index dd8c135ef9..ed72fd603c 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -6,6 +6,7 @@ "tamasfe.even-better-toml", // Web "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", "svelte.svelte-vscode", "vitaliymaz.vscode-svg-previewer", // Code quality diff --git a/Cargo.lock b/Cargo.lock index 2021bdb780..1b1a74cc67 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -370,15 +370,31 @@ dependencies = [ name = "brush-nodes" version = "0.1.0" dependencies = [ + "brush-types", + "bytemuck", "core-types", "dyn-any", "glam", "graphene-hash", + "graphic-types", + "half", "node-macro", - "raster-nodes", "raster-types", "serde", "tokio", + "wgpu", + "wgpu-executor", +] + +[[package]] +name = "brush-types" +version = "0.1.0" +dependencies = [ + "core-types", + "dyn-any", + "glam", + "graphene-hash", + "serde", ] [[package]] @@ -594,8 +610,8 @@ dependencies = [ [[package]] name = "cef" -version = "149.2.0+149.0.5" -source = "git+https://github.com/timon-schelling/cef-rs.git?branch=graphite-149#877c9cd8f7776e6c52e365d501ad44c73e17117a" +version = "151.8.0+151.3.24" +source = "git+https://github.com/timon-schelling/cef-rs.git?branch=graphite-151#35712dc3948628245cf9810eadd045d9435442e8" dependencies = [ "anyhow", "cargo_metadata 0.23.1", @@ -613,8 +629,8 @@ dependencies = [ [[package]] name = "cef-dll-sys" -version = "149.2.0+149.0.5" -source = "git+https://github.com/timon-schelling/cef-rs.git?branch=graphite-149#877c9cd8f7776e6c52e365d501ad44c73e17117a" +version = "151.8.0+151.3.24" +source = "git+https://github.com/timon-schelling/cef-rs.git?branch=graphite-151#35712dc3948628245cf9810eadd045d9435442e8" dependencies = [ "anyhow", "cmake", @@ -654,6 +670,19 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "chumsky" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14377e276b2c8300513dff55ba4cc4142b44e5d6de6d00eb5b2307d650bb4ec1" +dependencies = [ + "hashbrown 0.15.5", + "regex-automata 0.3.9", + "serde", + "unicode-ident", + "unicode-segmentation", +] + [[package]] name = "ciborium" version = "0.2.2" @@ -946,7 +975,7 @@ dependencies = [ "rustc-hash 2.1.1", "serde", "serde_json", - "skrifa", + "skrifa 0.42.1", "tinyvec", "tokio", "tsify", @@ -1141,6 +1170,15 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" +[[package]] +name = "delaunator" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e1ee323c1275374f7e612d3724d12707079fb6a2117349fe144def656f5a880" +dependencies = [ + "robust", +] + [[package]] name = "deranged" version = "0.4.0" @@ -1224,7 +1262,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -1334,7 +1372,7 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "download-cef" version = "2.3.2" -source = "git+https://github.com/timon-schelling/cef-rs.git?branch=graphite-149#877c9cd8f7776e6c52e365d501ad44c73e17117a" +source = "git+https://github.com/timon-schelling/cef-rs.git?branch=graphite-151#35712dc3948628245cf9810eadd045d9435442e8" dependencies = [ "bzip2", "clap", @@ -1353,7 +1391,8 @@ dependencies = [ [[package]] name = "dpi" version = "0.1.2" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" dependencies = [ "serde", ] @@ -1502,7 +1541,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.59.0", ] [[package]] @@ -1527,8 +1566,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1e1dacd0d2082dfcf1351c4bdd566bbe89a2b263235a2b50058f1e130a47277" dependencies = [ "bit-set 0.8.0", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.14", + "regex-syntax 0.8.6", ] [[package]] @@ -1647,6 +1686,15 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "font-types" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75382bc7392ef10aad10935f92fc3db36d2d4dad0e5d96d8d65e04f89a07ec39" +dependencies = [ + "bytemuck", +] + [[package]] name = "fontconfig-parser" version = "0.5.8" @@ -1680,7 +1728,7 @@ dependencies = [ "linebender_resource_handle", "memmap2 0.9.10", "parlance", - "read-fonts", + "read-fonts 0.39.2", "smallvec", ] @@ -2177,11 +2225,13 @@ dependencies = [ name = "graphic-nodes" version = "0.1.0" dependencies = [ + "brush-types", "core-types", "dyn-any", "glam", "graphic-types", "node-macro", + "rand", "raster-types", "serde", "vector-types", @@ -2191,6 +2241,7 @@ dependencies = [ name = "graphic-types" version = "0.1.0" dependencies = [ + "brush-types", "core-types", "dyn-any", "glam", @@ -2333,6 +2384,7 @@ dependencies = [ "base64", "bitflags 2.11.0", "color", + "core-types", "derivative", "document-container", "document-format", @@ -2351,6 +2403,7 @@ dependencies = [ "kurbo", "log", "math-parser", + "node-macro", "num_enum", "once_cell", "preprocessor", @@ -2358,6 +2411,7 @@ dependencies = [ "serde", "serde_bytes", "serde_json", + "simplecss", "spin", "thiserror 2.0.18", "tokio", @@ -2493,7 +2547,7 @@ dependencies = [ "bitflags 2.11.0", "bytemuck", "core_maths", - "read-fonts", + "read-fonts 0.39.2", "smallvec", ] @@ -3348,7 +3402,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata", + "regex-automata 0.4.14", ] [[package]] @@ -3369,11 +3423,9 @@ dependencies = [ name = "math-parser" version = "0.0.0" dependencies = [ + "chumsky", "criterion", - "lazy_static", "num-complex", - "pest", - "pest_derive", "thiserror 2.0.18", ] @@ -3958,9 +4010,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "once_cell_polyfill" @@ -4031,7 +4083,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.45.0", ] [[package]] @@ -4087,7 +4139,7 @@ dependencies = [ "linebender_resource_handle", "parlance", "parley_data", - "skrifa", + "skrifa 0.42.1", ] [[package]] @@ -4138,50 +4190,6 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "pest" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" -dependencies = [ - "memchr", - "thiserror 2.0.18", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "pest_meta" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" -dependencies = [ - "pest", - "sha2", -] - [[package]] name = "petgraph" version = "0.7.1" @@ -4603,7 +4611,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.59.0", ] [[package]] @@ -4787,7 +4795,18 @@ checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" dependencies = [ "bytemuck", "core_maths", - "font-types", + "font-types 0.11.3", +] + +[[package]] +name = "read-fonts" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" +dependencies = [ + "bytemuck", + "font-types 0.12.3", + "once_cell", ] [[package]] @@ -4824,8 +4843,19 @@ checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.14", + "regex-syntax 0.8.6", +] + +[[package]] +name = "regex-automata" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.7.5", ] [[package]] @@ -4836,9 +4866,15 @@ checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.6", ] +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + [[package]] name = "regex-syntax" version = "0.8.6" @@ -4856,6 +4892,7 @@ name = "rendering" version = "0.1.0" dependencies = [ "base64", + "brush-types", "core-types", "dyn-any", "glam", @@ -4867,7 +4904,7 @@ dependencies = [ "num-traits", "parley", "serde", - "skrifa", + "skrifa 0.42.1", "text-nodes", "usvg", "vector-types", @@ -4991,6 +5028,12 @@ dependencies = [ "serde", ] +[[package]] +name = "robust" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e27ee8bb91ca0adcf0ecb116293afa12d393f9c2b9b9cd54d33e8078fe19839" + [[package]] name = "ron" version = "0.12.0" @@ -5081,7 +5124,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.60.2", + "windows-sys 0.59.0", ] [[package]] @@ -5149,7 +5192,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -5530,7 +5573,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" dependencies = [ "bytemuck", - "read-fonts", + "read-fonts 0.39.2", +] + +[[package]] +name = "skrifa" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68" +dependencies = [ + "bytemuck", + "read-fonts 0.41.0", ] [[package]] @@ -5882,7 +5935,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -5922,7 +5975,7 @@ dependencies = [ "raster-types", "serde", "serde_json", - "skrifa", + "skrifa 0.42.1", "titlecase", "tsify", "unicode-segmentation", @@ -6303,7 +6356,7 @@ dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex-automata", + "regex-automata 0.4.14", "sharded-slab", "smallvec", "thread_local", @@ -6382,12 +6435,6 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - [[package]] name = "unicode-bidi" version = "0.3.18" @@ -6574,6 +6621,7 @@ name = "vector-nodes" version = "0.1.0" dependencies = [ "core-types", + "delaunator", "dyn-any", "futures", "glam", @@ -6600,6 +6648,7 @@ version = "0.1.0" dependencies = [ "bitflags 2.11.0", "bytemuck", + "color", "core-types", "dyn-any", "fixedbitset", @@ -6614,6 +6663,7 @@ dependencies = [ "polycool", "rustc-hash 2.1.1", "serde", + "serde_json", "tinyvec", "tsify", "wasm-bindgen", @@ -6621,16 +6671,16 @@ dependencies = [ [[package]] name = "vello" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261359dbef879f8110ef7e1c442246c838d33d3d91cb05e0ea9288d432760c9f" +checksum = "af76ceb17b2869be23598baef40a9c8db4de86b87c60510c3bc245559275a617" dependencies = [ "bytemuck", "futures-intrusive", "log", "peniko", "png 0.18.1", - "skrifa", + "skrifa 0.44.0", "static_assertions", "thiserror 2.0.18", "vello_encoding", @@ -6640,22 +6690,22 @@ dependencies = [ [[package]] name = "vello_encoding" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2346f5f0d7dccb3582fcd397b4a57b43165209f1424e0d76e85dd814db164af7" +checksum = "1e31cd622201690d8dfe9fd8fea8d1ae59db1bfeea414856a617d1d03438418c" dependencies = [ "bytemuck", "guillotiere", "peniko", - "skrifa", + "skrifa 0.44.0", "smallvec", ] [[package]] name = "vello_shaders" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd38937516fa4b47423d9255bb5e4a65e839ec9d57c38c4af6189ce56bf46b7" +checksum = "abf943bd2920bfd22928a9c1bad39866f7ffcc1109b6ed924ab52773e3868a83" dependencies = [ "bytemuck", "log", @@ -7173,7 +7223,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.59.0", ] [[package]] @@ -7639,8 +7689,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winit" -version = "0.30.12" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +version = "0.31.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2879d2854d1a43e48f67322d4bd097afcb6eb8f8f775c8de0260a71aea1df1aa" dependencies = [ "bitflags 2.11.0", "cfg_aliases", @@ -7666,8 +7717,9 @@ dependencies = [ [[package]] name = "winit-android" -version = "0.30.12" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +version = "0.31.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d9c0d2cd93efec3a9f9ad819cfaf0834782403af7c0d248c784ec0c61761df" dependencies = [ "android-activity", "bitflags 2.11.0", @@ -7681,8 +7733,9 @@ dependencies = [ [[package]] name = "winit-appkit" -version = "0.30.12" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +version = "0.31.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21310ca07851a49c348e0c2cc768e36b52ca65afda2c2354d78ed4b90074d8aa" dependencies = [ "bitflags 2.11.0", "block2 0.6.2", @@ -7703,8 +7756,9 @@ dependencies = [ [[package]] name = "winit-common" -version = "0.30.12" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +version = "0.31.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45375fbac4cbb77260d83a30b1f9d8105880dbac99a9ae97f56656694680ff69" dependencies = [ "memmap2 0.9.10", "objc2 0.6.3", @@ -7718,8 +7772,9 @@ dependencies = [ [[package]] name = "winit-core" -version = "0.30.12" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +version = "0.31.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4f0ccd7abb43740e2c6124ac7cae7d865ecec74eec63783e8922577ac232583" dependencies = [ "bitflags 2.11.0", "cursor-icon", @@ -7733,8 +7788,9 @@ dependencies = [ [[package]] name = "winit-orbital" -version = "0.30.12" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +version = "0.31.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51ea1fb262e7209f265f12bd0cc792c399b14355675e65531e9c8a87db287d46" dependencies = [ "bitflags 2.11.0", "dpi", @@ -7748,8 +7804,9 @@ dependencies = [ [[package]] name = "winit-uikit" -version = "0.30.12" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +version = "0.31.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680a356e798837d8eb274d4556e83bceaf81698194e31aafc5cfb8a9f2fab643" dependencies = [ "bitflags 2.11.0", "block2 0.6.2", @@ -7769,8 +7826,9 @@ dependencies = [ [[package]] name = "winit-wayland" -version = "0.30.12" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +version = "0.31.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce5afb2ba07da603f84b722c95f9f9396d2cedae3944fb6c0cda4a6f88de545" dependencies = [ "ahash", "bitflags 2.11.0", @@ -7795,8 +7853,9 @@ dependencies = [ [[package]] name = "winit-web" -version = "0.30.12" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +version = "0.31.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2490a953fb776fbbd5e295d54f1c3847f4f15b6c3929ec53c09acda6487a92" dependencies = [ "atomic-waker", "bitflags 2.11.0", @@ -7817,8 +7876,9 @@ dependencies = [ [[package]] name = "winit-win32" -version = "0.30.12" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +version = "0.31.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "644ea78af0e858aa3b092e5d1c67c41995a98220c81813f1353b28bc8bb91eaa" dependencies = [ "bitflags 2.11.0", "cursor-icon", @@ -7833,8 +7893,9 @@ dependencies = [ [[package]] name = "winit-x11" -version = "0.30.12" -source = "git+https://github.com/rust-windowing/winit.git#bd6fef1d80ba063cbe91e150b3fb343927cdc72b" +version = "0.31.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa5b600756534c7041aa93cd0d244d44b09fca1b89e202bd1cd80dd9f3636c46" dependencies = [ "bitflags 2.11.0", "bytemuck", diff --git a/Cargo.toml b/Cargo.toml index 5685e06aba..194897cbdb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,7 +56,7 @@ edition = "2024" authors = ["Graphite Authors "] homepage = "https://graphite.art" repository = "https://github.com/GraphiteEditor/Graphite" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" version = "0.0.0" readme = "README.md" publish = false @@ -80,6 +80,7 @@ no-std-types = { path = "node-graph/libraries/no-std-types" } raster-types = { path = "node-graph/libraries/raster-types" } vector-types = { path = "node-graph/libraries/vector-types" } graphic-types = { path = "node-graph/libraries/graphic-types" } +brush-types = { path = "node-graph/libraries/brush-types" } rendering = { path = "node-graph/libraries/rendering" } brush-nodes = { path = "node-graph/nodes/brush" } blending-nodes = { path = "node-graph/nodes/blending" } @@ -139,7 +140,7 @@ wgpu = { version = "29.0", features = [ "strict_asserts", ] } once_cell = "1.13" # Remove and replace with `core::cell::LazyCell` () -wasm-bindgen = "=0.2.121" # NOTICE: keep in sync with the `wasm-bindgen-cli` version pinned across CI workflows, devcontainer, Nix, and the `cargo-run` tool. We pin this version because wasm-bindgen upgrades may break various things. +wasm-bindgen = "=0.2.121" # NOTICE: keep in sync with the `wasm-bindgen-cli` version pinned in `.github/workflows/build.yml`, `.devcontainer/devcontainer.json`, `.nix/dev.nix`, `.nix/pkgs/graphite.nix`, and `tools/cargo-run/src/requirements.rs`. We pin this version because wasm-bindgen upgrades may break various things. wasm-bindgen-futures = "0.4" js-sys = "=0.3.98" web-sys = { version = "=0.3.98", features = [ @@ -160,16 +161,17 @@ web-sys = { version = "=0.3.98", features = [ "HtmlImageElement", "ImageBitmapRenderingContext", ] } -winit = { git = "https://github.com/rust-windowing/winit.git" } +winit = "0.31.0-beta.2" keyboard-types = "0.8" url = "2.5" tokio = { version = "1.29", features = ["fs", "macros", "io-std", "rt", "rt-multi-thread"] } # Linebender ecosystem (BEGIN) kurbo = { version = "0.13", features = ["serde"] } -vello = "0.9" -vello_encoding = "0.9" +vello = "0.10" +vello_encoding = "0.10" resvg = "0.47" usvg = "0.47" +simplecss = "0.2" parley = { version = "0.9", default-features = false, features = ["std"] } skrifa = "0.42" polycool = "0.4" @@ -209,6 +211,7 @@ syn = { version = "2.0", default-features = false, features = [ "proc-macro", ] } lyon_geom = "1.0" +delaunator = "1.0" petgraph = { version = "0.7", default-features = false, features = ["graphmap"] } half = { version = "2.4", default-features = false, features = ["bytemuck"] } tinyvec = { version = "1", features = ["std"] } @@ -217,8 +220,8 @@ gungraun = { version = "0.18" } ndarray = "0.16" strum = { version = "0.27", features = ["derive"] } dirs = "6.0" -cef = "149" -cef-dll-sys = "149" +cef = "151" +cef-dll-sys = "151" include_dir = "0.7" tracing-subscriber = { version = "0.3", features = ["env-filter"] } tracing = "0.1" @@ -257,8 +260,6 @@ lto = "thin" debug = true [patch.crates-io] -# Force cargo to use only one version of the dpi crate (vendoring breaks without this) -dpi = { git = "https://github.com/rust-windowing/winit.git" } rfd = { git = "https://github.com/timon-schelling/rfd.git", branch = "graphite" } # TODO: Remove this once https://github.com/PolyMeilex/rfd/pull/317 is merged and released -cef = { git = "https://github.com/timon-schelling/cef-rs.git", branch = "graphite-149" } -cef-dll-sys = { git = "https://github.com/timon-schelling/cef-rs.git", branch = "graphite-149" } +cef = { git = "https://github.com/timon-schelling/cef-rs.git", branch = "graphite-151" } +cef-dll-sys = { git = "https://github.com/timon-schelling/cef-rs.git", branch = "graphite-151" } diff --git a/LICENSE.txt b/LICENSE-APACHE similarity index 100% rename from LICENSE.txt rename to LICENSE-APACHE diff --git a/LICENSE-MIT b/LICENSE-MIT new file mode 100644 index 0000000000..466bb35dfb --- /dev/null +++ b/LICENSE-MIT @@ -0,0 +1,19 @@ +Copyright (c) Graphite contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index d7f07ebf79..ad20249f12 100644 --- a/README.md +++ b/README.md @@ -80,4 +80,6 @@ Graphite is 100% community built and funded. Please become a part of keeping the Are you a graphics programmer or Rust developer? Graphite aims to be one of the most approachable projects for putting your engineering skills to use in the world of open source. See [instructions here](https://graphite.art/volunteer/guide/) for setting up the project and getting started. -*By submitting code for inclusion in the project, you are agreeing to license your changes under the Apache 2.0 license, and that you have the authority to do so. Some directories may have other licenses, like dual-licensed MIT/Apache 2.0, and code submissions to those directories mean you agree to the applicable license(s).* +## License + +Graphite's source code is dual-licensed under your choice of either the [MIT license](LICENSE-MIT) or the [Apache License 2.0](LICENSE-APACHE), at your option, unless otherwise noted within the repository. By submitting code for inclusion in the project, you agree to license your contributions under both licenses, and that you have the authority to do so. diff --git a/about.toml b/about.toml index 8b93e0f4f4..6610bc1bf1 100644 --- a/about.toml +++ b/about.toml @@ -22,8 +22,6 @@ accepted = [ workarounds = ["ring"] ignore-build-dependencies = true ignore-dev-dependencies = true -# Clearly Defined's API would occasionally (every few months) return errors for at least a full day (maybe some weird rate limiting?), but we can just disable to perform local checking (see #1653) -no-clearly-defined = true # https://raw.githubusercontent.com/briansmith/webpki/main/LICENSE # is the ISC license but test code within the repo is BSD-3-Clause, but is not compiled into the crate when we use it diff --git a/demo-artwork/changing-seasons.graphite b/demo-artwork/changing-seasons.graphite index 8391036e11..b92718c9ab 100644 --- a/demo-artwork/changing-seasons.graphite +++ b/demo-artwork/changing-seasons.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":3143874172491239000,"output_index":0}}],"nodes":[[26023588519449590,{"inputs":[{"Node":{"node_id":4002029424845293600,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.94750905,"green":0.5567761,"blue":0.06654528,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.94750905,"green":0.5567761,"blue":0.06654528,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.0,-92.53735521402166,92.53735521402166,0.0,9.606221358397944,-69.72678572415595]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[213744308682803360,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":10463288500489480000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[366962978353611840,{"inputs":[{"Node":{"node_id":8366826746721323000,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Union"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[799182088624980700,{"inputs":[{"Node":{"node_id":7386572856931342000,"output_index":0}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::DivideNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1250460246919467000,{"inputs":[{"Node":{"node_id":4742778578215475000,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Union"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1789832635968548900,{"inputs":[{"Node":{"node_id":1924303400883620400,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.9822506,"green":0.20507872,"blue":0.012983031,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.25,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[9.4105020317595,0.0,0.0,9.4105020317595,-5.928761491996683,27.64206180233515]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1924303400883620400,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[12399235852192450000,16255990754021933000,15620668684239604000,5432878891027338000],"remove":[5992115648840007000],"delta":[[5432878891027338000,[-0.8525377229081244,-6.779663923182397]],[12399235852192450000,[3.4492455418381667,-6.252914951989055]],[15620668684239604000,[-7.105427357601002e-15,61.89300411522633]],[16255990754021933000,[3.423868312757215,60.83950617283953]]]},"segments":{"add":[1366074222973177300,9911415907547690000,3820594103877681000,5933636287523951000],"remove":[16939395239973712000],"start_point":[[1366074222973177300,12399235852192450000],[3820594103877681000,15620668684239604000],[5933636287523951000,5432878891027338000],[9911415907547690000,16255990754021933000]],"end_point":[[1366074222973177300,16255990754021933000],[3820594103877681000,5432878891027338000],[5933636287523951000,12399235852192450000],[9911415907547690000,15620668684239604000]],"handle_primary":[[1366074222973177300,[-12.729766803840905,34.6776406035666]],[3820594103877681000,[-1.2746024488136916,-0.5300005080526233]],[5933636287523951000,[0.0,0.0]],[9911415907547690000,[-0.6380090646381761,1.00935799390129]]],"handle_end":[[1366074222973177300,[1.0502464055275982,-1.6615353350607336]],[3820594103877681000,[-11.281207133058956,31.692729766803836]],[5933636287523951000,[0.0,0.0]],[9911415907547690000,[1.1025726645520375,0.4584677151070898]]],"stroke":[[1366074222973177300,0],[3820594103877681000,0],[5933636287523951000,0],[9911415907547690000,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":3820594103877681000},{"ty":"End","segment":9911415907547690000}],[{"ty":"Primary","segment":9911415907547690000},{"ty":"End","segment":1366074222973177300}]],"remove_g1_continuous":[[{"ty":"Primary","segment":1366074222973177300},{"ty":"End","segment":5933636287523951000}],[{"ty":"End","segment":3820594103877681000},{"ty":"Primary","segment":16939395239973712000}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2166474486859326700,{"inputs":[{"Node":{"node_id":13712392741217151405,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.6885245901639344,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.0,"linear":true},{"red":0.008518312,"green":0.008518312,"blue":0.008518312,"alpha":0.08775313,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.20392157,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8879232,"green":0.119538434,"blue":0.011612244,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.6885245901639344,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.0,"linear":true},{"red":0.008518312,"green":0.008518312,"blue":0.008518312,"alpha":0.08775313,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.20392157,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[145.23306799940457,1.421085471520201e-14,-1.421085471520201e-14,145.23306799940457,0.7830162547740827,-109.56961984041736]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3015793159609237965,{"inputs":[{"Node":{"node_id":17938839021657705218,"output_index":0}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::SubtractNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3143874172491239000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":18233215297647862000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Node":{"node_id":6,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":4}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":7,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},{"Concrete":{"name":"core_types::list::List"}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6,{"inputs":[{"Node":{"node_id":5,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::TranslateFootprintNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7,{"inputs":[{"Node":{"node_id":2,"output_index":0}},{"Value":{"tagged_value":{"U32":1},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3223387122603246085,{"inputs":[{"Node":{"node_id":3405958409855358559,"output_index":0}},{"Value":{"tagged_value":{"String":"2 - 0.2A"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::MathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3405958409855358559,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::ReadIndexNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3430686124240113700,{"inputs":[{"Node":{"node_id":3602127523880426500,"output_index":0}},{"Node":{"node_id":16379524086934900000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3602127523880426500,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":17725188707009528000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4002029424845293600,{"inputs":[{"Node":{"node_id":16141281339223525000,"output_index":0}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[],"remove":[],"delta":[[353992768245212100,[-42.27413685969588,-41.62581710194484]],[753144493519442600,[-50.013717421124845,21.17283950617286]],[891169987742051100,[-4.148148148148122,-38.03703703703696]],[4305429814263425000,[-22.598416051654286,-32.71009758017498]],[4570709177617499000,[-62.76543209876538,-6.827160493827164]],[4839542169175255000,[-127.45378793812174,-12.06205126188287]],[5755835744378529000,[-17.333333333333343,-33.1358024691358]],[6358127410693457000,[-37.72290809327849,-10.54183813443079]],[7888691908524886000,[4.351165980795637,-8.105624142661181]],[9664410344080632000,[-35.276890617605005,-25.55103086414088]],[9934671969500465000,[-43.209876543209866,-14.975308641975468]],[10418348123687606000,[-61.3893894663837,-52.000301612710835]],[11874978858302702000,[5.843621399176955,-10.914951989026145]],[11897064075526275000,[-61.65765794556601,-32.902083082000814]],[12582713598977278000,[9.333333333333268,-66.33333333333327]],[15620564416450861000,[-47.66529492455423,-18.042524005486992]],[16211201987812043000,[-7.105427357601002e-15,-23.90123456790124]],[16594203120813726000,[-62.53607037678802,-36.02218510909459]]]},"segments":{"add":[],"remove":[],"start_point":[],"end_point":[],"handle_primary":[[1562499453192082400,[-0.08779149519892826,-1.6680384087791111]],[2092445122112560000,[-7.308641975308667,2.9629629629629903]],[2416974091592514600,[0.0,0.0]],[3138315255762406000,[4.038408779149492,-14.5733882030178]],[3270826560526153000,[-10.966434817733528,4.317749647005792]],[3359087961315235300,[-0.2881601545358876,-1.8891182956799923]],[4183498485018509000,[-37.13580246913581,14.485596707818928]],[4590600976245504500,[-6.49657064471878,1.2290809327846404]],[5680639457836474000,[0.0,0.0]],[8119312711427333000,[0.0,0.0]],[9552874240071498000,[-5.53086419753086,-0.9657064471879552]],[12441313998107066000,[-4.938271604938336,6.518518518518476]],[14351209823603001000,[0.0,0.0]],[15866454419016458000,[-9.913311783442964,6.121455371873111]],[16362428386097514000,[-23.70370370370371,19.950617283950606]],[17948338937502876000,[0.0,0.0]],[18320159308706247000,[0.0,0.0]]],"handle_end":[[1562499453192082400,[-0.6668238551234532,2.406364346749864]],[2092445122112560000,[-9.086419753086416,21.135802469135797]],[2416974091592514600,[37.06995884773662,-14.595336076817532]],[3138315255762406000,[-8.098765432098759,2.947337553780912]],[3270826560526153000,[-49.33882030178324,27.10562414266127]],[3359087961315235300,[-7.813443072702299,7.725651577503442]],[4183498485018509000,[-21.94787379972564,36.565157750342905]],[4590600976245504500,[14.222222222222207,7.989026063100134]],[5680639457836474000,[0.2881601545359018,1.8891182956799923]],[7709585677887591000,[-8.603566529492472,0.8779149519890552]],[8119312711427333000,[-16.241426611796967,5.355281207133061]],[9552874240071498000,[-7.286694101508885,7.55006858710567]],[12441313998107066000,[5.171144805176233,13.506721506057374]],[14351209823603001000,[-7.374485596707803,5.70644718792866]],[15866454419016458000,[2.458161865569238,7.637860082304542]],[16362428386097514000,[-6.962962962962983,53.17283950617292]],[17948338937502876000,[-50.30452674897121,26.776406035665325]],[18320159308706247000,[-41.26200274348419,15.978052126200277]]],"stroke":[]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4040070953711778000,{"inputs":[{"Node":{"node_id":2166474486859326700,"output_index":0}},{"Node":{"node_id":15908863353600836000,"output_index":0}},{"Node":{"node_id":10690271318666670633,"output_index":0}},{"Node":{"node_id":12004715210677400127,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":360.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4373650744391914031,{"inputs":[{"Node":{"node_id":3405958409855358559,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4600332392291315000,{"inputs":[{"Node":{"node_id":4040070953711778000,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Node":{"node_id":11677958249556146000,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::AssignColorsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4742778578215475000,{"inputs":[{"Node":{"node_id":6102164880094062000,"output_index":0}},{"Node":{"node_id":8876924567444570473,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5348726859432207000,{"inputs":[{"Node":{"node_id":13314559752611565452,"output_index":0}},{"Node":{"node_id":6769793510246950770,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"InterpolationDistribution":"Objects"},"exposed":false}},{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::MorphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5591755359500854000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":1789832635968548900,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5991296268862790000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[6102164880094062000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":14253625255053304000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6769793510246950770,{"inputs":[{"Node":{"node_id":799182088624980700,"output_index":0}},{"Node":{"node_id":3015793159609237965,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::DivideNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7094974507355892337,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7386572856931342000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::PercentageValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7954638344846060000,{"inputs":[{"Node":{"node_id":5991296268862790000,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.029342849,"green":0.0,"blue":0.0,"alpha":0.203125,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.030490058,"green":0.0,"blue":0.0,"alpha":0.203125,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[2000.0,0.0,0.0,2000.0,-1000.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8366826746721323000,{"inputs":[{"Node":{"node_id":5591755359500854000,"output_index":0}},{"Node":{"node_id":13846904447064916285,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8876924567444570473,{"inputs":[{"Node":{"node_id":26023588519449590,"output_index":0}},{"Value":{"tagged_value":{"ReferencePoint":"CenterLeft"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::MirrorNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8895289679682140000,{"inputs":[{"Node":{"node_id":213744308682803360,"output_index":0}},{"Node":{"node_id":7954638344846060000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9079109751490757000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":366962978353611840,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9609388203059839318,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10316247453530667000,{"inputs":[{"Node":{"node_id":9079109751490757000,"output_index":0}},{"Node":{"node_id":1250460246919467000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10463288500489480000,{"inputs":[{"Node":{"node_id":4600332392291315000,"output_index":0}},{"Node":{"node_id":4040070953711778000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10690271318666670633,{"inputs":[{"Node":{"node_id":12004715210677400127,"output_index":0}},{"Value":{"tagged_value":{"F64":0.2},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::SubtractNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11677958249556146000,{"inputs":[{"Node":{"node_id":17021405646895729000,"output_index":0}},{"Node":{"node_id":17855766443650990000,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Normal"},"exposed":false}},{"Node":{"node_id":7386572856931342000,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"raster_nodes::blending_nodes::MixNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12004715210677400127,{"inputs":[{"Node":{"node_id":3223387122603246085,"output_index":0}},{"Value":{"tagged_value":{"F64":1.1},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::MaxNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13314559752611565452,{"inputs":[{"Node":{"node_id":1250460246919467000,"output_index":0}},{"Node":{"node_id":366962978353611840,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13712392741217151405,{"inputs":[{"Node":{"node_id":5348726859432207000,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoizeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13735151800058122834,{"inputs":[{"Node":{"node_id":8895289679682140000,"output_index":0}},{"Value":{"tagged_value":{"U64":8},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13846904447064916285,{"inputs":[{"Node":{"node_id":16084834641749443000,"output_index":0}},{"Value":{"tagged_value":{"ReferencePoint":"CenterLeft"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::MirrorNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14250786159408925409,{"inputs":[{"Node":{"node_id":3430686124240113700,"output_index":0}},{"Node":{"node_id":13735151800058122834,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14253625255053304000,{"inputs":[{"Node":{"node_id":1924303400883620400,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.94750905,"green":0.5567761,"blue":0.06654528,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.94750905,"green":0.5567761,"blue":0.06654528,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.0,-24.99238943225548,24.99238943225548,0.0,-5.008560174829763,43.232052185437325]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14337610765966946000,{"inputs":[{"Node":{"node_id":14250786159408925409,"output_index":0}},{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15908863353600836000,{"inputs":[{"Node":{"node_id":7094974507355892337,"output_index":0}},{"Value":{"tagged_value":{"F64":350.0},"exposed":false}},{"Node":{"node_id":4373650744391914031,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16084834641749443000,{"inputs":[{"Node":{"node_id":16141281339223525000,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.9822506,"green":0.20507872,"blue":0.012983031,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.25,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[157.56627079134535,0.0,0.0,157.56627079134535,0.0,-102.03386929576229]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16141281339223525000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8940743774820468000,11897064075526275000,9664410344080632000,10418348123687606000,16594203120813726000,4839542169175255000,353992768245212100,4305429814263425000,15620564416450861000,4570709177617499000,9934671969500465000,6358127410693457000,753144493519442600,11874978858302702000,7888691908524886000,12582713598977278000,891169987742051100,5755835744378529000,16211201987812043000],"remove":[],"delta":[[353992768245212100,[114.87770338918835,-41.33714586101814]],[753144493519442600,[136.8395061728395,-177.6172839506173]],[891169987742051100,[63.802469135802426,-190.90123456790127]],[4305429814263425000,[91.25136529719612,-51.92090379156713]],[4570709177617499000,[114.716049382716,-90.16049382716052]],[4839542169175255000,[157.56627079134535,-37.10118604950259]],[5755835744378529000,[28.444444444444457,-210.4567901234568]],[6358127410693457000,[115.50617283950618,-132.38271604938265]],[7888691908524886000,[66.32098765432096,-154.30864197530863]],[8940743774820468000,[0.0,0.0]],[9664410344080632000,[64.51145851883956,11.32880864191867]],[9934671969500465000,[125.38271604938268,-124.67901234567891]],[10418348123687606000,[112.8352056529406,14.952290638773944]],[11874978858302702000,[92.39506172839504,-161.41975308641972]],[11897064075526275000,[72.71938634062775,26.932261408475423]],[12582713598977278000,[49.135802469135854,-136.33333333333334]],[15620564416450861000,[141.77777777777777,-86.60493827160491]],[16211201987812043000,[0.0,-231.0]],[16594203120813726000,[126.09711290079348,-8.575894451947931]]]},"segments":{"add":[7709585677887591000,14351209823603001000,18320159308706247000,8119312711427333000,4590600976245504500,17948338937502876000,1562499453192082400,3138315255762406000,2416974091592514600,3270826560526153000,5680639457836474000,3359087961315235300,9552874240071498000,15866454419016458000,4183498485018509000,2092445122112560000,16362428386097514000,12441313998107066000],"remove":[],"start_point":[[1562499453192082400,353992768245212100],[2092445122112560000,12582713598977278000],[2416974091592514600,15620564416450861000],[3138315255762406000,4305429814263425000],[3270826560526153000,4570709177617499000],[3359087961315235300,6358127410693457000],[4183498485018509000,7888691908524886000],[4590600976245504500,16594203120813726000],[5680639457836474000,9934671969500465000],[7709585677887591000,8940743774820468000],[8119312711427333000,10418348123687606000],[9552874240071498000,753144493519442600],[12441313998107066000,5755835744378529000],[14351209823603001000,11897064075526275000],[15866454419016458000,11874978858302702000],[16362428386097514000,891169987742051100],[17948338937502876000,4839542169175255000],[18320159308706247000,9664410344080632000]],"end_point":[[1562499453192082400,4305429814263425000],[2092445122112560000,891169987742051100],[2416974091592514600,4570709177617499000],[3138315255762406000,15620564416450861000],[3270826560526153000,9934671969500465000],[3359087961315235300,753144493519442600],[4183498485018509000,12582713598977278000],[4590600976245504500,4839542169175255000],[5680639457836474000,6358127410693457000],[7709585677887591000,11897064075526275000],[8119312711427333000,16594203120813726000],[9552874240071498000,11874978858302702000],[12441313998107066000,16211201987812043000],[14351209823603001000,9664410344080632000],[15866454419016458000,7888691908524886000],[16362428386097514000,5755835744378529000],[17948338937502876000,353992768245212100],[18320159308706247000,10418348123687606000]],"handle_primary":[[1562499453192082400,[-15.34246181071461,-3.7168967220297873]],[2092445122112560000,[-1.5802469135804245,-5.5308641975308035]],[2416974091592514600,[0.0,0.0]],[3138315255762406000,[-2.469006630399008,-5.902063388586043]],[3270826560526153000,[-9.086419753086432,-7.506172839506121]],[3359087961315235300,[2.7654320987655296,-14.419753086419746]],[4183498485018509000,[-6.617283950617207,15.308641975308689]],[4590600976245504500,[-7.759646437163781,-18.695929243596197]],[5680639457836474000,[0.0,0.0]],[7709585677887591000,[0.0,0.0]],[8119312711427333000,[0.0,0.0]],[9552874240071498000,[-21.33333333333331,12.049382716049422]],[12441313998107066000,[-4.938271604938336,6.518518518518533]],[14351209823603001000,[0.0,0.0]],[15866454419016458000,[-10.469135802469168,13.432098765432102]],[16362428386097514000,[-14.913580246913511,12.641975308642031]],[17948338937502876000,[0.0,0.0]],[18320159308706247000,[0.0,0.0]]],"handle_end":[[1562499453192082400,[2.0974057383288596,5.01376604938514]],[2092445122112560000,[-20.345679012345613,18.5679012345679]],[2416974091592514600,[9.086419753086377,7.506172839506235]],[3138315255762406000,[-21.33333333333337,3.753086419753061]],[3270826560526153000,[-13.03703703703701,9.679012345678984]],[3359087961315235300,[-27.099224819820336,19.753086419753146]],[4183498485018509000,[4.938271604938336,-1.1851851851851052]],[4590600976245504500,[-5.92501398131742,10.665547436428083]],[5680639457836474000,[-2.7654320987655296,14.419753086419746]],[7709585677887591000,[-42.51530058403631,-10.382498109968708]],[8119312711427333000,[-40.68684029964413,7.631779585305026]],[9552874240071498000,[4.938271604938279,11.061728395061806]],[12441313998107066000,[13.234567901234527,34.5679012345679]],[14351209823603001000,[5.742854988208705,6.327636391047918]],[15866454419016458000,[0.19753086419757435,13.827160493827137]],[16362428386097514000,[-8.0,38.419753086419746]],[17948338937502876000,[25.51458639999055,20.651563178633637]],[18320159308706247000,[-24.983271918092953,-7.776766653003392]]],"stroke":[[1562499453192082400,0],[2092445122112560000,0],[2416974091592514600,0],[3138315255762406000,0],[3270826560526153000,0],[3359087961315235300,0],[4183498485018509000,0],[4590600976245504500,0],[5680639457836474000,0],[7709585677887591000,0],[8119312711427333000,0],[9552874240071498000,0],[12441313998107066000,0],[14351209823603001000,0],[15866454419016458000,0],[16362428386097514000,0],[17948338937502876000,0],[18320159308706247000,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":1562499453192082400},{"ty":"Primary","segment":3138315255762406000}],[{"ty":"End","segment":2416974091592514600},{"ty":"Primary","segment":3270826560526153000}],[{"ty":"End","segment":5680639457836474000},{"ty":"Primary","segment":3359087961315235300}]],"remove_g1_continuous":[[{"ty":"End","segment":4183498485018509000},{"ty":"Primary","segment":2092445122112560000}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16379524086934900000,{"inputs":[{"Node":{"node_id":9609388203059839318,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.14581156,"green":0.010472343,"blue":0.010472343,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.14871852,"green":0.010626049,"blue":0.010626049,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[2000.0,0.0,0.0,2000.0,-1000.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17021405646895729000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":1.0,"green":0.082282715,"blue":0.02121901,"alpha":1.0,"linear":true},{"red":1.0,"green":0.2831488,"blue":0.052860655,"alpha":1.0,"linear":true},{"red":1.0,"green":0.4910209,"blue":0.022173883,"alpha":1.0,"linear":true}]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::GradientValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17025512774010843000,{"inputs":[{"Node":{"node_id":13712392741217151405,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8879232,"green":0.119538434,"blue":0.011612244,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8879232,"green":0.119538434,"blue":0.011612244,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.3155737704918033,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.203125,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[145.23306799940457,1.421085471520201e-14,-1.421085471520201e-14,145.23306799940457,0.7830162547740827,-109.56961984041736]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17725188707009528000,{"inputs":[{"Node":{"node_id":10316247453530667000,"output_index":0}},{"Node":{"node_id":17025512774010843000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17855766443650990000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.026241222,"green":0.16513222,"blue":0.0047769533,"alpha":1.0,"linear":true},{"red":0.17464739,"green":0.3515327,"blue":0.086500466,"alpha":1.0,"linear":true},{"red":1.0,"green":0.26635566,"blue":0.022173883,"alpha":1.0,"linear":true}]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::GradientValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17938839021657705218,{"inputs":[{"Node":{"node_id":13314559752611565452,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CountElementsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[18233215297647862000,{"inputs":[{"Node":{"node_id":14337610765966946000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1000.0,500.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[26023588519449590,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[213744308682803360,{"persistent_metadata":{"display_name":"Leaves","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[366962978353611840,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-16]}}},"network_metadata":null}}],[799182088624980700,{"persistent_metadata":{"display_name":"Divide","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Numerator","input_description":"The left-hand side of the division operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Denominator","input_description":"The right-hand side of the division operation.\n"}}],"output_names":["Output"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-33]}}},"network_metadata":null}}],[1250460246919467000,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-25]}}},"network_metadata":null}}],[1789832635968548900,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1924303400883620400,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-44,-19]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2166474486859326700,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[2,-31]}}},"network_metadata":null}}],[3015793159609237965,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Minuend","input_description":"The left-hand side of the subtraction operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Subtrahend","input_description":"The right-hand side of the subtraction operation.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-29]}}},"network_metadata":null}}],[3143874172491239000,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[26,-56]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,-3]}}},"network_metadata":null}}],[6,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-28,-3]}}},"network_metadata":null}}],[7,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3223387122603246085,{"persistent_metadata":{"display_name":"Math","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operand A","input_description":"The value of \"A\" when calculating the expression\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Expression","input_description":"A math expression that may incorporate \"A\" and/or \"B\", such as \"sqrt(A + B) - B^2\"\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operand B","input_description":"The value of \"B\" when calculating the expression\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-33,-34]}}},"network_metadata":null}}],[3405958409855358559,{"persistent_metadata":{"display_name":"Read Index","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Loop Level","input_description":""}}],"output_names":["f64"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-40,-35]}}},"network_metadata":null}}],[3430686124240113700,{"persistent_metadata":{"display_name":"Solid Backdrop","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":8}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3602127523880426500,{"persistent_metadata":{"display_name":"Individual Leaf Views","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4002029424845293600,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-51,-22]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4040070953711778000,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-12,-37]}}},"network_metadata":null}}],[4373650744391914031,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-33,-36]}}},"network_metadata":null}}],[4600332392291315000,{"persistent_metadata":{"display_name":"Assign Colors","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Content","input_description":"The content with vector paths to apply the fill and/or stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"Whether to style the fill.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stroke","input_description":"Whether to style the stroke.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_gradient","input_name":"Gradient","input_description":"The range of colors to select from.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":"Whether to reverse the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Randomize","input_description":"Whether to randomize the color selection for each element from throughout the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_seed","input_name":"Seed","input_description":"The seed used for randomization.\nSeed to determine unique variations on the randomized color selection.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_repeat_every","input_name":"Repeat Every","input_description":"The number of elements to span across the gradient before repeating. A 0 value will span the entire gradient once.\n"}}],"output_names":["Content"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4742778578215475000,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-30,-22]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5348726859432207000,{"persistent_metadata":{"display_name":"Morph","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector objects to interpolate between. Mixed graphic content is deeply flattened to keep only vector elements.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Progression","input_description":"The fractional part `[0, 1)` traverses the morph uniformly along the path. If the control path has multiple subpaths, each added integer selects the next subpath.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":"Swap the direction of the progression between objects or along the control path.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Distribution","input_description":"The parameter of change that influences the interpolation speed between each object. Equal slices in this parameter correspond to the rate of progression through the morph. This must be set to a parameter that changes.\n\n\"Objects\" morphs through each group element at an equal rate. \"Distances\" keeps constant speed with time between objects proportional to their distances. \"Angles\" keeps constant rotational speed. \"Sizes\" keeps constant shrink/growth speed. \"Slants\" keeps constant shearing angle speed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":"An optional control path whose anchor points correspond to each object. Curved segments between points will shape the morph trajectory instead of traveling straight. If there is a break between path segments, the separate subpaths are selected by index from the integer part of the progression value. For example, `[1, 2)` morphs along the segments of the second subpath, and so on.\n"}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-12,-31]}}},"network_metadata":null}}],[5591755359500854000,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5991296268862790000,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-12,-45]}}},"network_metadata":null}}],[6102164880094062000,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6769793510246950770,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Numerator","input_description":"The left-hand side of the division operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Denominator","input_description":"The right-hand side of the division operation.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-30]}}},"network_metadata":null}}],[7094974507355892337,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-37]}}},"network_metadata":null}}],[7386572856931342000,{"persistent_metadata":{"display_name":"Percentage Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Percentage","input_description":""}}],"output_names":["f64"],"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-39]}}},"network_metadata":null}}],[7954638344846060000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8366826746721323000,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-30,-13]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8876924567444570473,{"persistent_metadata":{"display_name":"Mirror","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Relative To Bounds","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Keep Original","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8895289679682140000,{"persistent_metadata":{"display_name":"Depth Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[2,-45]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9079109751490757000,{"persistent_metadata":{"display_name":"Maple Leaf","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9609388203059839318,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-38]}}},"network_metadata":null}}],[10316247453530667000,{"persistent_metadata":{"display_name":"Oak Leaf","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":1}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10463288500489480000,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10690271318666670633,{"persistent_metadata":{"display_name":"Subtract","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Minuend","input_description":"The left-hand side of the subtraction operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Subtrahend","input_description":"The right-hand side of the subtraction operation.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-35]}}},"network_metadata":null}}],[11677958249556146000,{"persistent_metadata":{"display_name":"Blend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Under","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":["Color"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-41]}}},"network_metadata":null}}],[12004715210677400127,{"persistent_metadata":{"display_name":"Max","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"One of the two numbers, of which the greater will be returned.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Other Value","input_description":"The other of the two numbers, of which the greater will be returned.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-34]}}},"network_metadata":null}}],[13314559752611565452,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-31]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13712392741217151405,{"persistent_metadata":{"display_name":"Cache","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Data","input_description":"TODO"}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-5,-31]}}},"network_metadata":null}}],[13735151800058122834,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13846904447064916285,{"persistent_metadata":{"display_name":"Mirror","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Relative To Bounds","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Keep Original","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14250786159408925409,{"persistent_metadata":{"display_name":"Leaf Levels","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14253625255053304000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14337610765966946000,{"persistent_metadata":{"display_name":"NOTE: Change seasons with the \"Percentage Value\" parameter","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[14,-52]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15908863353600836000,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-37]}}},"network_metadata":null}}],[16084834641749443000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16141281339223525000,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-58,-22]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16379524086934900000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17021405646895729000,{"persistent_metadata":{"display_name":"Gradient Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}}],"output_names":["GradientStops"],"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-41]}}},"network_metadata":null}}],[17025512774010843000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17725188707009528000,{"persistent_metadata":{"display_name":"Morph","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[9,-29]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17855766443650990000,{"persistent_metadata":{"display_name":"Gradient Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}}],"output_names":["GradientStops"],"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-40]}}},"network_metadata":null}}],[17938839021657705218,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-33,-29]}}},"network_metadata":null}}],[18233215297647862000,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[287.9366299999996,768.3549700000001],"tilt":0.0,"zoom":0.8523324275362318,"flip":false},"node_graph_to_viewport":[0.8523324275362318,0.0,0.0,0.8523324275362318,1236.0,1235.0],"node_graph_width":1981.0},"selection_undo_history":[[1924303400883620400,8366826746721323000,16084834641749443000,13846904447064916285,366962978353611840,14253625255053304000,4002029424845293600,6102164880094062000,1250460246919467000,26023588519449590,5591755359500854000,8876924567444570473,4742778578215475000,1789832635968548900,16141281339223525000],[799182088624980700,4002029424845293600,366962978353611840,14253625255053304000,5348726859432207000,4742778578215475000,16084834641749443000,8876924567444570473,1924303400883620400,26023588519449590,16141281339223525000,1789832635968548900,1250460246919467000,13846904447064916285,5591755359500854000,6102164880094062000,8366826746721323000],[8876924567444570473,799182088624980700,26023588519449590,8366826746721323000,16084834641749443000,5591755359500854000,6102164880094062000,16141281339223525000,366962978353611840,1250460246919467000,4002029424845293600,1789832635968548900,1924303400883620400,14253625255053304000,13712392741217151405,13846904447064916285,5348726859432207000,4742778578215475000],[1250460246919467000,16084834641749443000,8366826746721323000,4002029424845293600,799182088624980700,26023588519449590,5348726859432207000,366962978353611840,8876924567444570473,6102164880094062000,13712392741217151405,13846904447064916285,9079109751490757000,5591755359500854000,16141281339223525000,1789832635968548900,1924303400883620400,14253625255053304000,4742778578215475000],[1250460246919467000,5348726859432207000,8366826746721323000,14253625255053304000,5591755359500854000,13846904447064916285,26023588519449590,799182088624980700,4742778578215475000,8876924567444570473,6102164880094062000,1924303400883620400,10316247453530667000,13712392741217151405,366962978353611840,1789832635968548900,4002029424845293600,16084834641749443000,9079109751490757000,16141281339223525000],[4742778578215475000,13712392741217151405,9079109751490757000,8876924567444570473,8366826746721323000,10316247453530667000,5348726859432207000,16084834641749443000,13846904447064916285,5591755359500854000,1789832635968548900,16141281339223525000,1250460246919467000,14253625255053304000,799182088624980700,366962978353611840,4002029424845293600,1924303400883620400,17725188707009528000,26023588519449590,6102164880094062000,17025512774010843000],[5591755359500854000,366962978353611840,4002029424845293600,3602127523880426500,5348726859432207000,13846904447064916285,6102164880094062000,26023588519449590,17025512774010843000,14253625255053304000,17725188707009528000,13712392741217151405,4742778578215475000,1924303400883620400,1789832635968548900,1250460246919467000,16141281339223525000,799182088624980700,8366826746721323000,9079109751490757000,8876924567444570473,10316247453530667000,16084834641749443000],[5591755359500854000,8366826746721323000,366962978353611840,6102164880094062000],[8366826746721323000,6102164880094062000,5591755359500854000,14253625255053304000,1789832635968548900,8876924567444570473,4742778578215475000,13846904447064916285,366962978353611840],[1789832635968548900,8366826746721323000,366962978353611840,5591755359500854000,4742778578215475000,26023588519449590,8876924567444570473,6102164880094062000,13846904447064916285,16084834641749443000,14253625255053304000],[8366826746721323000,13846904447064916285,26023588519449590,8876924567444570473,366962978353611840,4002029424845293600,1789832635968548900,16084834641749443000,4742778578215475000,6102164880094062000,5591755359500854000,1250460246919467000,14253625255053304000],[8876924567444570473,799182088624980700,5348726859432207000,13846904447064916285,366962978353611840,8366826746721323000,5591755359500854000,4742778578215475000,26023588519449590,4002029424845293600,16084834641749443000,14253625255053304000,1250460246919467000,6102164880094062000,1789832635968548900],[6102164880094062000,16084834641749443000,4742778578215475000,366962978353611840,16141281339223525000,1789832635968548900,26023588519449590,5591755359500854000,8876924567444570473,13846904447064916285,1924303400883620400,799182088624980700,8366826746721323000,4002029424845293600,5348726859432207000,1250460246919467000,14253625255053304000],[1250460246919467000,26023588519449590,13846904447064916285,14253625255053304000,1924303400883620400,16141281339223525000,6102164880094062000,4742778578215475000,5348726859432207000,8366826746721323000,799182088624980700,1789832635968548900,4002029424845293600,16084834641749443000,8876924567444570473,366962978353611840,13712392741217151405,5591755359500854000],[8366826746721323000,8876924567444570473,1924303400883620400,1250460246919467000,26023588519449590,366962978353611840,14253625255053304000,6102164880094062000,4002029424845293600,16084834641749443000,4742778578215475000,13846904447064916285,1789832635968548900,5348726859432207000,5591755359500854000,799182088624980700,16141281339223525000],[799182088624980700,8366826746721323000,6102164880094062000,26023588519449590,1250460246919467000,1789832635968548900,16084834641749443000,8876924567444570473,4002029424845293600,4742778578215475000,5348726859432207000,13846904447064916285,366962978353611840,14253625255053304000,5591755359500854000],[16084834641749443000,4742778578215475000,6102164880094062000,13846904447064916285,5348726859432207000,1789832635968548900,1250460246919467000,14253625255053304000,799182088624980700,26023588519449590,5591755359500854000,366962978353611840,8366826746721323000,8876924567444570473],[8876924567444570473,26023588519449590,366962978353611840,1250460246919467000,4742778578215475000,14253625255053304000,5591755359500854000,13846904447064916285,6102164880094062000,4002029424845293600,16084834641749443000,8366826746721323000,5348726859432207000,799182088624980700,1789832635968548900],[5591755359500854000,8876924567444570473,16141281339223525000,4002029424845293600,1789832635968548900,1250460246919467000,5348726859432207000,4742778578215475000,6102164880094062000,366962978353611840,16084834641749443000,8366826746721323000,1924303400883620400,799182088624980700,26023588519449590,14253625255053304000,13846904447064916285],[1924303400883620400,8876924567444570473,1789832635968548900,4002029424845293600,799182088624980700,16084834641749443000,13846904447064916285,8366826746721323000,26023588519449590,6102164880094062000,13712392741217151405,5348726859432207000,366962978353611840,16141281339223525000,14253625255053304000,4742778578215475000,5591755359500854000,1250460246919467000],[5591755359500854000,8366826746721323000,366962978353611840,6102164880094062000],[8366826746721323000,366962978353611840,4742778578215475000,5591755359500854000,6102164880094062000],[14253625255053304000,8366826746721323000,366962978353611840,1789832635968548900,8876924567444570473,5591755359500854000,4742778578215475000,6102164880094062000,13846904447064916285],[4742778578215475000,5591755359500854000,13846904447064916285,366962978353611840,14253625255053304000,8876924567444570473,16084834641749443000,8366826746721323000,1789832635968548900,26023588519449590,6102164880094062000],[1789832635968548900,5591755359500854000,4742778578215475000,8366826746721323000,13846904447064916285,6102164880094062000,1250460246919467000,16084834641749443000,8876924567444570473,14253625255053304000,4002029424845293600,366962978353611840,26023588519449590],[1789832635968548900,5348726859432207000,5591755359500854000,8876924567444570473,8366826746721323000,26023588519449590,6102164880094062000,366962978353611840,16084834641749443000,4742778578215475000,13846904447064916285,14253625255053304000,1250460246919467000,4002029424845293600],[16084834641749443000,4002029424845293600,8366826746721323000,5591755359500854000,6102164880094062000,14253625255053304000,4742778578215475000,8876924567444570473,13846904447064916285,16141281339223525000,1924303400883620400,26023588519449590,1250460246919467000,366962978353611840,1789832635968548900,5348726859432207000],[1789832635968548900,13846904447064916285,1924303400883620400,6102164880094062000,4742778578215475000,8876924567444570473,16084834641749443000,5591755359500854000,13712392741217151405,366962978353611840,16141281339223525000,26023588519449590,8366826746721323000,1250460246919467000,5348726859432207000,4002029424845293600,14253625255053304000],[6102164880094062000,26023588519449590,8876924567444570473,4002029424845293600,4742778578215475000,8366826746721323000,5348726859432207000,5591755359500854000,16141281339223525000,13846904447064916285,1789832635968548900,1250460246919467000,14253625255053304000,16084834641749443000,366962978353611840,1924303400883620400],[1250460246919467000,13712392741217151405,1924303400883620400,16141281339223525000,6102164880094062000,8876924567444570473,366962978353611840,13846904447064916285,8366826746721323000,14253625255053304000,16084834641749443000,1789832635968548900,26023588519449590,4742778578215475000,5348726859432207000,4002029424845293600,5591755359500854000],[9079109751490757000],[9079109751490757000,10316247453530667000],[10316247453530667000,9079109751490757000,5348726859432207000],[10316247453530667000,4742778578215475000,8366826746721323000,1250460246919467000,6102164880094062000,366962978353611840,5591755359500854000,9079109751490757000,5348726859432207000],[4742778578215475000,9079109751490757000,17725188707009528000,10316247453530667000,5591755359500854000,8366826746721323000,5348726859432207000,366962978353611840,1250460246919467000,6102164880094062000],[1250460246919467000,14253625255053304000,1789832635968548900,17725188707009528000,5348726859432207000,5591755359500854000,8366826746721323000,9079109751490757000,10316247453530667000,8876924567444570473,4742778578215475000,13846904447064916285,366962978353611840,6102164880094062000],[4742778578215475000,5348726859432207000,14253625255053304000,10316247453530667000,9079109751490757000,366962978353611840,1789832635968548900,13846904447064916285,5591755359500854000,1250460246919467000,6102164880094062000,799182088624980700,8876924567444570473,8366826746721323000,17725188707009528000],[9079109751490757000,13846904447064916285,5591755359500854000,5348726859432207000,366962978353611840,799182088624980700,4742778578215475000,8876924567444570473,1789832635968548900,14253625255053304000,17725188707009528000,8366826746721323000,10316247453530667000,6102164880094062000,16084834641749443000,26023588519449590,1250460246919467000],[10316247453530667000,366962978353611840,17025512774010843000,799182088624980700,6102164880094062000,16084834641749443000,8366826746721323000,17725188707009528000,5348726859432207000,14253625255053304000,4002029424845293600,1250460246919467000,26023588519449590,9079109751490757000,13846904447064916285,1789832635968548900,5591755359500854000,4742778578215475000,13712392741217151405,8876924567444570473],[17725188707009528000,1250460246919467000,1789832635968548900,366962978353611840,5591755359500854000,9079109751490757000,14253625255053304000,5348726859432207000,4742778578215475000,6102164880094062000,10316247453530667000,799182088624980700,4002029424845293600,13846904447064916285,1924303400883620400,17025512774010843000,8876924567444570473,26023588519449590,13712392741217151405,16141281339223525000,16084834641749443000,8366826746721323000],[9641606876402405523,7094974507355892337,2166474486859326700,4373650744391914031,15908863353600836000,10690271318666670633,5348726859432207000,3223387122603246085,799182088624980700,17725188707009528000,4040070953711778000,12004715210677400127,13712392741217151405],[4040070953711778000,10690271318666670633,9641606876402405523,799182088624980700,12004715210677400127,13712392741217151405,17725188707009528000,2166474486859326700,4373650744391914031,7094974507355892337,3223387122603246085,15908863353600836000,17025512774010843000,5348726859432207000],[10690271318666670633,5348726859432207000,17725188707009528000,3223387122603246085,12004715210677400127,13712392741217151405,1250460246919467000,4373650744391914031,799182088624980700,9641606876402405523,4040070953711778000,7094974507355892337,15908863353600836000,17025512774010843000,2166474486859326700],[7094974507355892337,3223387122603246085,13712392741217151405,10316247453530667000,15908863353600836000,12004715210677400127,4040070953711778000,1250460246919467000,799182088624980700,17725188707009528000,2166474486859326700,5348726859432207000,9641606876402405523,10690271318666670633,17025512774010843000,4373650744391914031],[13712392741217151405,17025512774010843000,15908863353600836000,12004715210677400127,10690271318666670633,17725188707009528000,4373650744391914031,7094974507355892337,3602127523880426500,2166474486859326700,799182088624980700,10316247453530667000,5348726859432207000,3223387122603246085,4040070953711778000,1250460246919467000,9641606876402405523],[17025512774010843000,4040070953711778000,5348726859432207000,12004715210677400127,17725188707009528000,3602127523880426500,10690271318666670633,7094974507355892337,3223387122603246085,1250460246919467000,4742778578215475000,4002029424845293600,10316247453530667000,799182088624980700,4373650744391914031,9641606876402405523,2166474486859326700,13712392741217151405,15908863353600836000],[17725188707009528000,17025512774010843000,13712392741217151405,10690271318666670633,7094974507355892337,12004715210677400127,3223387122603246085,26023588519449590,15908863353600836000,10316247453530667000,3602127523880426500,4002029424845293600,799182088624980700,5348726859432207000,4373650744391914031,9641606876402405523,4742778578215475000,4040070953711778000,2166474486859326700,1250460246919467000],[2166474486859326700,1250460246919467000,3223387122603246085,9641606876402405523,8366826746721323000,799182088624980700,8876924567444570473,16141281339223525000,10316247453530667000,13846904447064916285,26023588519449590,7094974507355892337,15908863353600836000,3602127523880426500,4742778578215475000,5348726859432207000,17025512774010843000,6102164880094062000,4040070953711778000,14253625255053304000,17725188707009528000,10690271318666670633,4002029424845293600,12004715210677400127,13712392741217151405,16084834641749443000,4373650744391914031],[1250460246919467000,3223387122603246085,10316247453530667000,5348726859432207000,2166474486859326700,6102164880094062000,17725188707009528000,12004715210677400127,3602127523880426500,4742778578215475000,4373650744391914031,8876924567444570473,1789832635968548900,799182088624980700,17025512774010843000,4040070953711778000,7094974507355892337,9641606876402405523,5591755359500854000,4002029424845293600,26023588519449590,13712392741217151405,15908863353600836000,16141281339223525000,1924303400883620400,8366826746721323000,13846904447064916285,10690271318666670633,16084834641749443000,14253625255053304000],[13846904447064916285,4373650744391914031,4742778578215475000,366962978353611840,4002029424845293600,17725188707009528000,17025512774010843000,3223387122603246085,15908863353600836000,8876924567444570473,1924303400883620400,8366826746721323000,6102164880094062000,12004715210677400127,16141281339223525000,10316247453530667000,3602127523880426500,1789832635968548900,799182088624980700,7094974507355892337,2166474486859326700,26023588519449590,10690271318666670633,14253625255053304000,1250460246919467000,4040070953711778000,9641606876402405523,13712392741217151405,16084834641749443000,5348726859432207000,5591755359500854000],[9079109751490757000],[17725188707009528000],[13712392741217151405,17725188707009528000,5348726859432207000,17025512774010843000,2166474486859326700],[17725188707009528000,2166474486859326700,17025512774010843000,5348726859432207000,1250460246919467000,13712392741217151405],[2166474486859326700,10316247453530667000,1250460246919467000,17025512774010843000,17725188707009528000,13712392741217151405,5348726859432207000],[17025512774010843000,2166474486859326700,17725188707009528000,5348726859432207000,13712392741217151405,9079109751490757000,1250460246919467000,10316247453530667000],[17025512774010843000,13712392741217151405,8366826746721323000,2166474486859326700,1250460246919467000,5348726859432207000,9079109751490757000,10316247453530667000,5591755359500854000,17725188707009528000],[6102164880094062000,5591755359500854000,17025512774010843000,17725188707009528000,9079109751490757000,1250460246919467000,2166474486859326700,8366826746721323000,10316247453530667000,5348726859432207000,366962978353611840,13712392741217151405],[6102164880094062000,4742778578215475000,1250460246919467000,366962978353611840,1789832635968548900,14253625255053304000,5591755359500854000,2166474486859326700,13712392741217151405,17025512774010843000,17725188707009528000,9079109751490757000,10316247453530667000,5348726859432207000,13846904447064916285,8366826746721323000],[13846904447064916285,16084834641749443000,1789832635968548900,2166474486859326700,5348726859432207000,26023588519449590,1250460246919467000,6102164880094062000,366962978353611840,13712392741217151405,5591755359500854000,9079109751490757000,10316247453530667000,8876924567444570473,17725188707009528000,17025512774010843000,8366826746721323000,14253625255053304000,4742778578215475000,1924303400883620400],[9079109751490757000,366962978353611840,8876924567444570473,2166474486859326700,5348726859432207000,26023588519449590,13712392741217151405,14253625255053304000,10316247453530667000,1924303400883620400,17025512774010843000,6102164880094062000,16084834641749443000,5591755359500854000,1789832635968548900,13846904447064916285,1250460246919467000,17725188707009528000,8366826746721323000,4742778578215475000,4002029424845293600],[4002029424845293600,2166474486859326700,1924303400883620400,16084834641749443000,17725188707009528000,4742778578215475000,13846904447064916285,16141281339223525000,9079109751490757000,6102164880094062000,5591755359500854000,13712392741217151405,26023588519449590,10316247453530667000,17025512774010843000,5348726859432207000,1789832635968548900,366962978353611840,1250460246919467000,8876924567444570473,14253625255053304000,8366826746721323000],[16141281339223525000,4002029424845293600,4742778578215475000,8876924567444570473,799182088624980700,26023588519449590],[16141281339223525000,4742778578215475000,799182088624980700,4002029424845293600,1250460246919467000,26023588519449590,8876924567444570473,6102164880094062000],[14253625255053304000,8876924567444570473,1924303400883620400,1250460246919467000,799182088624980700,16141281339223525000,4742778578215475000,6102164880094062000,26023588519449590,4002029424845293600],[1924303400883620400,6102164880094062000,799182088624980700,1250460246919467000,26023588519449590,5348726859432207000,16141281339223525000,8876924567444570473,4002029424845293600,4742778578215475000,14253625255053304000],[8876924567444570473,799182088624980700,26023588519449590,14253625255053304000,6102164880094062000,1924303400883620400,16141281339223525000,4002029424845293600,366962978353611840,5348726859432207000,4742778578215475000,1250460246919467000],[26023588519449590,4742778578215475000,8366826746721323000,8876924567444570473,1250460246919467000,5348726859432207000,366962978353611840,14253625255053304000,799182088624980700,1924303400883620400,6102164880094062000,16141281339223525000,4002029424845293600],[1924303400883620400,799182088624980700,8366826746721323000,14253625255053304000,16141281339223525000,17725188707009528000,1250460246919467000,26023588519449590,5348726859432207000,4002029424845293600,6102164880094062000,4742778578215475000,8876924567444570473,366962978353611840],[1250460246919467000,8876924567444570473,14253625255053304000,16141281339223525000,1924303400883620400,17725188707009528000,4742778578215475000,13846904447064916285,6102164880094062000,8366826746721323000,16084834641749443000,17025512774010843000,4002029424845293600,799182088624980700,26023588519449590,366962978353611840,5348726859432207000],[14253625255053304000,26023588519449590,4742778578215475000,16084834641749443000,6102164880094062000,366962978353611840,17725188707009528000,799182088624980700,1924303400883620400,16141281339223525000,5591755359500854000,4002029424845293600,1250460246919467000,13846904447064916285,8876924567444570473,5348726859432207000,8366826746721323000,17025512774010843000],[799182088624980700,5591755359500854000,1789832635968548900,8366826746721323000,17025512774010843000,1250460246919467000,26023588519449590,13846904447064916285,1924303400883620400,16084834641749443000,5348726859432207000,14253625255053304000,4742778578215475000,6102164880094062000,8876924567444570473,366962978353611840,17725188707009528000,16141281339223525000,4002029424845293600],[8366826746721323000,4742778578215475000,10316247453530667000,26023588519449590,5348726859432207000,9079109751490757000,799182088624980700,13846904447064916285,14253625255053304000,1789832635968548900,366962978353611840,8876924567444570473,16084834641749443000,17725188707009528000,17025512774010843000,5591755359500854000,16141281339223525000,1924303400883620400,1250460246919467000,6102164880094062000,4002029424845293600],[16084834641749443000,17725188707009528000,16141281339223525000,799182088624980700,14253625255053304000,13712392741217151405,8366826746721323000,17025512774010843000,5348726859432207000,8876924567444570473,4002029424845293600,9079109751490757000,6102164880094062000,1250460246919467000,5591755359500854000,4742778578215475000,1789832635968548900,10316247453530667000,13846904447064916285,366962978353611840,26023588519449590,1924303400883620400],[16084834641749443000,14253625255053304000,1789832635968548900,8876924567444570473,5591755359500854000,366962978353611840,2166474486859326700,17725188707009528000,13712392741217151405,17025512774010843000,4002029424845293600,10316247453530667000,1924303400883620400,26023588519449590,1250460246919467000,9079109751490757000,8366826746721323000,16141281339223525000,799182088624980700,5348726859432207000,13846904447064916285,4742778578215475000,6102164880094062000],[3602127523880426500],[5591755359500854000,8366826746721323000],[6102164880094062000,2233138531352324200,5591755359500854000,8366826746721323000,366962978353611840],[8366826746721323000,13846904447064916285,6102164880094062000,8876924567444570473,5591755359500854000,366962978353611840,2233138531352324200,4742778578215475000,14253625255053304000,1789832635968548900],[13846904447064916285,2233138531352324200,8876924567444570473,366962978353611840,1924303400883620400,1789832635968548900,14253625255053304000,5591755359500854000,16084834641749443000,8366826746721323000,26023588519449590,4742778578215475000,6102164880094062000],[14253625255053304000,4742778578215475000,6102164880094062000,1789832635968548900,12796400626461303056,2233138531352324200,8876924567444570473,26023588519449590,8366826746721323000,366962978353611840,13846904447064916285,1924303400883620400,1250460246919467000,16084834641749443000,5591755359500854000],[4002029424845293600,366962978353611840,1789832635968548900,14253625255053304000,4742778578215475000,13846904447064916285,1924303400883620400,2233138531352324200,1250460246919467000,6102164880094062000,16084834641749443000,12796400626461303056,5591755359500854000,8366826746721323000,26023588519449590,8876924567444570473],[4002029424845293600,14253625255053304000,366962978353611840,1924303400883620400,12796400626461303056,5591755359500854000,16141281339223525000,1789832635968548900,16084834641749443000,26023588519449590,13846904447064916285,8366826746721323000,2233138531352324200,1250460246919467000,6102164880094062000,8876924567444570473,4742778578215475000],[9079109751490757000],[9079109751490757000,10316247453530667000],[10316247453530667000,17725188707009528000,9079109751490757000],[3602127523880426500],[9079109751490757000],[2233138531352324200,9079109751490757000],[2233138531352324200,8366826746721323000,366962978353611840,5591755359500854000,9079109751490757000],[366962978353611840,2233138531352324200,5591755359500854000,8366826746721323000,6102164880094062000,9079109751490757000],[5591755359500854000,9079109751490757000,13846904447064916285,2233138531352324200,366962978353611840,1789832635968548900,14253625255053304000,6102164880094062000,8366826746721323000],[1924303400883620400,13846904447064916285,366962978353611840,14253625255053304000,8366826746721323000,2233138531352324200,16084834641749443000,5591755359500854000,6102164880094062000,9079109751490757000,1789832635968548900],[366962978353611840,8366826746721323000,6102164880094062000,14253625255053304000,2233138531352324200,1924303400883620400,9079109751490757000,5591755359500854000,16084834641749443000,4742778578215475000,13846904447064916285,1789832635968548900],[14253625255053304000,1924303400883620400,26023588519449590,5591755359500854000,16084834641749443000,1789832635968548900,9079109751490757000,13846904447064916285,366962978353611840,6102164880094062000,4742778578215475000,4002029424845293600,2233138531352324200,8366826746721323000],[1789832635968548900,26023588519449590,5591755359500854000,1924303400883620400,16084834641749443000,13846904447064916285,4742778578215475000,9079109751490757000,366962978353611840,8876924567444570473,2233138531352324200,14253625255053304000,8366826746721323000,4002029424845293600,6102164880094062000],[5591755359500854000,16141281339223525000,4742778578215475000,14253625255053304000,26023588519449590,2233138531352324200,13846904447064916285,1789832635968548900,1924303400883620400,16084834641749443000,8366826746721323000,8876924567444570473,6102164880094062000,9079109751490757000,366962978353611840,4002029424845293600],[16141281339223525000,1789832635968548900,16084834641749443000,26023588519449590,8876924567444570473,13846904447064916285,1924303400883620400,2233138531352324200,8366826746721323000,10316247453530667000,5591755359500854000,4742778578215475000,6102164880094062000,366962978353611840,4002029424845293600,9079109751490757000,14253625255053304000],[4002029424845293600,2233138531352324200,1789832635968548900,1924303400883620400,16084834641749443000,1250460246919467000,5591755359500854000,4742778578215475000,14253625255053304000,9079109751490757000,8876924567444570473,10316247453530667000,13846904447064916285,6102164880094062000,8366826746721323000,26023588519449590,12796400626461303056,366962978353611840,16141281339223525000],[]],"selection_redo_history":[]}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"e647ca9f91a5e823137122126fe9e980f65d62ea","document_ptz":{"pan":[-999.7861718531644,-499.944688737096],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":3143874172491239000,"output_index":0}}],"nodes":[[26023588519449590,{"inputs":[{"Node":{"node_id":4002029424845293600,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.94750905,"green":0.5567761,"blue":0.06654528,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.94750905,"green":0.5567761,"blue":0.06654528,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.0,-92.53735521402166,92.53735521402166,0.0,9.606221358397944,-69.72678572415595]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[213744308682803360,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":10463288500489480000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[366962978353611840,{"inputs":[{"Node":{"node_id":8366826746721323000,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Union"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[799182088624980700,{"inputs":[{"Node":{"node_id":7386572856931342000,"output_index":0}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::DivideNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1250460246919467000,{"inputs":[{"Node":{"node_id":4742778578215475000,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Union"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1789832635968548900,{"inputs":[{"Node":{"node_id":1924303400883620400,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.9822506,"green":0.20507872,"blue":0.012983031,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.25,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[9.4105020317595,0.0,0.0,9.4105020317595,-5.928761491996683,27.64206180233515]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1924303400883620400,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[12399235852192450000,16255990754021933000,15620668684239604000,5432878891027338000],"remove":[5992115648840007000],"delta":[[5432878891027338000,[-0.8525377229081244,-6.779663923182397]],[12399235852192450000,[3.4492455418381667,-6.252914951989055]],[15620668684239604000,[-7.105427357601002e-15,61.89300411522633]],[16255990754021933000,[3.423868312757215,60.83950617283953]]]},"segments":{"add":[1366074222973177300,9911415907547690000,3820594103877681000,5933636287523951000],"remove":[16939395239973712000],"start_point":[[1366074222973177300,12399235852192450000],[3820594103877681000,15620668684239604000],[5933636287523951000,5432878891027338000],[9911415907547690000,16255990754021933000]],"end_point":[[1366074222973177300,16255990754021933000],[3820594103877681000,5432878891027338000],[5933636287523951000,12399235852192450000],[9911415907547690000,15620668684239604000]],"handle_primary":[[1366074222973177300,[-12.729766803840905,34.6776406035666]],[3820594103877681000,[-1.2746024488136916,-0.5300005080526233]],[5933636287523951000,[0.0,0.0]],[9911415907547690000,[-0.6380090646381761,1.00935799390129]]],"handle_end":[[1366074222973177300,[1.0502464055275982,-1.6615353350607336]],[3820594103877681000,[-11.281207133058956,31.692729766803836]],[5933636287523951000,[0.0,0.0]],[9911415907547690000,[1.1025726645520375,0.4584677151070898]]],"stroke":[[1366074222973177300,0],[3820594103877681000,0],[5933636287523951000,0],[9911415907547690000,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":3820594103877681000},{"ty":"End","segment":9911415907547690000}],[{"ty":"Primary","segment":9911415907547690000},{"ty":"End","segment":1366074222973177300}]],"remove_g1_continuous":[[{"ty":"Primary","segment":1366074222973177300},{"ty":"End","segment":5933636287523951000}],[{"ty":"End","segment":3820594103877681000},{"ty":"Primary","segment":16939395239973712000}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2166474486859326700,{"inputs":[{"Node":{"node_id":13712392741217151405,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.0,"linear":true},{"red":0.008518312,"green":0.008518312,"blue":0.008518312,"alpha":0.08775313,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.20392157,"linear":true}],"position":[0.0,0.6885245901639344,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8879232,"green":0.119538434,"blue":0.011612244,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.0,"linear":true},{"red":0.008518312,"green":0.008518312,"blue":0.008518312,"alpha":0.08775313,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.20392157,"linear":true}],"position":[0.0,0.6885245901639344,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[145.23306799940457,1.421085471520201e-14,-1.421085471520201e-14,145.23306799940457,0.7830162547740827,-109.56961984041736]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3015793159609237965,{"inputs":[{"Node":{"node_id":17938839021657705218,"output_index":0}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::SubtractNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3143874172491239000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}},"exposed":true}},{"Node":{"node_id":18233215297647862000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"Generic":"T"}]},"import_index":1}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":2}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":3}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":4}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3223387122603246085,{"inputs":[{"Node":{"node_id":3405958409855358559,"output_index":0}},{"Value":{"tagged_value":{"String":"2 - 0.2A"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::MathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3405958409855358559,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::ReadIndexNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":""}}],[3430686124240113700,{"inputs":[{"Node":{"node_id":3602127523880426500,"output_index":0}},{"Node":{"node_id":16379524086934900000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3602127523880426500,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":17725188707009528000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4002029424845293600,{"inputs":[{"Node":{"node_id":16141281339223525000,"output_index":0}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[],"remove":[],"delta":[[353992768245212100,[-42.27413685969588,-41.62581710194484]],[753144493519442600,[-50.013717421124845,21.17283950617286]],[891169987742051100,[-4.148148148148122,-38.03703703703696]],[4305429814263425000,[-22.598416051654286,-32.71009758017498]],[4570709177617499000,[-62.76543209876538,-6.827160493827164]],[4839542169175255000,[-127.45378793812174,-12.06205126188287]],[5755835744378529000,[-17.333333333333343,-33.1358024691358]],[6358127410693457000,[-37.72290809327849,-10.54183813443079]],[7888691908524886000,[4.351165980795637,-8.105624142661181]],[9664410344080632000,[-35.276890617605005,-25.55103086414088]],[9934671969500465000,[-43.209876543209866,-14.975308641975468]],[10418348123687606000,[-61.3893894663837,-52.000301612710835]],[11874978858302702000,[5.843621399176955,-10.914951989026145]],[11897064075526275000,[-61.65765794556601,-32.902083082000814]],[12582713598977278000,[9.333333333333268,-66.33333333333327]],[15620564416450861000,[-47.66529492455423,-18.042524005486992]],[16211201987812043000,[-7.105427357601002e-15,-23.90123456790124]],[16594203120813726000,[-62.53607037678802,-36.02218510909459]]]},"segments":{"add":[],"remove":[],"start_point":[],"end_point":[],"handle_primary":[[1562499453192082400,[-0.08779149519892826,-1.6680384087791111]],[2092445122112560000,[-7.308641975308667,2.9629629629629903]],[2416974091592514600,[0.0,0.0]],[3138315255762406000,[4.038408779149492,-14.5733882030178]],[3270826560526153000,[-10.966434817733528,4.317749647005792]],[3359087961315235300,[-0.2881601545358876,-1.8891182956799923]],[4183498485018509000,[-37.13580246913581,14.485596707818928]],[4590600976245504500,[-6.49657064471878,1.2290809327846404]],[5680639457836474000,[0.0,0.0]],[8119312711427333000,[0.0,0.0]],[9552874240071498000,[-5.53086419753086,-0.9657064471879552]],[12441313998107066000,[-4.938271604938336,6.518518518518476]],[14351209823603001000,[0.0,0.0]],[15866454419016458000,[-9.913311783442964,6.121455371873111]],[16362428386097514000,[-23.70370370370371,19.950617283950606]],[17948338937502876000,[0.0,0.0]],[18320159308706247000,[0.0,0.0]]],"handle_end":[[1562499453192082400,[-0.6668238551234532,2.406364346749864]],[2092445122112560000,[-9.086419753086416,21.135802469135797]],[2416974091592514600,[37.06995884773662,-14.595336076817532]],[3138315255762406000,[-8.098765432098759,2.947337553780912]],[3270826560526153000,[-49.33882030178324,27.10562414266127]],[3359087961315235300,[-7.813443072702299,7.725651577503442]],[4183498485018509000,[-21.94787379972564,36.565157750342905]],[4590600976245504500,[14.222222222222207,7.989026063100134]],[5680639457836474000,[0.2881601545359018,1.8891182956799923]],[7709585677887591000,[-8.603566529492472,0.8779149519890552]],[8119312711427333000,[-16.241426611796967,5.355281207133061]],[9552874240071498000,[-7.286694101508885,7.55006858710567]],[12441313998107066000,[5.171144805176233,13.506721506057374]],[14351209823603001000,[-7.374485596707803,5.70644718792866]],[15866454419016458000,[2.458161865569238,7.637860082304542]],[16362428386097514000,[-6.962962962962983,53.17283950617292]],[17948338937502876000,[-50.30452674897121,26.776406035665325]],[18320159308706247000,[-41.26200274348419,15.978052126200277]]],"stroke":[]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4040070953711778000,{"inputs":[{"Node":{"node_id":15908863353600836000,"output_index":0}},{"Node":{"node_id":2166474486859326700,"output_index":0}},{"Node":{"node_id":10690271318666670633,"output_index":0}},{"Node":{"node_id":12004715210677400127,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":360.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4373650744391914031,{"inputs":[{"Node":{"node_id":3405958409855358559,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4600332392291315000,{"inputs":[{"Node":{"node_id":4040070953711778000,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Node":{"node_id":11677958249556146000,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::AssignColorsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4742778578215475000,{"inputs":[{"Node":{"node_id":6102164880094062000,"output_index":0}},{"Node":{"node_id":8876924567444570473,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5348726859432207000,{"inputs":[{"Node":{"node_id":13314559752611565452,"output_index":0}},{"Node":{"node_id":6769793510246950770,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"InterpolationDistribution":"Objects"},"exposed":false}},{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector","alias":"Vector"}}}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::MorphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5591755359500854000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":1789832635968548900,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5991296268862790000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6102164880094062000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":14253625255053304000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6769793510246950770,{"inputs":[{"Node":{"node_id":799182088624980700,"output_index":0}},{"Node":{"node_id":3015793159609237965,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::DivideNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7094974507355892337,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7386572856931342000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::PercentageValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7954638344846060000,{"inputs":[{"Node":{"node_id":5991296268862790000,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.029342849,"green":0.0,"blue":0.0,"alpha":0.203125,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.030490058,"green":0.0,"blue":0.0,"alpha":0.203125,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[2000.0,0.0,0.0,2000.0,-1000.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8366826746721323000,{"inputs":[{"Node":{"node_id":5591755359500854000,"output_index":0}},{"Node":{"node_id":13846904447064916285,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8876924567444570473,{"inputs":[{"Node":{"node_id":26023588519449590,"output_index":0}},{"Value":{"tagged_value":{"ReferencePoint":"CenterLeft"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::MirrorNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8895289679682140000,{"inputs":[{"Node":{"node_id":213744308682803360,"output_index":0}},{"Node":{"node_id":7954638344846060000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9079109751490757000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":366962978353611840,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9609388203059839318,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10316247453530667000,{"inputs":[{"Node":{"node_id":9079109751490757000,"output_index":0}},{"Node":{"node_id":1250460246919467000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10463288500489480000,{"inputs":[{"Node":{"node_id":4600332392291315000,"output_index":0}},{"Node":{"node_id":4040070953711778000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10690271318666670633,{"inputs":[{"Node":{"node_id":12004715210677400127,"output_index":0}},{"Value":{"tagged_value":{"F64":0.2},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::SubtractNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11677958249556146000,{"inputs":[{"Node":{"node_id":17021405646895729000,"output_index":0}},{"Node":{"node_id":17855766443650990000,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Normal"},"exposed":false}},{"Node":{"node_id":7386572856931342000,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"raster_nodes::blending_nodes::MixNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12004715210677400127,{"inputs":[{"Node":{"node_id":3223387122603246085,"output_index":0}},{"Value":{"tagged_value":{"F64":1.1},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::MaxNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13314559752611565452,{"inputs":[{"Node":{"node_id":1250460246919467000,"output_index":0}},{"Node":{"node_id":366962978353611840,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13712392741217151405,{"inputs":[{"Node":{"node_id":5348726859432207000,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoizeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13735151800058122834,{"inputs":[{"Node":{"node_id":8895289679682140000,"output_index":0}},{"Value":{"tagged_value":{"U64":8},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13846904447064916285,{"inputs":[{"Node":{"node_id":16084834641749443000,"output_index":0}},{"Value":{"tagged_value":{"ReferencePoint":"CenterLeft"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::MirrorNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14250786159408925409,{"inputs":[{"Node":{"node_id":3430686124240113700,"output_index":0}},{"Node":{"node_id":13735151800058122834,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14253625255053304000,{"inputs":[{"Node":{"node_id":1924303400883620400,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.94750905,"green":0.5567761,"blue":0.06654528,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.94750905,"green":0.5567761,"blue":0.06654528,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.0,-24.99238943225548,24.99238943225548,0.0,-5.008560174829763,43.232052185437325]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14337610765966946000,{"inputs":[{"Node":{"node_id":14250786159408925409,"output_index":0}},{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15908863353600836000,{"inputs":[{"Node":{"node_id":7094974507355892337,"output_index":0}},{"Value":{"tagged_value":{"F64":350.0},"exposed":false}},{"Node":{"node_id":4373650744391914031,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16084834641749443000,{"inputs":[{"Node":{"node_id":16141281339223525000,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.9822506,"green":0.20507872,"blue":0.012983031,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.25,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[157.56627079134535,0.0,0.0,157.56627079134535,0.0,-102.03386929576229]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16141281339223525000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8940743774820468000,11897064075526275000,9664410344080632000,10418348123687606000,16594203120813726000,4839542169175255000,353992768245212100,4305429814263425000,15620564416450861000,4570709177617499000,9934671969500465000,6358127410693457000,753144493519442600,11874978858302702000,7888691908524886000,12582713598977278000,891169987742051100,5755835744378529000,16211201987812043000],"remove":[],"delta":[[353992768245212100,[114.87770338918835,-41.33714586101814]],[753144493519442600,[136.8395061728395,-177.6172839506173]],[891169987742051100,[63.802469135802426,-190.90123456790127]],[4305429814263425000,[91.25136529719612,-51.92090379156713]],[4570709177617499000,[114.716049382716,-90.16049382716052]],[4839542169175255000,[157.56627079134535,-37.10118604950259]],[5755835744378529000,[28.444444444444457,-210.4567901234568]],[6358127410693457000,[115.50617283950618,-132.38271604938265]],[7888691908524886000,[66.32098765432096,-154.30864197530863]],[8940743774820468000,[0.0,0.0]],[9664410344080632000,[64.51145851883956,11.32880864191867]],[9934671969500465000,[125.38271604938268,-124.67901234567891]],[10418348123687606000,[112.8352056529406,14.952290638773944]],[11874978858302702000,[92.39506172839504,-161.41975308641972]],[11897064075526275000,[72.71938634062775,26.932261408475423]],[12582713598977278000,[49.135802469135854,-136.33333333333334]],[15620564416450861000,[141.77777777777777,-86.60493827160491]],[16211201987812043000,[0.0,-231.0]],[16594203120813726000,[126.09711290079348,-8.575894451947931]]]},"segments":{"add":[7709585677887591000,14351209823603001000,18320159308706247000,8119312711427333000,4590600976245504500,17948338937502876000,1562499453192082400,3138315255762406000,2416974091592514600,3270826560526153000,5680639457836474000,3359087961315235300,9552874240071498000,15866454419016458000,4183498485018509000,2092445122112560000,16362428386097514000,12441313998107066000],"remove":[],"start_point":[[1562499453192082400,353992768245212100],[2092445122112560000,12582713598977278000],[2416974091592514600,15620564416450861000],[3138315255762406000,4305429814263425000],[3270826560526153000,4570709177617499000],[3359087961315235300,6358127410693457000],[4183498485018509000,7888691908524886000],[4590600976245504500,16594203120813726000],[5680639457836474000,9934671969500465000],[7709585677887591000,8940743774820468000],[8119312711427333000,10418348123687606000],[9552874240071498000,753144493519442600],[12441313998107066000,5755835744378529000],[14351209823603001000,11897064075526275000],[15866454419016458000,11874978858302702000],[16362428386097514000,891169987742051100],[17948338937502876000,4839542169175255000],[18320159308706247000,9664410344080632000]],"end_point":[[1562499453192082400,4305429814263425000],[2092445122112560000,891169987742051100],[2416974091592514600,4570709177617499000],[3138315255762406000,15620564416450861000],[3270826560526153000,9934671969500465000],[3359087961315235300,753144493519442600],[4183498485018509000,12582713598977278000],[4590600976245504500,4839542169175255000],[5680639457836474000,6358127410693457000],[7709585677887591000,11897064075526275000],[8119312711427333000,16594203120813726000],[9552874240071498000,11874978858302702000],[12441313998107066000,16211201987812043000],[14351209823603001000,9664410344080632000],[15866454419016458000,7888691908524886000],[16362428386097514000,5755835744378529000],[17948338937502876000,353992768245212100],[18320159308706247000,10418348123687606000]],"handle_primary":[[1562499453192082400,[-15.34246181071461,-3.7168967220297873]],[2092445122112560000,[-1.5802469135804245,-5.5308641975308035]],[2416974091592514600,[0.0,0.0]],[3138315255762406000,[-2.469006630399008,-5.902063388586043]],[3270826560526153000,[-9.086419753086432,-7.506172839506121]],[3359087961315235300,[2.7654320987655296,-14.419753086419746]],[4183498485018509000,[-6.617283950617207,15.308641975308689]],[4590600976245504500,[-7.759646437163781,-18.695929243596197]],[5680639457836474000,[0.0,0.0]],[7709585677887591000,[0.0,0.0]],[8119312711427333000,[0.0,0.0]],[9552874240071498000,[-21.33333333333331,12.049382716049422]],[12441313998107066000,[-4.938271604938336,6.518518518518533]],[14351209823603001000,[0.0,0.0]],[15866454419016458000,[-10.469135802469168,13.432098765432102]],[16362428386097514000,[-14.913580246913511,12.641975308642031]],[17948338937502876000,[0.0,0.0]],[18320159308706247000,[0.0,0.0]]],"handle_end":[[1562499453192082400,[2.0974057383288596,5.01376604938514]],[2092445122112560000,[-20.345679012345613,18.5679012345679]],[2416974091592514600,[9.086419753086377,7.506172839506235]],[3138315255762406000,[-21.33333333333337,3.753086419753061]],[3270826560526153000,[-13.03703703703701,9.679012345678984]],[3359087961315235300,[-27.099224819820336,19.753086419753146]],[4183498485018509000,[4.938271604938336,-1.1851851851851052]],[4590600976245504500,[-5.92501398131742,10.665547436428083]],[5680639457836474000,[-2.7654320987655296,14.419753086419746]],[7709585677887591000,[-42.51530058403631,-10.382498109968708]],[8119312711427333000,[-40.68684029964413,7.631779585305026]],[9552874240071498000,[4.938271604938279,11.061728395061806]],[12441313998107066000,[13.234567901234527,34.5679012345679]],[14351209823603001000,[5.742854988208705,6.327636391047918]],[15866454419016458000,[0.19753086419757435,13.827160493827137]],[16362428386097514000,[-8.0,38.419753086419746]],[17948338937502876000,[25.51458639999055,20.651563178633637]],[18320159308706247000,[-24.983271918092953,-7.776766653003392]]],"stroke":[[1562499453192082400,0],[2092445122112560000,0],[2416974091592514600,0],[3138315255762406000,0],[3270826560526153000,0],[3359087961315235300,0],[4183498485018509000,0],[4590600976245504500,0],[5680639457836474000,0],[7709585677887591000,0],[8119312711427333000,0],[9552874240071498000,0],[12441313998107066000,0],[14351209823603001000,0],[15866454419016458000,0],[16362428386097514000,0],[17948338937502876000,0],[18320159308706247000,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":1562499453192082400},{"ty":"Primary","segment":3138315255762406000}],[{"ty":"End","segment":2416974091592514600},{"ty":"Primary","segment":3270826560526153000}],[{"ty":"End","segment":5680639457836474000},{"ty":"Primary","segment":3359087961315235300}]],"remove_g1_continuous":[[{"ty":"End","segment":4183498485018509000},{"ty":"Primary","segment":2092445122112560000}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16379524086934900000,{"inputs":[{"Node":{"node_id":9609388203059839318,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.14581156,"green":0.010472343,"blue":0.010472343,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.14871852,"green":0.010626049,"blue":0.010626049,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[2000.0,0.0,0.0,2000.0,-1000.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17021405646895729000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":1.0,"green":0.082282715,"blue":0.02121901,"alpha":1.0,"linear":true},{"red":1.0,"green":0.2831488,"blue":0.052860655,"alpha":1.0,"linear":true},{"red":1.0,"green":0.4910209,"blue":0.022173883,"alpha":1.0,"linear":true}],"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::GradientValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17025512774010843000,{"inputs":[{"Node":{"node_id":13712392741217151405,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8879232,"green":0.119538434,"blue":0.011612244,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8879232,"green":0.119538434,"blue":0.011612244,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.203125,"linear":true}],"position":[0.3155737704918033,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[145.23306799940457,1.421085471520201e-14,-1.421085471520201e-14,145.23306799940457,0.7830162547740827,-109.56961984041736]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17725188707009528000,{"inputs":[{"Node":{"node_id":10316247453530667000,"output_index":0}},{"Node":{"node_id":17025512774010843000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17855766443650990000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.026241222,"green":0.16513222,"blue":0.0047769533,"alpha":1.0,"linear":true},{"red":0.17464739,"green":0.3515327,"blue":0.086500466,"alpha":1.0,"linear":true},{"red":1.0,"green":0.26635566,"blue":0.022173883,"alpha":1.0,"linear":true}],"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::GradientValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17938839021657705218,{"inputs":[{"Node":{"node_id":13314559752611565452,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::ListLengthNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18233215297647862000,{"inputs":[{"Node":{"node_id":14337610765966946000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1000.0,500.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[26023588519449590,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[213744308682803360,{"persistent_metadata":{"display_name":"Leaves","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[366962978353611840,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-16]}}},"network_metadata":null}}],[799182088624980700,{"persistent_metadata":{"display_name":"Divide","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Numerator","input_description":"The left-hand side of the division operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Denominator","input_description":"The right-hand side of the division operation.\n"}}],"output_names":["Output"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-33]}}},"network_metadata":null}}],[1250460246919467000,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-25]}}},"network_metadata":null}}],[1789832635968548900,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1924303400883620400,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-44,-19]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2166474486859326700,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[2,-31]}}},"network_metadata":null}}],[3015793159609237965,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Minuend","input_description":"The left-hand side of the subtraction operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Subtrahend","input_description":"The right-hand side of the subtraction operation.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-29]}}},"network_metadata":null}}],[3143874172491239000,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[26,-56]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3223387122603246085,{"persistent_metadata":{"display_name":"Math","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operand A","input_description":"The value of \"A\" when calculating the expression\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Expression","input_description":"A math expression that may incorporate \"A\" and/or \"B\", such as \"sqrt(A + B) - B^2\"\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operand B","input_description":"The value of \"B\" when calculating the expression\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-33,-34]}}},"network_metadata":null}}],[3405958409855358559,{"persistent_metadata":{"display_name":"Read Index","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Loop Level","input_description":""}}],"output_names":["f64"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-40,-35]}}},"network_metadata":null}}],[3430686124240113700,{"persistent_metadata":{"display_name":"Solid Backdrop","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":8}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3602127523880426500,{"persistent_metadata":{"display_name":"Individual Leaf Views","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4002029424845293600,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4040070953711778000,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-12,-37]}}},"network_metadata":null}}],[4373650744391914031,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-33,-36]}}},"network_metadata":null}}],[4600332392291315000,{"persistent_metadata":{"display_name":"Assign Colors","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Content","input_description":"The content with vector paths to apply the fill and/or stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"Whether to style the fill.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stroke","input_description":"Whether to style the stroke.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_gradient","input_name":"Gradient","input_description":"The range of colors to select from.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":"Whether to reverse the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Randomize","input_description":"Whether to randomize the color selection for each element from throughout the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_seed","input_name":"Seed","input_description":"The seed used for randomization.\nSeed to determine unique variations on the randomized color selection.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_repeat_every","input_name":"Repeat Every","input_description":"The number of elements to span across the gradient before repeating. A 0 value will span the entire gradient once.\n"}}],"output_names":["Content"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4742778578215475000,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-30,-22]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5348726859432207000,{"persistent_metadata":{"display_name":"Morph","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector objects to interpolate between. Mixed graphic content is deeply flattened to keep only vector elements.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Progression","input_description":"The fractional part `[0, 1)` traverses the morph uniformly along the path. If the control path has multiple subpaths, each added integer selects the next subpath.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":"Swap the direction of the progression between objects or along the control path.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Distribution","input_description":"The parameter of change that influences the interpolation speed between each object. Equal slices in this parameter correspond to the rate of progression through the morph. This must be set to a parameter that changes.\n\n\"Objects\" morphs through each group element at an equal rate. \"Distances\" keeps constant speed with time between objects proportional to their distances. \"Angles\" keeps constant rotational speed. \"Sizes\" keeps constant shrink/growth speed. \"Slants\" keeps constant shearing angle speed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":"An optional control path whose anchor points correspond to each object. Curved segments between points will shape the morph trajectory instead of traveling straight. If there is a break between path segments, the separate subpaths are selected by index from the integer part of the progression value. For example, `[1, 2)` morphs along the segments of the second subpath, and so on.\n"}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-12,-31]}}},"network_metadata":null}}],[5591755359500854000,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5991296268862790000,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6102164880094062000,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6769793510246950770,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Numerator","input_description":"The left-hand side of the division operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Denominator","input_description":"The right-hand side of the division operation.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-30]}}},"network_metadata":null}}],[7094974507355892337,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-37]}}},"network_metadata":null}}],[7386572856931342000,{"persistent_metadata":{"display_name":"Percentage Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Percentage","input_description":""}}],"output_names":["f64"],"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-39]}}},"network_metadata":null}}],[7954638344846060000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8366826746721323000,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-30,-13]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8876924567444570473,{"persistent_metadata":{"display_name":"Mirror","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Relative To Bounds","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Keep Original","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8895289679682140000,{"persistent_metadata":{"display_name":"Depth Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[2,-45]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9079109751490757000,{"persistent_metadata":{"display_name":"Maple Leaf","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9609388203059839318,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10316247453530667000,{"persistent_metadata":{"display_name":"Oak Leaf","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":1}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10463288500489480000,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10690271318666670633,{"persistent_metadata":{"display_name":"Subtract","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Minuend","input_description":"The left-hand side of the subtraction operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Subtrahend","input_description":"The right-hand side of the subtraction operation.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-35]}}},"network_metadata":null}}],[11677958249556146000,{"persistent_metadata":{"display_name":"Blend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Under","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":["Color"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-41]}}},"network_metadata":null}}],[12004715210677400127,{"persistent_metadata":{"display_name":"Max","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"One of the two numbers, of which the greater will be returned.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Other Value","input_description":"The other of the two numbers, of which the greater will be returned.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-34]}}},"network_metadata":null}}],[13314559752611565452,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-40,-31]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13712392741217151405,{"persistent_metadata":{"display_name":"Cache","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Data","input_description":"TODO"}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-5,-31]}}},"network_metadata":null}}],[13735151800058122834,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13846904447064916285,{"persistent_metadata":{"display_name":"Mirror","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Relative To Bounds","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Keep Original","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14250786159408925409,{"persistent_metadata":{"display_name":"Leaf Levels","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14253625255053304000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14337610765966946000,{"persistent_metadata":{"display_name":"NOTE: Change seasons with the \"Percentage Value\" parameter","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[14,-52]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15908863353600836000,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-37]}}},"network_metadata":null}}],[16084834641749443000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16141281339223525000,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-58,-22]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16379524086934900000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17021405646895729000,{"persistent_metadata":{"display_name":"Gradient Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}}],"output_names":[""],"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-41]}}},"network_metadata":null}}],[17025512774010843000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17725188707009528000,{"persistent_metadata":{"display_name":"Morph","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[9,-29]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17855766443650990000,{"persistent_metadata":{"display_name":"Gradient Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}}],"output_names":[""],"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-40]}}},"network_metadata":null}}],[17938839021657705218,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-33,-29]}}},"network_metadata":null}}],[18233215297647862000,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[287.90347343378556,767.8754673564654],"tilt":0.0,"zoom":0.8519021739130436,"flip":false},"node_graph_to_viewport":[0.8519021739130436,0.0,0.0,0.8519021739130436,1235.0,1234.0],"node_graph_width":1980.0}}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"","document_ptz":{"pan":[-999.7861718531644,-499.944688737096],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/isometric-fountain.graphite b/demo-artwork/isometric-fountain.graphite index 66ec9833d3..7b447f7633 100644 --- a/demo-artwork/isometric-fountain.graphite +++ b/demo-artwork/isometric-fountain.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":15709488322180832347,"output_index":0}}],"nodes":[[57904581517036791,{"inputs":[{"Node":{"node_id":9393309733761233513,"output_index":0}},{"Node":{"node_id":15300421479077882117,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[70804263053697201,{"inputs":[{"Node":{"node_id":13942787566051910019,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[3.410605131648481e-13,3.410605131648481e-13]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1268.999999999999,634.9999999999992]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[183952488591282082,{"inputs":[{"Node":{"node_id":17965270694495451178,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,-6.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[194878846429432339,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[671.7691453623979,420.00000000000006]],[2,[559.8076211353317,450.0000000000001]],[3,[410.5255888325765,410.0]],[4,[522.4871130596428,380.00000000000006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[322234583139821148,{"inputs":[{"Node":{"node_id":6589978257209505606,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[326112971739898070,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[559.8076211353317,610.0]],[2,[578.4678751731759,615.0]],[3,[597.1281292110207,610.0]],[4,[578.4678751731759,605.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[-1.1368683772161605e-13,-1.1368683772161605e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[429913874753911073,{"inputs":[{"Node":{"node_id":11236872744106223256,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.80695236,"blue":0.56471163,"alpha":0.75,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[456239140723765386,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[514222872092587805,{"inputs":[{"Node":{"node_id":5434119356821575534,"output_index":0}},{"Node":{"node_id":3679103217373457623,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[532055960192543062,{"inputs":[{"Node":{"node_id":326112971739898070,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[585709295659496998,{"inputs":[{"Node":{"node_id":11990662272042254522,"output_index":0}},{"Node":{"node_id":12331680982485935376,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[664587514588499648,{"inputs":[{"Node":{"node_id":5365849201631468915,"output_index":0}},{"Node":{"node_id":16564941800301062922,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[729026403095264425,{"inputs":[{"Node":{"node_id":9392462024456293097,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[764189229787475993,{"inputs":[{"Node":{"node_id":194878846429432339,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[938033825024582130,{"inputs":[{"Node":{"node_id":10477328336261010694,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.21586053,"green":0.47932023,"blue":0.46207705,"alpha":1.0,"linear":true},{"red":0.21586053,"green":0.47932023,"blue":0.46207705,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.21586053,"green":0.47932023,"blue":0.46207705,"alpha":1.0,"linear":true},{"red":0.21586053,"green":0.47932023,"blue":0.46207705,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-9.16419579684299,34.691530621701645,-34.691530621701645,-9.16419579684299,483.2823361060136,589.0672669244975]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[958845362613832240,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[971.7488173182716,440.37931084632993]],[2,[971.7488173182714,480.37931084632993]],[3,[1195.6718657723986,420.3793108463287]],[4,[1195.671865772399,520.3793108463286]],[5,[1382.2744061508483,470.3793108463301]],[6,[1382.2744061508486,330.3793108463298]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[972153153989181918,{"inputs":[{"Node":{"node_id":15488533792651297821,"output_index":0}},{"Node":{"node_id":9981992739451603109,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1032659476619711014,{"inputs":[{"Node":{"node_id":3014633976566537110,"output_index":0}},{"Node":{"node_id":2452294403891427489,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1104068854328504126,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1343.538290724796,580.0000000000001]],[2,[1530.14083110324,530.000000000003]],[3,[1530.14083110324,470.00000000000216]],[4,[1343.5382907247958,520.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1108089904278882840,{"inputs":[{"Node":{"node_id":5317925967883407701,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[69.79423868312793,0.0,0.0,69.79423868312793,-40.648024782723304,134.97463761731152]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1147521068928676110,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":938033825024582130,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1156213189397385283,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[55.98076211353359,615.0]],[2,[65.3108891324556,617.5]],[3,[83.97114317030051,612.4999999999999]],[4,[74.64101615137773,610.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1229809699395562135,{"inputs":[{"Node":{"node_id":2843751023378786714,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-36.95875397623445,-88.44786737074935]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.442673035713692,1.442673035713692]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1268775104597510914,{"inputs":[{"Node":{"node_id":13861850149743924125,"output_index":0}},{"Node":{"node_id":18011777376689315137,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1396768435017101055,{"inputs":[{"Node":{"node_id":15914878146223026034,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[83.0034142151073,0.0,0.0,83.0034142151073,-23.148253406408465,102.48745716339816]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1490537476612110327,{"inputs":[{"Node":{"node_id":2900504420179573771,"output_index":0}},{"Node":{"node_id":429913874753911073,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1658032775659237960,{"inputs":[{"Node":{"node_id":14483299526002574058,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297003,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1831743139584171612,{"inputs":[{"Node":{"node_id":6569279146800941123,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.31019165912642926,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.1660875,"green":0.4637225,"blue":0.32023078,"alpha":1.0,"linear":true},{"red":0.15480843,"green":0.4249792,"blue":0.28720212,"alpha":0.85546875,"linear":true},{"red":0.14353022,"green":0.40372068,"blue":0.25983277,"alpha":0.3515625,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.31019165912642926,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.1660875,"green":0.4637225,"blue":0.32023078,"alpha":1.0,"linear":true},{"red":0.15480843,"green":0.4249792,"blue":0.28720212,"alpha":0.85546875,"linear":true},{"red":0.14353022,"green":0.40372068,"blue":0.25983277,"alpha":0.3515625,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[32.669270073466016,3.552713678800501e-15,-3.552713678800501e-15,32.669270073466016,712.5925925925926,591.7037037037037]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2032185045476767535,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":7340659059180155803,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2036609094647228373,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[0.8725092774628217,0.1666676721950458]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]],[5,[0.12749341167028605,0.1666646696927025]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.07925873631249913,0.08849560350574948]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.12799231715991943]],[5,null]],"handle_end":[[1,[0.0,-0.12799086965193351]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.07926033448372466,0.0884959630818129]],[5,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2058192342619930156,{"inputs":[{"Node":{"node_id":2155997486525176376,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,-5.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2062662104423219162,{"inputs":[{"Node":{"node_id":10810157408196882043,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970144,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2077983679740571162,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-137.83320996790803,20.957167389569804]],[2,[-130.2776544123526,8.793446239014884]],[3,[-119.7591358938339,55.2367451774976]],[4,[-124.49987663457466,76.24680898300153]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-5.037037037036939,-9.952135486817731]],[3,[0.0,0.0]],[4,[6.814814814814781,36.49116345166567]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2088390810384907709,{"inputs":[{"Node":{"node_id":14341957170885045113,"output_index":0}},{"Node":{"node_id":9323583246068171750,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2155997486525176376,{"inputs":[{"Node":{"node_id":15595689026000825531,"output_index":0}},{"Node":{"node_id":7639490284239357347,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2183401450260403525,{"inputs":[{"Node":{"node_id":16852951849051795674,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2189393878093040029,{"inputs":[{"Node":{"node_id":15478704582542175684,"output_index":0}},{"Node":{"node_id":17533670083736420411,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2209276411833629008,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[0.8725092774641316,0.16666767219504575]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]],[5,[0.1274934116812796,0.166664669692703]],[6,[0.5000000000000018,0.10816199860278752]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.07925873631249913,0.08849560350574948]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.12799231715991943]],[5,[0.14548887396141374,-0.05850358027814341]],[6,[0.22701785858837376,9.09188805575667e-7]]],"handle_end":[[1,[0.0,-0.12799086965193351]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.07926033448372466,0.08849596308181285]],[5,null],[6,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2225749123534781340,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1138.2754963085072,550.0000000000001]],[2,[1156.9357503463518,545.0000000000001]],[3,[1128.9453692895852,537.5000000000001]],[4,[1110.285115251741,542.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2292399603649738346,{"inputs":[{"Node":{"node_id":16510804133693080967,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.9127081032507663,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.9127081032507663,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[494.4559370523197,1.1368683772161605e-13,-1.1368683772161605e-13,494.4559370523197,945.1209843966468,40.18518518518522]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2310170068575553369,{"inputs":[{"Node":{"node_id":3564067978712674849,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.8883458,"green":0.7603504,"blue":0.28575674,"alpha":1.0,"linear":true},{"red":0.3924137,"green":0.7094022,"blue":0.34775993,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.8883458,"green":0.7603504,"blue":0.28575674,"alpha":1.0,"linear":true},{"red":0.3924137,"green":0.7094022,"blue":0.34775993,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[138.56524263919184,-4.618527782440651e-14,4.618527782440651e-14,138.56524263919184,1375.11535329943,427.9998261846075]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2452294403891427489,{"inputs":[{"Node":{"node_id":9278774434958175105,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.09305898,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.09305898,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[108.0,-62.000000000000114,62.000000000000114,108.0,1085.3205080756943,486.0000000000014]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2465823993152870948,{"inputs":[{"Node":{"node_id":15898396405528650339,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11789234,"green":0.54096377,"blue":0.48551413,"alpha":1.0,"linear":true},{"red":0.50888145,"green":0.7304609,"blue":0.5028866,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11789234,"green":0.54096377,"blue":0.48551413,"alpha":1.0,"linear":true},{"red":0.50888145,"green":0.7304609,"blue":0.5028866,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-0.4843761592267466,-2.2138141473659156e-16,-4.930380657631324e-32,-1.8077164362061455,0.48402602783373766,0.5459259284371658]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2510483139353274965,{"inputs":[{"Node":{"node_id":14202574750104046500,"output_index":0}},{"Node":{"node_id":18128923159828618806,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2640491057355360805,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[783.7306695894642,510.0]],[2,[653.1088913245535,475.0]],[3,[559.8076211353318,500.00000000000017]],[4,[410.5255888325763,460.0]],[5,[410.5255888325765,450.0000000000001]],[6,[559.7618537735666,489.9877366723752]],[7,[671.7691453623979,459.99999999999994]],[8,[709.0896534380868,470.00000000000006]],[9,[821.0511776651531,440.00000000000006]],[10,[933.0127018922194,470.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,null],[2,null],[3,[-149.2820323027555,-40.00000000000017]],[4,[0.0,0.0]],[5,null],[6,null],[7,[37.32050807568885,10.000000000000114]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"handle_end":[[1,null],[2,null],[3,null],[4,null],[5,null],[6,null],[7,null],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2785423879796980286,{"inputs":[{"Node":{"node_id":11634802583144606404,"output_index":0}},{"Node":{"node_id":16591255610014418910,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2791109467690716388,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1156.9357503463468,509.9999999999987]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[4,[615.5514854925251,605.0634765625002]],[5,[596.8912314546803,600.0634765625]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,null],[4,null],[5,[448.0829946646052,-120.0634765625]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2843751023378786714,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[1,[510.41975308641986,500.1481481481481]],[2,[476.9512618480758,444.1904085078117]],[3,[480.5925925925926,440.2962962962962]],[4,[511.55555555555554,490.2222222222222]],[5,[497.38271604938257,447.60493827160496]],[6,[499.77650172698026,445.9388618767647]],[7,[515.1604938271604,486.716049382716]],[8,[502.0960349862431,417.9179038759178]],[9,[505.311372421164,416.4524664944526]],[10,[524.0493827160495,487.1111111111112]],[11,[531.5890484844431,432.90541944395505]],[12,[533.8924329970387,433.46495092641567]],[13,[526.0246913580248,490.07407407407413]],[14,[552.9705625612692,418.19081042008474]],[15,[556.7578325004595,420.13017723423656]],[16,[530.3703703703702,486.71604938271594]],[17,[565.2914244954804,444.3855996237166]],[18,[568.2339832275112,446.0155371619765]],[19,[530.7654320987656,499.55555555555566]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,1]],"handle_primary":[[1,[-9.283950617284065,-12.246913580246884]],[2,[-17.16805625160663,-20.28383937076643]],[3,[21.32824309569804,17.329197515254634]],[4,[0.0,0.0]],[5,[-10.016557406305251,-15.024836109457851]],[6,[3.9272019767233246,4.629039357803151]],[7,[0.0,0.0]],[8,[-8.936088730151937,-20.93774746663439]],[9,[11.197015798182122,18.39034937970939]],[10,[0.0,0.0]],[11,[7.784237194372736,-22.222909722529664]],[12,[-5.082537215847424,18.7049831985629]],[13,[0.0,0.0]],[14,[15.260998855532309,-21.888591759537466]],[15,[-11.459519915000214,23.15277176924241]],[16,[0.0,0.0]],[17,[27.324497401397252,-21.15032331824051]],[18,[-19.30865594294653,18.299752742610902]],[19,[-1.5204271954055455,4.429070525747022]]],"handle_end":[[1,[28.522359190346833,33.698803394714844]],[2,[-22.123456790123555,-17.97530864197529]],[3,[-3.111111111111086,-12.0]],[4,[13.03703703703701,19.555555555555543]],[5,[-12.032856371187677,-14.183269935989983]],[6,[0.7901234567898427,-16.197530864197745]],[7,[18.59187624528363,43.5617887769169]],[8,[-11.197015798182008,-18.39034937970939]],[9,[0.7901234567898427,-21.135802469135857]],[10,[-7.784237194372736,22.22290972252955]],[11,[5.082537215847424,-18.704983198562843]],[12,[3.7530864197531177,-16.59259259259261]],[13,[-15.260998855532534,21.888591759537743]],[14,[11.286699158099054,-22.803605349427187]],[15,[4.54320987654296,-11.851851851852018]],[16,[-28.402535606591755,21.984770746653737]],[17,[19.435079545528083,-18.419570542198244]],[18,[4.54320987654296,-13.23456790123464]],[19,[2.7053847913285836,3.5688054694122116]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2881239077602364410,{"inputs":[{"Node":{"node_id":9641315149170593327,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.2777869967086046,0.36183495566130336,0.6507416725274494,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5],"color":[{"red":0.18782076,"green":0.49693304,"blue":0.33245158,"alpha":0.296875,"linear":true},{"red":0.18447497,"green":0.47932023,"blue":0.31854683,"alpha":0.70703125,"linear":true},{"red":0.18447497,"green":0.47932023,"blue":0.32314324,"alpha":0.80078125,"linear":true},{"red":0.19120166,"green":0.4910209,"blue":0.30946898,"alpha":0.23137255,"linear":true},{"red":0.18782076,"green":0.47353154,"blue":0.32314324,"alpha":0.18359375,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.2777869967086046,0.36183495566130336,0.6507416725274494,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5],"color":[{"red":0.18782076,"green":0.49693304,"blue":0.33245158,"alpha":0.296875,"linear":true},{"red":0.18447497,"green":0.47932023,"blue":0.31854683,"alpha":0.70703125,"linear":true},{"red":0.18447497,"green":0.47932023,"blue":0.32314324,"alpha":0.80078125,"linear":true},{"red":0.19120166,"green":0.4910209,"blue":0.30946898,"alpha":0.23137255,"linear":true},{"red":0.18782076,"green":0.47353154,"blue":0.32314324,"alpha":0.18359375,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-59.463528999500795,-48.57689559603688,48.57689559603688,-59.463528999500795,1348.4376415534275,438.2165483327192]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2900504420179573771,{"inputs":[{"Node":{"node_id":3185536512640676801,"output_index":0}},{"Node":{"node_id":10852750245702849075,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2921219300441868542,{"inputs":[{"Node":{"node_id":11506204916439878896,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.43965724,"blue":0.3515327,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.43965724,"blue":0.3515327,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[522.4871130596431,0.0,0.0,522.4871130596431,410.5255888325763,475.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3014633976566537110,{"inputs":[{"Node":{"node_id":5346759588580719138,"output_index":0}},{"Node":{"node_id":11860177410232537211,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3021739385836969518,{"inputs":[{"Node":{"node_id":6556170892691431702,"output_index":0}},{"Node":{"node_id":13868917743026516656,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3122972215852775755,{"inputs":[{"Node":{"node_id":10431241258085047322,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3185536512640676801,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":4101813853952238986,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3227544593834141716,{"inputs":[{"Node":{"node_id":8256712316698018135,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053871,-113.9999999999974]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3365825508845848745,{"inputs":[{"Node":{"node_id":7156963182187517674,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.1714411,"green":0.4125427,"blue":0.3515327,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.1714411,"green":0.4125427,"blue":0.3515327,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[440.30769230769306,-121.41176470588216,121.41176470588216,440.30769230769306,600.99801739379,581.1764705882348]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3455270778005546310,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[559.8076211353316,449.99999999999994]],[2,[559.7618537735666,489.9877366723752]],[3,[410.5255888325765,450.0000000000001]],[4,[410.5255888325765,410.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3564067978712674849,{"inputs":[{"Node":{"node_id":6777328619777499144,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970075,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3616319631707471648,{"inputs":[{"Node":{"node_id":12852312236973354891,"output_index":0}},{"Node":{"node_id":16727310898641763441,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3670594928372882885,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[671.7691453623979,459.99999999999994]],[2,[671.7691453623979,420.00000000000006]],[3,[559.8076211353316,450.00000000000006]],[4,[559.8076211353317,490.00000000000006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3679103217373457623,{"inputs":[{"Node":{"node_id":7910743362843097140,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3680957604830907751,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"delta":[[1,[1304.1133973479657,421.12604785855825]],[2,[1304.6986739826243,420.69684499314127]],[3,[1278.0100594421583,366.7343392775492]],[4,[1311.6049382716046,423.2427983539094]],[5,[1301.1577503429353,350.639231824417]],[6,[1317.750342935528,414.37585733882025]],[7,[1336.2743484224964,374.25514403292175]],[8,[1319.9451303155006,428.8614540466391]],[9,[1321.5253772290812,429.56378600823047]],[10,[1354.710562414266,375.5720164609054]],[11,[1325.124828532236,431.14403292181055]],[12,[1360.3292181069958,385.0534979423868]],[13,[1322.315500685871,442.4691358024692]],[14,[1313.0096021947877,442.29355281207137]],[15,[1264.5486968449932,395.9981710105167]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[22.884316415180592,29.146776406035656]],[4,[0.0,0.0]],[5,[15.978052126200282,30.375857338820197]],[6,[0.0,0.0]],[7,[-16.182898948331285,35.4677640603565]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-22.650205761316556,26.60082304526742]],[11,[6.190926179952385,-9.64405832444237]],[12,[-18.78737997256485,20.455418381344316]],[13,[-1.0925163846973192,0.8063811410860922]],[14,[-1.4013919408635047,-1.0754868383370422]],[15,[30.375857338820197,15.10013717421117]]],"handle_end":[[1,[0.0,0.0]],[2,[26.044810242340873,43.48605395518973]],[3,[0.0,0.0]],[4,[16.153635116598025,62.683127572016474]],[5,[0.0,0.0]],[6,[-20.484682213077576,38.013717421124625]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[-20.894375857338673,18.52400548696835]],[10,null],[11,[-18.34842249657072,19.13854595336079]],[12,[1.2603823499284772,-0.9302822106615168]],[13,[0.8337588052027058,0.639861408644208]],[14,[36.34567901234527,22.650205761316897]],[15,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":15}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3806549994589872867,{"inputs":[{"Node":{"node_id":11429712783984224234,"output_index":0}},{"Node":{"node_id":11479492521093639512,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3927358878935116440,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1194.2562584220414,520.0000000000001]],[2,[1082.2947341949798,490.0000000000013]],[3,[1082.2947341949805,450.0000000000013]],[4,[1194.2562584220411,420.00000000000006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[6.821210263296962e-13,-40.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,null],[2,null],[3,[0.0,0.0]],[4,[0.0,-1.1368683772161605e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3966971396176820223,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1156.9357503463468,509.9999999999987]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[4,[615.7883832488646,605.0000000000001]],[5,[597.1281292110198,599.9999999999999]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,null],[4,null],[5,[447.84609690826574,-119.99999999999989]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3970872207068447290,{"inputs":[{"Node":{"node_id":2077983679740571162,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1.2314781197853364,-154.7967075368743]},"exposed":false}},{"Value":{"tagged_value":{"F64":-59.89430248166697},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.809730022247584,0.552568608414892]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-21.93845255979099,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4046495708656778502,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[106.87778599676416,75.02595252015249]],[2,[111.05567892098054,93.44803081206965]],[3,[130.0186418839436,64.45168544306966]],[4,[122.38078180163905,40.36997488237489]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4069478660487729695,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-22.15328312748764,98.9633432080564]],[2,[-23.148253406408465,116.21917209054972]],[3,[59.855160808698834,104.19217420861494]],[4,[55.822325899541134,88.0419325229343]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-27.645547736903644,17.139482007743737]],[3,[0.0,0.0]],[4,[24.844120782255654,5.22590107758802]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4101813853952238986,{"inputs":[{"Node":{"node_id":14161755104759532162,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4105329493214975815,{"inputs":[{"Node":{"node_id":12931264630175648107,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969916,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4134257789770357215,{"inputs":[{"Node":{"node_id":9640215309187299519,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053945,-71.86019325256757]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999948,0.9999999999999948]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4187349759243468746,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[1,[583.5500685871057,499.53360768175577]],[2,[533.9259259259258,420.7407407407407]],[3,[589.8710562414265,497.0754458161865]],[4,[591.18792866941,498.3045267489712]],[5,[574.0246913580246,440.2962962962963]],[6,[594.4362139917694,493.6515775034293]],[7,[596.3676268861453,491.9835390946502]],[8,[580.9382716049382,401.9753086419752]],[9,[606.0246913580247,486.803840877915]],[10,[607.8683127572016,488.3840877914952]],[11,[615.6378600823045,431.5390946502058]],[12,[609.0096021947874,496.4609053497942]],[13,[609.7997256515774,497.6899862825788]],[14,[650.6666666666667,398.2222222222223]],[15,[615.4183813443072,491.19341563786]],[16,[616.0751917898693,491.077444156548]],[17,[668.3566529492455,433.2510288065844]],[18,[618.4910836762688,499.9725651577503]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,1]],"handle_primary":[[1,[0.0,0.0]],[2,[44.005486968450214,35.16049382716062]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[18.392318244170156,23.769547325102906]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[22.10150891632361,44.44444444444463]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[-3.906721536351256,29.62962962962956]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[-18.3045267489714,37.31138545953348]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[-38.27709190672158,34.5020576131688]],[18,[-6.945585968035971,18.68277302655963]]],"handle_end":[[1,[48.21947873799752,48.855967078189394]],[2,null],[3,[0.0,0.0]],[4,[21.113854595336193,37.201646090535064]],[5,null],[6,[0.0,0.0]],[7,[25.964334705075316,61.47599451303165]],[8,null],[9,[0.0,0.0]],[10,[-6.189300411522709,26.732510288065782]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[-23.747599451303245,35.4677640603565]],[14,null],[15,[0.0,0.0]],[16,[-35.29218106995893,26.337448559670804]],[17,null],[18,[7.8075669002856785,13.340866152962064]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4191887059541031673,{"inputs":[{"Node":{"node_id":4046495708656778502,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[23.140855887179427,0.0,0.0,23.140855887179427,106.87778599676416,66.90900284722227]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4197544064668946479,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[391.8653347947321,595.0]],[2,[363.87495373796554,587.4999999999999]],[3,[345.21469970012123,592.5]],[4,[419.8557158514987,612.5]],[5,[615.7883832488644,560.0000000000001]],[6,[634.4486372867087,565.0]],[7,[578.4678751731759,580.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4243146970185091100,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[1,[583.5500685871057,499.53360768175577]],[2,[533.9259259259258,420.7407407407407]],[3,[589.8710562414265,497.0754458161865]],[4,[591.18792866941,498.3045267489712]],[5,[574.0246913580246,440.2962962962963]],[6,[594.4362139917694,493.6515775034293]],[7,[596.3676268861453,491.9835390946502]],[8,[580.9382716049382,401.9753086419752]],[9,[606.0246913580247,486.803840877915]],[10,[607.8683127572016,488.3840877914952]],[11,[615.6378600823045,431.5390946502058]],[12,[609.0096021947874,496.4609053497942]],[13,[609.7997256515774,497.6899862825788]],[14,[650.6666666666667,398.2222222222223]],[15,[615.4183813443072,491.19341563786]],[16,[616.0751917898693,491.077444156548]],[17,[668.3566529492455,433.2510288065844]],[18,[618.4910836762688,499.9725651577503]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,1]],"handle_primary":[[1,[0.0,0.0]],[2,[44.005486968450214,35.16049382716062]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[18.392318244170156,23.769547325102906]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[22.10150891632361,44.44444444444463]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[-3.906721536351256,29.62962962962956]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[-18.3045267489714,37.31138545953348]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[-38.27709190672158,34.5020576131688]],[18,[-7.386678859929702,8.10852004267656]]],"handle_end":[[1,[48.21947873799752,48.855967078189394]],[2,null],[3,[0.0,0.0]],[4,[21.113854595336193,37.201646090535064]],[5,null],[6,[0.0,0.0]],[7,[25.964334705075316,61.47599451303165]],[8,null],[9,[0.0,0.0]],[10,[-6.189300411522709,26.732510288065782]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[-23.747599451303245,35.4677640603565]],[14,null],[15,[0.0,0.0]],[16,[-35.29218106995893,26.337448559670804]],[17,null],[18,[3.2434080170708057,6.03566529492457]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4323461535289334196,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[634.4486372867091,639.9999999999999]],[2,[597.1281292110198,630.0]],[3,[597.1281292110203,649.9999999999999]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,1.1368683772161605e-13]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4398598693761352299,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[709.0896534380867,469.99999999999994]],[2,[821.0511776651531,500.0]],[3,[933.0127018922194,470.0]],[4,[821.0511776651532,440.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4740496570730418920,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[279.9038105676662,605.0000000000001]],[2,[242.58330249197704,615.0]],[3,[261.24355652982155,620.0]],[4,[298.56406460551034,610.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4741515246389989284,{"inputs":[{"Node":{"node_id":14255588039347536657,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4757672276235057645,{"inputs":[{"Node":{"node_id":4924169570021915606,"output_index":0}},{"Node":{"node_id":14400993470150734626,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4837219841531371489,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[933.0127018922194,430.0]],[2,[1343.5382907247958,320.00000000000006]],[3,[1007.6537180435968,230.0]],[4,[597.1281292110205,340.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4847316728405535983,{"inputs":[{"Node":{"node_id":11579925754926059876,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.2831488,"green":0.50888145,"blue":0.38642952,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.2831488,"green":0.50888145,"blue":0.38642952,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.0,0.0,0.0,1.0,0.0,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4884180935153120645,{"inputs":[{"Node":{"node_id":11221222899304956410,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[154.311005935412,0.0,0.0,154.311005935412,719.3881165522664,602.8576781717152]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4887570735033124574,{"inputs":[{"Node":{"node_id":9210109719406330381,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.13013649,"green":0.28818235,"blue":0.3515327,"alpha":0.6313726,"linear":true},{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.13013649,"green":0.28818235,"blue":0.3515327,"alpha":0.6313726,"linear":true},{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-12.375,56.25,-56.25,-12.375,895.5,611.25]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4898866541060902381,{"inputs":[{"Node":{"node_id":7799679303995308634,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.1295309,"green":0.48093295,"blue":0.27457628,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.1295309,"green":0.48093295,"blue":0.27457628,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[37.320508075689304,0.0,0.0,37.320508075689304,597.1281292110198,640.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4924169570021915606,{"inputs":[{"Node":{"node_id":972153153989181918,"output_index":0}},{"Node":{"node_id":8015732980153557800,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4968550668755026811,{"inputs":[{"Node":{"node_id":585709295659496998,"output_index":0}},{"Node":{"node_id":13609749019463823009,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5017082804473894058,{"inputs":[{"Node":{"node_id":8165914767449151618,"output_index":0}},{"Node":{"node_id":8166796652234334001,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5258402282444994019,{"inputs":[{"Node":{"node_id":958845362613832240,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-299.97967195575075,-74.37931084632919]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999984,0.9999999999999984]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5261200785298607501,{"inputs":[{"Node":{"node_id":2465823993152870948,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Lighten"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5317925967883407701,{"inputs":[{"Node":{"node_id":13853529851208960143,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,2.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5326013268137833446,{"inputs":[{"Node":{"node_id":12875121980058869686,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5005297191519419,0.8104119804726813,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.1980693,"green":0.44520125,"blue":0.43965724,"alpha":1.0,"linear":true},{"red":0.1980693,"green":0.44520125,"blue":0.43965724,"alpha":1.0,"linear":true},{"red":0.2831488,"green":0.43965724,"blue":0.25015837,"alpha":0.87890625,"linear":true},{"red":0.10224175,"green":0.27889434,"blue":0.2874409,"alpha":0.296875,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5005297191519419,0.8104119804726813,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.1980693,"green":0.44520125,"blue":0.43965724,"alpha":1.0,"linear":true},{"red":0.1980693,"green":0.44520125,"blue":0.43965724,"alpha":1.0,"linear":true},{"red":0.2831488,"green":0.43965724,"blue":0.25015837,"alpha":0.87890625,"linear":true},{"red":0.10224175,"green":0.27889434,"blue":0.2874409,"alpha":0.296875,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[560.0234567692879,0.0,0.0,560.0234567692879,709.9173857646327,654.4156387100882]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5346759588580719138,{"inputs":[{"Node":{"node_id":57904581517036791,"output_index":0}},{"Node":{"node_id":16244305414728361140,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5365849201631468915,{"inputs":[{"Node":{"node_id":10849502918952703647,"output_index":0}},{"Node":{"node_id":2310170068575553369,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5434119356821575534,{"inputs":[{"Node":{"node_id":1490537476612110327,"output_index":0}},{"Node":{"node_id":16261620049358949344,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5448146793323825465,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[709.0896534380863,630.0]],[2,[597.1281292110198,599.9999999999999]],[3,[783.730669589464,550.0]],[4,[895.6921938165308,580.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5540780316862276409,{"inputs":[{"Node":{"node_id":1032659476619711014,"output_index":0}},{"Node":{"node_id":13743495762122910279,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5574499968250848265,{"inputs":[{"Node":{"node_id":11776939455674933130,"output_index":0}},{"Node":{"node_id":5925268772265373737,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5670058004691708784,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-109.83320996790816,-37.64985269946783]],[2,[-117.83320996790816,-58.65991650497199]],[3,[-130.2776544123526,8.793446239014884]],[4,[-115.759135893834,30.3564064604534]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-0.7407407407406481,44.23171327474574]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.7407407407406481,-44.23171327474574]],[3,[0.0,0.0]],[4,[-12.740740740740762,23.22164946924204]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5882319123081134737,{"inputs":[{"Node":{"node_id":14102693648424950146,"output_index":0}},{"Node":{"node_id":13207576193421440093,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5891705401441266824,{"inputs":[{"Node":{"node_id":5670058004691708784,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[20.470566116530943,0.0,0.0,20.470566116530943,-130.3037760844391,-11.247763718905423]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5925268772265373737,{"inputs":[{"Node":{"node_id":4105329493214975815,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.5840785,"blue":0.5332765,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.5840785,"blue":0.5332765,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1269.9999999999995,0.0,0.0,1269.9999999999995,261.2435565296994,582.5000000000011]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[6006052038693767172,{"inputs":[{"Node":{"node_id":4197544064668946479,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[6142412830271644616,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1278.2274015923404,401.49999999999994]],[2,[1175.5960043841962,429.0]],[3,[1203.586385440963,436.5]],[4,[1250.2370205355735,424.00000000000006]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6556170892691431702,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":3365825508845848745,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6569279146800941123,{"inputs":[{"Node":{"node_id":15775513677915164685,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,26.66666666666663]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6589978257209505606,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[709.0896534380868,410.0000000000001]],[2,[709.0896534380868,470.0]],[3,[821.0511776651532,440.0000000000001]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6777328619777499144,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1343.5382907246749,419.99978273075953]],[2,[1380.8587988003642,430.0]],[3,[1268.8972745734193,460.0000000000024]],[4,[1231.5767664977295,450.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[-6.821210263296962e-13,-5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6785205785632793666,{"inputs":[{"Node":{"node_id":10917301734480569398,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21223073,"green":0.49693304,"blue":0.40197787,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21223073,"green":0.49693304,"blue":0.40197787,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[149.2820323027551,0.0,0.0,149.2820323027551,410.5255888325765,449.9938683361876]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[6821938959315178556,{"inputs":[{"Node":{"node_id":12683405703338263457,"output_index":0}},{"Node":{"node_id":5326013268137833446,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6868877732348460627,{"inputs":[{"Node":{"node_id":7884283658260267478,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7005645574203740491,{"inputs":[{"Node":{"node_id":17873337220577786871,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7030585744407664630,{"inputs":[{"Node":{"node_id":13701442050580061197,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053887,-113.99999999999903]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7067047867039575315,{"inputs":[{"Node":{"node_id":15261165353096835967,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7156963182187517674,{"inputs":[{"Node":{"node_id":14752203606937854133,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565296996,-63.99999999999977]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7171713123860587892,{"inputs":[{"Node":{"node_id":18431382379595272672,"output_index":0}},{"Node":{"node_id":9798215931018813676,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7259756719760382667,{"inputs":[{"Node":{"node_id":15157035456876170143,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-15.413359361670246,62.184932597083105,-62.184932597083105,-15.413359361670246,816.6422985933182,433.1685475779722]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7339104629465306715,{"inputs":[{"Node":{"node_id":16229837691656808412,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[55.16179602165258,0.0,0.0,55.16179602165258,74.85684586229115,58.83057188107068]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7340659059180155803,{"inputs":[{"Node":{"node_id":7171713123860587892,"output_index":0}},{"Node":{"node_id":13531127678140037818,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7637119583909417127,{"inputs":[{"Node":{"node_id":4740496570730418920,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7639490284239357347,{"inputs":[{"Node":{"node_id":14805036488257720752,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7671691070850213967,{"inputs":[{"Node":{"node_id":1658032775659237960,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.6048571201787465,0.8131497297124398,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.040000137,"green":0.16686814,"blue":0.16383977,"alpha":1.0,"linear":true},{"red":0.083675444,"green":0.25930732,"blue":0.25532693,"alpha":0.859375,"linear":true},{"red":0.14702728,"green":0.37626222,"blue":0.37123775,"alpha":0.71875,"linear":true},{"red":0.15592647,"green":0.34191445,"blue":0.29613832,"alpha":0.3984375,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.6048571201787465,0.8131497297124398,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.040000137,"green":0.16686814,"blue":0.16383977,"alpha":1.0,"linear":true},{"red":0.083675444,"green":0.25930732,"blue":0.25532693,"alpha":0.859375,"linear":true},{"red":0.14702728,"green":0.37626222,"blue":0.37123775,"alpha":0.71875,"linear":true},{"red":0.15592647,"green":0.34191445,"blue":0.29613832,"alpha":0.3984375,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[365.43045304903814,0.0,0.0,365.43045304903814,956.8125000000005,307.96874999999966]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7799679303995308634,{"inputs":[{"Node":{"node_id":4323461535289334196,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7838724497953148309,{"inputs":[{"Node":{"node_id":9771562518763748677,"output_index":0}},{"Node":{"node_id":2058192342619930156,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7861616450605235840,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1343.3813269975649,420.0420583039525]],[2,[1343.5382907247954,439.792314581573]],[3,[1268.8972745734186,460.00000000000233]],[4,[1231.5767664977302,450.00000000000233]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7884283658260267478,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1184.9261314031187,552.5]],[2,[1231.5767664977295,540.0000000000001]],[3,[1250.2370205355735,545.0000000000001]],[4,[1203.5863854409629,557.4999999999999]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7910743362843097140,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[-9.33012701892199,592.5]],[2,[121.29165124598823,557.5000000000001]],[3,[83.97114317030001,547.5]],[4,[55.98076211353338,555.0000000000001]],[5,[177.2724133595217,587.5]],[6,[130.62177826491063,599.9999999999999]],[7,[93.30127018922188,590.0]],[8,[261.24355652982126,545.0]],[9,[326.55444566227675,562.5]],[10,[261.2435565298214,580.0]],[11,[18.66025403784454,515.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7948029953091985757,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7952384394377946257,{"inputs":[{"Node":{"node_id":9935922395919478146,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.15303737473719153,0.45863166412588735,0.6476150394844262,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5],"color":[{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true},{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true},{"red":0.5906189,"green":0.6938719,"blue":0.30054384,"alpha":1.0,"linear":true},{"red":0.9473066,"green":0.8468733,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.9473066,"green":0.8468733,"blue":0.2581829,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.15303737473719153,0.45863166412588735,0.6476150394844262,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5],"color":[{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true},{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true},{"red":0.5906189,"green":0.6938719,"blue":0.30054384,"alpha":1.0,"linear":true},{"red":0.9473066,"green":0.8468733,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.9473066,"green":0.8468733,"blue":0.2581829,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[97.98415819142356,0.0,0.0,97.98415819142356,1318.0576131687244,439.8353909465018]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8015732980153557800,{"inputs":[{"Node":{"node_id":3806549994589872867,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297002,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8028812053913481975,{"inputs":[{"Node":{"node_id":15517065353723874205,"output_index":0}},{"Node":{"node_id":6785205785632793666,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8034980397175569257,{"inputs":[{"Node":{"node_id":4243146970185091100,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[55.4066256813212,48.820258260598735]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.093432966432927,1.093432966432927]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8073807569018624098,{"inputs":[{"Node":{"node_id":8028812053913481975,"output_index":0}},{"Node":{"node_id":12998832508553378533,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8165914767449151618,{"inputs":[{"Node":{"node_id":11158238411769751544,"output_index":0}},{"Node":{"node_id":13942146309185231085,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8166796652234334001,{"inputs":[{"Node":{"node_id":8034980397175569257,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.19544083,"green":0.49261037,"blue":0.2822318,"alpha":1.0,"linear":true},{"red":0.111932434,"green":0.2874409,"blue":0.17464739,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.19544083,"green":0.49261037,"blue":0.2822318,"alpha":1.0,"linear":true},{"red":0.111932434,"green":0.2874409,"blue":0.17464739,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[3.6582032212263584,60.97005368710563,-60.97005368710563,3.6582032212263584,598.862131143792,418.31733448991577]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8181290118694677328,{"inputs":[{"Node":{"node_id":5540780316862276409,"output_index":0}},{"Node":{"node_id":17638504852426495381,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8242413775403456296,{"inputs":[{"Node":{"node_id":9138781233934614517,"output_index":0}},{"Node":{"node_id":9115451226763736660,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8256712316698018135,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1268.897274573418,500.00000000000006]],[2,[1268.8972745734184,559.9999999999999]],[3,[1343.538290724796,579.9999999999998]],[4,[1343.5382907247958,520.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8343201730608263656,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[933.0127018922194,430.0]],[2,[933.0127018922194,470.0]],[3,[709.0896534380868,410.0000000000001]],[4,[709.0896534380868,470.0]],[5,[597.1281292110203,439.99999999999994]],[6,[597.1281292110205,340.0000000000001]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8463468388280418154,{"inputs":[{"Node":{"node_id":9993538712344947860,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":74.5472},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8508454285877707748,{"inputs":[{"Node":{"node_id":9908869573449854874,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.22696589,"green":0.4910209,"blue":0.42326772,"alpha":1.0,"linear":true},{"red":0.20507872,"green":0.5840785,"blue":0.5332765,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.22696589,"green":0.4910209,"blue":0.42326772,"alpha":1.0,"linear":true},{"red":0.20507872,"green":0.5840785,"blue":0.5332765,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[10.207271312565354,38.09405514513378,-38.09405514513378,10.207271312565354,1306.8465798679335,529.8451605094965]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8612613134760093452,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[933.0127018922192,650.0]],[2,[839.7114317029974,625.0000000000001]],[3,[802.3909236273086,635.0000000000001]],[4,[933.0127018922192,670.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8863202447825570192,{"inputs":[{"Node":{"node_id":5017082804473894058,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-299.38891648776223,-111.69072674057747]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0616145921394244,1.0616145921394244]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8884703330021429739,{"inputs":[{"Node":{"node_id":16732345645494316637,"output_index":0}},{"Node":{"node_id":532055960192543062,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8891726805381758817,{"inputs":[{"Node":{"node_id":17332567356044944766,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-74.42590421819692,41.71533421869417]},"exposed":false}},{"Value":{"tagged_value":{"F64":38.68758978528783},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[38.26905454222045,23.541084128981048]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[23.61080512850412,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8958782938691501404,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1156.9357503463525,530.0]],[2,[1231.576766497729,510.00000000000233]],[3,[1231.6308657449686,540.0144958496094]],[4,[1156.9357503463516,540.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-74.69511539861696,-0.014495849609375]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,[0.0,-2.273736754432321e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9115451226763736660,{"inputs":[{"Node":{"node_id":7067047867039575315,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.19120166,"green":0.42326772,"blue":0.32777813,"alpha":1.0,"linear":true},{"red":0.27049786,"green":0.5271152,"blue":0.3662527,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.19120166,"green":0.42326772,"blue":0.32777813,"alpha":1.0,"linear":true},{"red":0.27049786,"green":0.5271152,"blue":0.3662527,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[328.172534011826,-87.58299785155009,87.58299785155009,328.172534011826,608.9061780767327,603.2468117028296]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9138781233934614517,{"inputs":[{"Node":{"node_id":8073807569018624098,"output_index":0}},{"Node":{"node_id":4884180935153120645,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9150078008481575131,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9157963288496356916,{"inputs":[{"Node":{"node_id":10188337730058049439,"output_index":0}},{"Node":{"node_id":1108089904278882840,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9210109719406330381,{"inputs":[{"Node":{"node_id":8612613134760093452,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9226731772122225003,{"inputs":[{"Node":{"node_id":8884703330021429739,"output_index":0}},{"Node":{"node_id":9695624216919732577,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9278774434958175105,{"inputs":[{"Node":{"node_id":3927358878935116440,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053914,-74.00000000000011]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999972,0.9999999999999972]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9323583246068171750,{"inputs":[{"Node":{"node_id":3680957604830907751,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.26225072,"green":0.5028866,"blue":0.38642952,"alpha":1.0,"linear":true},{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.26225072,"green":0.5028866,"blue":0.38642952,"alpha":1.0,"linear":true},{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[3.5555555555554292,41.333333333333314,-41.333333333333314,3.5555555555554292,1310.6666666666667,380.00000000000006]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9392462024456293097,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1156.9357503463468,509.9999999999987]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[4,[615.7883832488646,605.0000000000001]],[5,[597.1281292110198,599.9999999999999]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,null],[4,null],[5,[447.84609690826574,-119.99999999999989]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9393309733761233513,{"inputs":[{"Node":{"node_id":13946577152348504742,"output_index":0}},{"Node":{"node_id":11895211316848895241,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9409313765472227540,{"inputs":[{"Node":{"node_id":6821938959315178556,"output_index":0}},{"Node":{"node_id":8463468388280418154,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9640215309187299519,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[1268.8972745734306,457.8601932525698]],[2,[1194.2562584220475,517.8601932525687]],[3,[746.4101615137856,637.8601932525706]],[4,[746.4101615137852,657.8601932525711]],[5,[1268.8972745734306,517.8601932525701]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-447.8460969082618,120.00000000000192]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,-60.00000000000029]]],"handle_end":[[1,null],[2,null],[3,[0.0,0.0]],[4,null],[5,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9641315149170593327,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[1,[1313.111111111111,440.66666666666663]],[2,[1297.047751590237,432.45710241679353]],[3,[1311.0123456790122,389.1358024691358]],[4,[1309.432098765432,385.3827160493827]],[5,[1280.0,432.79012345679007]],[6,[1286.7160493827164,380.04205830395256]],[7,[1284.082304526749,376.2304526748971]],[8,[1270.5185185185182,430.0]],[9,[1269.113854595336,397.6954732510288]],[10,[1267.5056400134067,396.48371220183463]],[11,[1259.4489801206926,442.53166286845914]],[12,[1302.7379972565157,443.9615912208504]],[13,[1312.9218106995884,446.85871056241416]],[14,[1325.5637860082304,455.6378600823044]],[15,[1319.4403292181073,447.7366255144034]],[16,[1323.5884773662551,445.96633567616453]],[17,[1343.538290724795,449.4814814814814]],[18,[1327.484998303753,444.1384489176408]],[19,[1353.7580246913572,440.1251028806582]],[20,[1326.2661179698216,436.1481481481482]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,1]],"handle_primary":[[1,[-1.6922078070856514,-5.274941522376082]],[2,[-7.975963753017595,-5.0295761250696955]],[3,null],[4,[-16.197530864197688,14.61728395061732]],[5,[0.0,-30.09785939152056]],[6,null],[7,[-10.798353909464822,37.53086419753089]],[8,[-2.1728395061727497,-5.1111111111111995]],[9,[0.0,0.0]],[10,[-0.14088374697121253,12.961503560065635]],[11,[14.00629256044499,3.614815506799175]],[12,[9.763281342613707,0.018425375535628064]],[13,[0.0,0.0]],[14,[0.7997581306144639,-0.5767761645364544]],[15,[0.05852766346606586,-1.7558299039780536]],[16,[19.75931834024595,4.512540664093933]],[17,[0.17673990847697496,-0.9253757795596016]],[18,[26.44161668001243,-3.0566001241026584]],[19,[-0.162851070793522,-0.9241759662677964]],[20,null]],"handle_end":[[1,[3.0857646420445235,-0.2303077208630384]],[2,null],[3,null],[4,null],[5,null],[6,null],[7,null],[8,[0.0,0.0]],[9,null],[10,[-4.337869009581482,-9.544008547471435]],[11,[-11.251577773519555,-0.02123410547835647]],[12,[0.0,0.0]],[13,[-0.8413105648451165,0.6067432917530482]],[14,[-0.022878726643284608,0.6863617992941045]],[15,null],[16,null],[17,null],[18,null],[19,[1.229080932784882,6.672153635116501]],[20,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9663740787529879916,{"inputs":[{"Node":{"node_id":14633096010607565334,"output_index":0}},{"Node":{"node_id":10651614176902312108,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9666682009015049330,{"inputs":[{"Node":{"node_id":2791109467690716388,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9684750473849891261,{"inputs":[{"Node":{"node_id":70804263053697201,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5772391174087621,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.9301109,"green":0.66538733,"blue":0.34670407,"alpha":1.0,"linear":true},{"red":0.5906189,"green":0.6071563,"blue":0.3737451,"alpha":1.0,"linear":true},{"red":0.33716366,"green":0.5520115,"blue":0.40197787,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5772391174087621,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.9301109,"green":0.66538733,"blue":0.34670407,"alpha":1.0,"linear":true},{"red":0.5906189,"green":0.6071563,"blue":0.3737451,"alpha":1.0,"linear":true},{"red":0.33716366,"green":0.5520115,"blue":0.40197787,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.000788022064618,0.0,0.0,1.000788022064618,0.0,0.5000000000000001]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9695624216919732577,{"inputs":[{"Node":{"node_id":1156213189397385283,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9724746185253267560,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[1091.6248612138966,461.5]],[2,[1063.63448015713,453.99999999999994]],[3,[1044.9742261192855,459.0]],[4,[1184.9261314031187,496.5]],[5,[1259.567147554496,476.49999999999994]],[6,[1194.256258422041,458.99999999999994]],[7,[1138.2754963085074,473.99999999999994]],[8,[1184.9261314031187,486.5]],[9,[1222.2466394788075,476.5000000000001]],[10,[1194.2562584220411,469.00000000000006]],[11,[1175.5960043841962,474.00000000000006]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9771562518763748677,{"inputs":[{"Node":{"node_id":14234384001010789008,"output_index":0}},{"Node":{"node_id":12554549497938935061,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9798215931018813676,{"inputs":[{"Node":{"node_id":10779665858841986661,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[30.27160493827101,0.0,0.0,30.27160493827101,97.17913571110466,-79.94642851844347]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9908869573449854874,{"inputs":[{"Node":{"node_id":16416441286881083283,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9935922395919478146,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[1,[1317.9649443682358,445.9417771681145]],[2,[1309.8491083676272,442.3520804755373]],[3,[1276.181069958848,406.51851851851853]],[4,[1281.3168724279838,402.0411522633745]],[5,[1303.7037037037037,419.6872427983538]],[6,[1283.8189300411525,381.6296296296296]],[7,[1291.19341563786,379.78600823045264]],[8,[1311.341563786008,420.872427983539]],[9,[1303.5720164609054,369.51440329218104]],[10,[1307.9176954732511,360.6913580246913]],[11,[1318.5843621399176,404.93827160493817]],[12,[1330.9629629629628,378.8641975308641]],[13,[1334.9135802469134,382.9465020576131]],[14,[1320.9547325102878,428.11522633744846]],[15,[1346.7654320987656,379.522633744856]],[16,[1349.7942386831278,385.3168724279836]],[17,[1331.2263374485594,418.633744855967]],[18,[1353.2181069958854,390.3209876543211]],[19,[1353.7448559670786,395.8518518518519]],[20,[1325.5637860082302,441.9423868312756]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,1]],"handle_primary":[[1,[-5.73075474332677,0.190602104454058]],[2,[-1.1927104603494172,-1.8387619597050957]],[3,[-25.9423868312756,-18.304526748971227]],[4,[11.934313314187648,6.04743230718924]],[5,[0.0,0.0]],[6,[-13.958847736625785,-23.967078189300366]],[7,[13.958847736626012,18.304526748971227]],[8,[0.0,0.0]],[9,[-8.427983539094384,-34.502057613168745]],[10,[10.930041152263357,24.88888888888891]],[11,[0.0,0.0]],[12,[8.691358024691226,-13.168724279835374]],[13,[-7.506172839506235,20.67489711934155]],[14,[0.0,0.0]],[15,[17.514403292181214,-18.96296296296299]],[16,[-13.168724279835487,17.382716049382793]],[17,[0.0,0.0]],[18,[14.617283950616866,-16.32921810699594]],[19,[-17.792694511774243,22.05806648377495]],[20,[-0.8876695625660886,2.750800182899013]]],"handle_end":[[1,[1.8728852309102424,2.887364730986178]],[2,[21.160177959832257,14.930277849830986]],[3,[-29.366255144032948,-14.880658436213992]],[4,[0.0,0.0]],[5,[8.275699533270199,14.209219953350214]],[6,[-21.35436745259517,-28.00242524443996]],[7,[0.0,0.0]],[8,[7.512329871725342,30.753600412376215]],[9,[-11.24897964853426,-25.61514642859032]],[10,[0.0,0.0]],[11,[-8.691358024691226,13.168724279835374]],[12,[7.506172839506235,-20.67489711934155]],[13,[0.0,0.0]],[14,[-16.17829033097064,17.51634441849427]],[15,[22.902000000470935,-30.23064000062169]],[16,[0.0,0.0]],[17,[-11.234881916731185,12.550678897970386]],[18,[19.22633744855989,-23.835390946502]],[19,[2.149866795831258,-6.662224576095184]],[20,[6.571889866311722,-0.218577847920983]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9981992739451603109,{"inputs":[{"Node":{"node_id":13852123721901366011,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.8744713248939212,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.022173883,"green":0.06847818,"blue":0.022173883,"alpha":0.59765625,"linear":true},{"red":0.022173883,"green":0.07036011,"blue":0.022173883,"alpha":0.4453125,"linear":true},{"red":0.022173883,"green":0.06301004,"blue":0.022173883,"alpha":0.2109375,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.8744713248939212,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.022173883,"green":0.06847818,"blue":0.022173883,"alpha":0.59765625,"linear":true},{"red":0.022173883,"green":0.07036011,"blue":0.022173883,"alpha":0.4453125,"linear":true},{"red":0.022173883,"green":0.06301004,"blue":0.022173883,"alpha":0.2109375,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-0.960402449584894,-4.389465686028167e-16,0.0,-3.584270737558197,0.4917953695426217,3.516868774843142]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9993538712344947860,{"inputs":[{"Node":{"node_id":15134939288287905620,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.119538434,"green":0.30054384,"blue":0.2874409,"alpha":1.0,"linear":true},{"red":0.119538434,"green":0.30054384,"blue":0.2917707,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.119538434,"green":0.30054384,"blue":0.2874409,"alpha":1.0,"linear":true},{"red":0.119538434,"green":0.30054384,"blue":0.2917707,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[30.450841897898517,0.0,0.0,30.450841897898517,1226.9629629629628,509.33333333333326]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10181153433637856462,{"inputs":[{"Node":{"node_id":9150078008481575131,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[187.102540378,187.10254037799996]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.205080756,373.205080756]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10188337730058049439,{"inputs":[{"Node":{"node_id":1268775104597510914,"output_index":0}},{"Node":{"node_id":11076863066321508991,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10189927996178548902,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[298.56406460551045,540.0000000000002]],[2,[298.5640646055101,570.0000000000006]],[3,[597.1281292110203,649.9999999999999]],[4,[597.1281292110198,630.0]],[5,[709.0896534380867,660.0]],[6,[709.0896534380864,649.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-5.684341886080801e-13,-19.999999999999886]],[4,[0.0,0.0]],[5,[-2.273736754432321e-13,-10.000000000000114]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10431241258085047322,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[298.56406460551034,479.99999999999983]],[2,[597.1281292110192,559.9999999999998]],[3,[597.1281292110202,599.9999999999999]],[4,[709.0896534380863,630.0]],[5,[709.0896534380863,649.9999999999999]],[6,[298.56406460551045,540.0000000000001]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10477328336261010694,{"inputs":[{"Node":{"node_id":10189927996178548902,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970024,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10507084483235320484,{"inputs":[{"Node":{"node_id":9157963288496356916,"output_index":0}},{"Node":{"node_id":1396768435017101055,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10564228200140683112,{"inputs":[{"Node":{"node_id":13001069903842109798,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-140.23409378379097,-66.17529531267506]},"exposed":false}},{"Value":{"tagged_value":{"F64":-66.17233335779959},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[61.12160376625298,24.813625019997943]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-31.95064812348834,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10651614176902312108,{"inputs":[{"Node":{"node_id":4134257789770357215,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.869076264787314,0.9670173672287944,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.14412849,"green":0.35640025,"blue":0.32314324,"alpha":1.0,"linear":true},{"red":0.18447497,"green":0.44520125,"blue":0.35640025,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.33245158,"blue":0.31854683,"alpha":1.0,"linear":true},{"red":0.11443538,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.869076264787314,0.9670173672287944,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.14412849,"green":0.35640025,"blue":0.32314324,"alpha":1.0,"linear":true},{"red":0.18447497,"green":0.44520125,"blue":0.35640025,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.33245158,"blue":0.31854683,"alpha":1.0,"linear":true},{"red":0.11443538,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[540.3483949723926,-2.8421709430404014e-14,2.8421709430404014e-14,540.3483949723926,748.8089485570027,648.8589703924824]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10742991645899166287,{"inputs":[{"Node":{"node_id":1104068854328504126,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053887,-114.0000000000026]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10779665858841986661,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[98.808765340734,-112.29086885060116]],[2,[97.17913571110468,-93.86098831945704]],[3,[122.7099999086348,-47.60198818628578]],[4,[127.45074064937567,-74.14101615113282]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-5.92592592592608,-17.692685309898252]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10810157408196882043,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1231.576766497731,510.00000000000233]],[2,[1231.5767664977286,540.0]],[3,[1306.217782649106,559.9999999999999]],[4,[1306.2177826491084,530.0000000000023]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[-6.821210263296962e-13,-1.1368683772161605e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10849502918952703647,{"inputs":[{"Node":{"node_id":9663740787529879916,"output_index":0}},{"Node":{"node_id":17433098630591807963,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10852750245702849075,{"inputs":[{"Node":{"node_id":17250040304106119844,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.5583405,"alpha":0.75,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10917301734480569398,{"inputs":[{"Node":{"node_id":3455270778005546310,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10989897386232385465,{"inputs":[{"Node":{"node_id":10507084483235320484,"output_index":0}},{"Node":{"node_id":7339104629465306715,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11076863066321508991,{"inputs":[{"Node":{"node_id":8891726805381758817,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.1092171365545098,0.0,0.0,1.1092171365545098,-0.10921713655450987,0.5063043384061539]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11158238411769751544,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":14124486712683868036,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11221222899304956410,{"inputs":[{"Node":{"node_id":5448146793323825465,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11236872744106223256,{"inputs":[{"Node":{"node_id":9724746185253267560,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,16.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11429712783984224234,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":12302362769310895852,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11450962621506425680,{"inputs":[{"Node":{"node_id":514222872092587805,"output_index":0}},{"Node":{"node_id":6006052038693767172,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11479492521093639512,{"inputs":[{"Node":{"node_id":15216519480392295991,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Lighten"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11490835759023283071,{"inputs":[{"Node":{"node_id":16923062582661131268,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11506204916439878896,{"inputs":[{"Node":{"node_id":2640491057355360805,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11547499603328872398,{"inputs":[{"Node":{"node_id":8343201730608263656,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11579925754926059876,{"inputs":[{"Node":{"node_id":15670426414376277308,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1175.596004383839,384.99999999999983]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[410.52558883186134,109.99999999999974]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11595529463602678384,{"inputs":[{"Node":{"node_id":4398598693761352299,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11634445349252640936,{"inputs":[{"Node":{"node_id":2032185045476767535,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[708.5896534382083,269.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,0.267949192432]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11634802583144606404,{"inputs":[{"Node":{"node_id":9226731772122225003,"output_index":0}},{"Node":{"node_id":6868877732348460627,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11776939455674933130,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":9684750473849891261,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11860177410232537211,{"inputs":[{"Node":{"node_id":5882319123081134737,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11895211316848895241,{"inputs":[{"Node":{"node_id":10742991645899166287,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21586053,"green":0.47932023,"blue":0.34670407,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21586053,"green":0.47932023,"blue":0.34670407,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[186.60254037844425,0.0,0.0,186.60254037844425,1343.5382907247958,525.0000000000011]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11990662272042254522,{"inputs":[{"Node":{"node_id":1147521068928676110,"output_index":0}},{"Node":{"node_id":15167880819976070791,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12019361655085452072,{"inputs":[{"Node":{"node_id":2036609094647228373,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1080.8351529382842,378.98352292316827]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.0038859407525,220.57244110912933]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.003011245448756e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12172015233077238737,{"inputs":[{"Node":{"node_id":13287180494862716983,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12302362769310895852,{"inputs":[{"Node":{"node_id":15347111149235590492,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.4047792425110607,0.6425390774124099,0.8010456340133093,0.894708599277477,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5,0.5],"color":[{"red":0.6062657,"green":0.63883054,"blue":0.3602605,"alpha":1.0,"linear":true},{"red":0.44865155,"green":0.54719424,"blue":0.28927982,"alpha":1.0,"linear":true},{"red":0.31854683,"green":0.46207705,"blue":0.27467737,"alpha":1.0,"linear":true},{"red":0.18782076,"green":0.3813261,"blue":0.2462014,"alpha":1.0,"linear":true},{"red":0.13563335,"green":0.33245158,"blue":0.23074007,"alpha":1.0,"linear":true},{"red":0.057805434,"green":0.23074007,"blue":0.19120166,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.4047792425110607,0.6425390774124099,0.8010456340133093,0.894708599277477,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5,0.5],"color":[{"red":0.6062657,"green":0.63883054,"blue":0.3602605,"alpha":1.0,"linear":true},{"red":0.44865155,"green":0.54719424,"blue":0.28927982,"alpha":1.0,"linear":true},{"red":0.31854683,"green":0.46207705,"blue":0.27467737,"alpha":1.0,"linear":true},{"red":0.18782076,"green":0.3813261,"blue":0.2462014,"alpha":1.0,"linear":true},{"red":0.13563335,"green":0.33245158,"blue":0.23074007,"alpha":1.0,"linear":true},{"red":0.057805434,"green":0.23074007,"blue":0.19120166,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-0.6280229858611819,-7.706107293371535e-17,2.465190328815662e-32,-0.6292514134472751,0.5027713289486063,0.6581287661256529]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12331680982485935376,{"inputs":[{"Node":{"node_id":2183401450260403525,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.6313726,"linear":true},{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.6313726,"linear":true},{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[23.992379011075172,89.54077746378124,-89.54077746378124,23.992379011075172,1232.4286852860116,509.8553655459547]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12360435709959435360,{"inputs":[{"Node":{"node_id":15723520455917422372,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.19461781,"green":0.4910209,"blue":0.2831488,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.3662527,"blue":0.19120166,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.19461781,"green":0.4910209,"blue":0.2831488,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.3662527,"blue":0.19120166,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.03010866848740079,54.84537877648688,-54.84537877648688,0.03010866848740079,601.2182244170343,447.3706264136704]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12370676490908282512,{"inputs":[{"Node":{"node_id":9666682009015049330,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.643741535074667,0.8214781907174007,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.20863685,"blue":0.22696589,"alpha":0.5019608,"linear":true},{"red":0.06124607,"green":0.21586053,"blue":0.23455065,"alpha":0.17254902,"linear":true},{"red":0.0,"green":1.0,"blue":1.0,"alpha":0.003921569,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.643741535074667,0.8214781907174007,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.20863685,"blue":0.22696589,"alpha":0.5019608,"linear":true},{"red":0.06124607,"green":0.21586053,"blue":0.23455065,"alpha":0.17254902,"linear":true},{"red":0.0,"green":1.0,"blue":1.0,"alpha":0.003921569,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[4.209241704032138,40.39274118587963,-40.39274118587963,4.209241704032138,1052.889473021082,481.8527922453704]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12469956387875933942,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":2881239077602364410,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12537712543904859919,{"inputs":[{"Node":{"node_id":4968550668755026811,"output_index":0}},{"Node":{"node_id":8508454285877707748,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12548387328300782726,{"inputs":[{"Node":{"node_id":764189229787475993,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[173.41101516874107,-7.105427357601002e-15,7.105427357601002e-15,173.41101516874107,616.4787251736955,439.11304174611325]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12554549497938935061,{"inputs":[{"Node":{"node_id":14055195208113082127,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[833.274364370262,-33.56362500933909]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.8,-0.6]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[7.016709298534876e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12683405703338263457,{"inputs":[{"Node":{"node_id":12537712543904859919,"output_index":0}},{"Node":{"node_id":14449710315388146362,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12852312236973354891,{"inputs":[{"Node":{"node_id":8181290118694677328,"output_index":0}},{"Node":{"node_id":2921219300441868542,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12875121980058869686,{"inputs":[{"Node":{"node_id":13747030364552895864,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12930243402848966353,{"inputs":[{"Node":{"node_id":7948029953091985757,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[895.6921938163274,315.9999999999998]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.2050807562376,99.99999999999976]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12931264630175648107,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[1492.820323027551,460.0000000000025]],[2,[1531.2435565296985,470.3]],[3,[1531.243556529699,704.9999999999997]],[4,[261.24355652969956,704.9999999999997]],[5,[261.2435565296994,530.0000000000001]],[6,[298.56406460551034,520.0000000000002]],[7,[298.56406460551045,540.0000000000001]],[8,[709.0896534380863,649.9999999999999]],[9,[1231.576766497731,510.0000000000024]],[10,[1306.2177826491086,530.0000000000023]],[11,[1492.8203230275508,480.0000000000001]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12998832508553378533,{"inputs":[{"Node":{"node_id":3122972215852775755,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.18447497,"green":0.45078585,"blue":0.38642952,"alpha":1.0,"linear":true},{"red":0.16513222,"green":0.42326772,"blue":0.35640025,"alpha":1.0,"linear":true},{"red":0.13843162,"green":0.3515327,"blue":0.31854683,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.18447497,"green":0.45078585,"blue":0.38642952,"alpha":1.0,"linear":true},{"red":0.16513222,"green":0.42326772,"blue":0.35640025,"alpha":1.0,"linear":true},{"red":0.13843162,"green":0.3515327,"blue":0.31854683,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[404.27541897008257,122.85928732422236,-122.85928732422236,404.27541897008257,300.68299245776245,518.8255689888956]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13001069903842109798,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.02964805558748984,0.4451546735104888]],[2,[1.067391838882569,0.5169672994595966]],[3,[1.0311603768047983,1.0082447817061446]],[4,[0.15793848790232112,1.0756444843098496]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-0.4856258676143469,-0.19200483651697595]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13207576193421440093,{"inputs":[{"Node":{"node_id":12930243402848966353,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.2831488,"green":0.50888145,"blue":0.38642952,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.2831488,"green":0.50888145,"blue":0.38642952,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.0,0.0,0.0,1.0,0.0,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13287180494862716983,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[765.0704155516202,530.0]],[2,[783.7306695894644,525.0]],[3,[811.7210506462309,532.5]],[4,[830.3813046840752,527.5]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13442128106088307772,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":13700218159488557234,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13531127678140037818,{"inputs":[{"Node":{"node_id":3970872207068447290,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[18.074074074074133,0.0,0.0,18.074074074074133,-137.83320996790803,42.520127611008206]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13609749019463823009,{"inputs":[{"Node":{"node_id":2062662104423219162,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.09989874,"green":0.27889434,"blue":0.2831488,"alpha":1.0,"linear":true},{"red":0.09989874,"green":0.27889434,"blue":0.2831488,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.09989874,"green":0.27889434,"blue":0.2831488,"alpha":1.0,"linear":true},{"red":0.09989874,"green":0.27889434,"blue":0.2831488,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-9.548830446270811,35.636720378343966,-35.636720378343966,-9.548830446270811,1277.7809612621757,523.3659137612484]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13696921450692276893,{"inputs":[{"Node":{"node_id":729026403095264425,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.9059757781988896,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.9059757781988896,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[217.29845897826567,-7.105427357601002e-15,7.105427357601002e-15,217.29845897826567,1097.073492861303,299.163664081673]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13700218159488557234,{"inputs":[{"Node":{"node_id":10181153433637856462,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.4831746395427087,0.49908141270537343,0.5160486374122156,0.65708869278784,0.6729954659505047,0.6899626906573468,0.7291993977919214,0.7440457194104085,0.7588920410288952,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.4831746395427087,0.49908141270537343,0.5160486374122156,0.65708869278784,0.6729954659505047,0.6899626906573468,0.7291993977919214,0.7440457194104085,0.7588920410288952,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-0.4991103632473921,-6.112339087721917e-17,4.474542765298796e-17,-0.4991103632473921,0.5008896367526081,0.4999999999999996]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13701442050580061197,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1268.897274573418,500.00000000000006]],[2,[1343.5382907247958,520.0000000000001]],[3,[1530.14083110324,469.9999999999986]],[4,[1380.8587988003635,429.9999999999991]],[5,[1380.8587988003635,469.9997827307588]],[6,[1380.8587988003635,469.9999999999993]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0002172692405224552]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,null],[5,null],[6,[4.547473508864641e-13,5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13743495762122910279,{"inputs":[{"Node":{"node_id":322234583139821148,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.07818743,"green":0.26225072,"blue":0.27049786,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.07818743,"green":0.26225072,"blue":0.27049786,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[98.39323426041926,21.97130473776349,-21.97130473776349,98.39323426041926,714.5450410368313,418.41006413654026]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13747030364552895864,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[709.0896534380864,650.0]],[2,[1231.576766497729,510.00000000000233]],[3,[1231.6308657449686,540.0144958496094]],[4,[1156.9357503463516,540.0]],[5,[709.0896534380863,660.0]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-74.69511539861696,-0.014495849609375]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,[0.0,0.0]],[5,[-2.273736754432321e-13,-2.273736754432321e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13817976820605296433,{"inputs":[{"Node":{"node_id":4837219841531371489,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13837327017498431546,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[662.4390183434757,536.5]],[2,[774.4005425705421,566.5]],[3,[746.4101615137755,574.0]],[4,[718.4197804570089,566.5]],[5,[802.3909236273088,543.9999999999999]],[6,[765.0704155516199,533.9999999999999]],[7,[634.4486372867094,569.0000000000001]],[8,[727.7499074759312,594.0]],[9,[1063.63448015713,504.0000000000001]],[10,[914.3524478543748,464.0]],[11,[858.3716857408418,479.00000000000006]],[12,[1287.5575286112626,593.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13852123721901366011,{"inputs":[{"Node":{"node_id":456239140723765386,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[819.6941583984747,299.6363877833991]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.20900992053447,59.27277556679853]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13853529851208960143,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-39.199465111941095,125.88462054688308]],[2,[28.09271595801783,129.8163283935271]],[3,[29.146213900404632,142.10291541428978]],[4,[-40.648024782723304,138.90840278889075]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[-37.794238683127446,8.35487917411865]],[2,[0.0,0.0]],[3,[27.65672806576993,9.286366023261053]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13861850149743924125,{"inputs":[{"Node":{"node_id":13442128106088307772,"output_index":0}},{"Node":{"node_id":5891705401441266824,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13868917743026516656,{"inputs":[{"Node":{"node_id":5258402282444994019,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.89626944,"green":0.6583749,"blue":0.20863685,"alpha":1.0,"linear":true},{"red":0.32314324,"green":0.5583405,"blue":0.33245158,"alpha":1.0,"linear":true},{"red":0.19608434,"green":0.4751555,"blue":0.30076632,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.89626944,"green":0.6583749,"blue":0.20863685,"alpha":1.0,"linear":true},{"red":0.32314324,"green":0.5583405,"blue":0.33245158,"alpha":1.0,"linear":true},{"red":0.19608434,"green":0.4751555,"blue":0.30076632,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[429.33192665655974,-2.8421709430404014e-14,2.8421709430404014e-14,429.33192665655974,1378.2465619988443,336.3515021544947]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13920465562072008593,{"inputs":[{"Node":{"node_id":3670594928372882885,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13942146309185231085,{"inputs":[{"Node":{"node_id":15166516760575860563,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.2134053325596848,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.111932434,"green":0.2874409,"blue":0.17464739,"alpha":1.0,"linear":true},{"red":0.17464739,"green":0.46207705,"blue":0.30054384,"alpha":1.0,"linear":true},{"red":1.0,"green":0.68668544,"blue":0.18116423,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.2134053325596848,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.111932434,"green":0.2874409,"blue":0.17464739,"alpha":1.0,"linear":true},{"red":0.17464739,"green":0.46207705,"blue":0.30054384,"alpha":1.0,"linear":true},{"red":1.0,"green":0.68668544,"blue":0.18116423,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-5.020401833688084,-41.8975353029611,41.8975353029611,-5.020401833688084,517.1612264010163,481.698518566117]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13942787566051910019,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.000788022064618,-6.266203653947348e-16]],[3,[1.000788022064618,1.0000000000000009]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13946577152348504742,{"inputs":[{"Node":{"node_id":3021739385836969518,"output_index":0}},{"Node":{"node_id":15876464101883822838,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14019233912018234740,{"inputs":[{"Node":{"node_id":16069762220015310717,"output_index":0}},{"Node":{"node_id":17785019773455930267,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14055195208113082127,{"inputs":[{"Node":{"node_id":2510483139353274965,"output_index":0}},{"Node":{"node_id":12360435709959435360,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14102693648424950146,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":16847360882244487081,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14124486712683868036,{"inputs":[{"Node":{"node_id":14449527838292182035,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.31019165912642926,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.1660875,"green":0.4637225,"blue":0.32023078,"alpha":1.0,"linear":true},{"red":0.15480843,"green":0.4249792,"blue":0.28720212,"alpha":0.85546875,"linear":true},{"red":0.14353022,"green":0.40372068,"blue":0.25983277,"alpha":0.3515625,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.31019165912642926,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.1660875,"green":0.4637225,"blue":0.32023078,"alpha":1.0,"linear":true},{"red":0.15480843,"green":0.4249792,"blue":0.28720212,"alpha":0.85546875,"linear":true},{"red":0.14353022,"green":0.40372068,"blue":0.25983277,"alpha":0.3515625,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[32.669270073466016,3.552713678800501e-15,-3.552713678800501e-15,32.669270073466016,712.5925925925926,591.7037037037037]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14161755104759532162,{"inputs":[{"Node":{"node_id":13837327017498431546,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,16.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14202574750104046500,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":1831743139584171612,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14234384001010789008,{"inputs":[{"Node":{"node_id":4757672276235057645,"output_index":0}},{"Node":{"node_id":8863202447825570192,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14255588039347536657,{"inputs":[{"Node":{"node_id":18185020559178852986,"output_index":0}},{"Node":{"node_id":5261200785298607501,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14330881008352607546,{"inputs":[{"Node":{"node_id":11595529463602678384,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.7251131221719457,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.33716366,"blue":0.30946898,"alpha":0.5019608,"linear":true},{"red":0.21952623,"green":0.4910209,"blue":0.3662527,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.7251131221719457,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.33716366,"blue":0.30946898,"alpha":0.5019608,"linear":true},{"red":0.21952623,"green":0.4910209,"blue":0.3662527,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.0629903008048132,22.322796316901588,-22.322796316901588,1.0629903008048132,782.6266089675632,450.7078875412521]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14341957170885045113,{"inputs":[{"Node":{"node_id":12469956387875933942,"output_index":0}},{"Node":{"node_id":7952384394377946257,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14400993470150734626,{"inputs":[{"Node":{"node_id":2088390810384907709,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-69.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14449527838292182035,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[1,[699.8518518518516,598.1234567901233]],[2,[667.3909465020577,593.3827160493828]],[3,[699.7421124828531,603.0617283950616]],[4,[682.3593964334707,606.4197530864195]],[5,[662.6063100137173,612.5432098765428]],[6,[695.3964334705074,609.7777777777776]],[7,[692.1871665904588,615.6720012193263]],[8,[701.8247218411828,611.4580094497792]],[9,[709.3552812071331,611.4970278920897]],[10,[709.413808870599,616.4718792866942]],[11,[713.6278006401462,612.5505258344765]],[12,[721.9094650205761,611.3799725651577]],[13,[734.8148148148149,620.9492455418381]],[14,[728.493827160494,609.9753086419753]],[15,[763.4567901234569,605.6296296296294]],[16,[726.2990397805214,601.9862825788753]],[17,[749.8271604938273,587.4567901234568]],[18,[725.5089163237311,594.6117969821673]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,1]],"handle_primary":[[1,[-13.651577503429507,-4.016460905349504]],[2,[5.399176954732297,6.584362139917744]],[3,[0.0,0.0]],[4,[-6.038618148571572,2.2123832635880945]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[1.0398530837227329,0.17152215813985094]],[10,[2.71082158531226,-3.275875783141601]],[11,[0.9510922553114368,-0.40840938602514143]],[12,[0.6886396813392821,0.35058484628291353]],[13,[-3.101966163694442,-4.096936442615402]],[14,[-0.1771601410563335,-2.331086581557088]],[15,[-15.992684042066571,-5.647919524462736]],[16,[0.0,0.0]],[17,[-7.648317030623161,4.388047332817109]],[18,[-0.0877914951989851,0.0]]],"handle_end":[[1,[8.559670781892919,2.502057613168745]],[2,[0.0,0.0]],[3,[6.038618148571345,-2.2123832635879808]],[4,[0.0,0.0]],[5,[-8.69135802469134,3.3580246913579685]],[6,[4.13595488492615,-4.1749733272365575]],[7,[-5.1358024691359105,5.530864197530718]],[8,[-3.7847889041303233,-0.6242950769699291]],[9,null],[10,null],[11,[-1.2025737194898056,-0.6122274594622468]],[12,[-6.90626428898031,-2.3996342021031296]],[13,[-0.5267489711934559,1.053497942386798]],[14,[-22.51851851851859,-0.614540466392441]],[15,[2.8483462886752022,1.1315348270080676]],[16,[-5.977212841894016,7.381559383908893]],[17,null],[18,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14449710315388146362,{"inputs":[{"Node":{"node_id":7671691070850213967,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":81.1788},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14483299526002574058,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1156.9357503463516,540.0]],[2,[1156.9357503463518,589.9999999999999]],[3,[933.0127018922192,649.9999999999999]],[4,[839.7114317029976,625.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[2.273736754432321e-13,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14633096010607565334,{"inputs":[{"Node":{"node_id":18046677540207938977,"output_index":0}},{"Node":{"node_id":12370676490908282512,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14752203606937854133,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[597.1281292110193,599.9999999999997]],[2,[597.1281292110197,559.9999999999997]],[3,[1044.9742261192855,439.99999999999994]],[4,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14791465604033956302,{"inputs":[{"Node":{"node_id":18187802220803838247,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14805036488257720752,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[849.0415587219195,597.5000000000001]],[2,[877.0319397786858,590.0]],[3,[895.6921938165302,595.0]],[4,[942.3428289111416,582.5]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14842592386831797498,{"inputs":[{"Node":{"node_id":664587514588499648,"output_index":0}},{"Node":{"node_id":14330881008352607546,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15134939288287905620,{"inputs":[{"Node":{"node_id":8958782938691501404,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15157035456876170143,{"inputs":[{"Node":{"node_id":17059035448296015006,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15166516760575860563,{"inputs":[{"Node":{"node_id":18085100003956405261,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-36.95875397623445,-115.11453403741598]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.442673035713692,1.442673035713692]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15167880819976070791,{"inputs":[{"Node":{"node_id":4898866541060902381,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":33.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15216519480392295991,{"inputs":[{"Node":{"node_id":12019361655085452072,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.6837652235970189,0.7972664177223364,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.5972019,"green":0.5394796,"blue":0.2874409,"alpha":0.01,"linear":true},{"red":0.40197787,"green":0.40197787,"blue":0.40197787,"alpha":0.011764706,"linear":true},{"red":0.5972019,"green":0.5394796,"blue":0.2874409,"alpha":0.53515625,"linear":true},{"red":0.92158204,"green":0.5394796,"blue":0.27049786,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.6837652235970189,0.7972664177223364,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.5972019,"green":0.5394796,"blue":0.2874409,"alpha":0.01,"linear":true},{"red":0.40197787,"green":0.40197787,"blue":0.40197787,"alpha":0.011764706,"linear":true},{"red":0.5972019,"green":0.5394796,"blue":0.2874409,"alpha":0.53515625,"linear":true},{"red":0.92158204,"green":0.5394796,"blue":0.27049786,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-0.6337961423750527,-6.938893903907227e-17,2.7755575615628914e-17,-0.6350358623897354,0.5377061694297174,0.32181501263817824]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15261165353096835967,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1156.9357503463468,509.9999999999987]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[4,[615.7883832488644,605.0000000000001]],[5,[597.1281292110198,599.9999999999999]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,null],[4,null],[5,[447.84609690826574,-119.99999999999989]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15300421479077882117,{"inputs":[{"Node":{"node_id":7030585744407664630,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[261.2435565298224,0.0,0.0,261.2435565298224,1268.8972745734177,474.9999999999996]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15347111149235590492,{"inputs":[{"Node":{"node_id":2209276411833629008,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1080.8351529382842,378.9835229231682]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.0038859407525,220.57244110912933]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.003011245448756e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15478704582542175684,{"inputs":[{"Node":{"node_id":8242413775403456296,"output_index":0}},{"Node":{"node_id":13696921450692276893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15488533792651297821,{"inputs":[{"Node":{"node_id":14019233912018234740,"output_index":0}},{"Node":{"node_id":183952488591282082,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15517065353723874205,{"inputs":[{"Node":{"node_id":3616319631707471648,"output_index":0}},{"Node":{"node_id":12548387328300782726,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15595689026000825531,{"inputs":[{"Node":{"node_id":2785423879796980286,"output_index":0}},{"Node":{"node_id":12172015233077238737,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15670426414376277308,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15709488322180832347,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":7838724497953148309,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1270.0,635.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.26635566,"green":0.5711249,"blue":0.46207705,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Node":{"node_id":6,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":4}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":7,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},{"Concrete":{"name":"core_types::list::List"}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6,{"inputs":[{"Node":{"node_id":5,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::TranslateFootprintNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7,{"inputs":[{"Node":{"node_id":2,"output_index":0}},{"Value":{"tagged_value":{"U32":1},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15723520455917422372,{"inputs":[{"Node":{"node_id":4187349759243468746,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[55.4066256813212,75.48692492726542]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.093432966432927,1.093432966432927]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15775513677915164685,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[1,[699.8518518518516,598.1234567901233]],[2,[667.3909465020577,593.3827160493828]],[3,[699.7421124828531,603.0617283950616]],[4,[682.3593964334707,606.4197530864195]],[5,[662.6063100137173,612.5432098765428]],[6,[695.3964334705074,609.7777777777776]],[7,[692.1871665904588,615.6720012193263]],[8,[701.8247218411828,611.4580094497792]],[9,[709.3552812071331,611.4970278920897]],[10,[709.413808870599,616.4718792866942]],[11,[713.6278006401462,612.5505258344765]],[12,[721.9094650205761,611.3799725651577]],[13,[734.8148148148149,620.9492455418381]],[14,[728.493827160494,609.9753086419753]],[15,[763.4567901234569,605.6296296296294]],[16,[726.2990397805214,601.9862825788753]],[17,[749.8271604938273,587.4567901234568]],[18,[725.5089163237311,594.6117969821673]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,1]],"handle_primary":[[1,[-13.651577503429507,-4.016460905349504]],[2,[5.399176954732297,6.584362139917744]],[3,[0.0,0.0]],[4,[-6.038618148571572,2.2123832635880945]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[1.0398530837227329,0.17152215813985094]],[10,[2.71082158531226,-3.275875783141601]],[11,[0.9510922553114368,-0.40840938602514143]],[12,[0.6886396813392821,0.35058484628291353]],[13,[-3.101966163694442,-4.096936442615402]],[14,[-0.1771601410563335,-2.331086581557088]],[15,[-15.992684042066571,-5.647919524462736]],[16,[0.0,0.0]],[17,[-7.648317030623161,4.388047332817109]],[18,[-0.0877914951989851,0.0]]],"handle_end":[[1,[8.559670781892919,2.502057613168745]],[2,[0.0,0.0]],[3,[6.038618148571345,-2.2123832635879808]],[4,[0.0,0.0]],[5,[-8.69135802469134,3.3580246913579685]],[6,[4.13595488492615,-4.1749733272365575]],[7,[-5.1358024691359105,5.530864197530718]],[8,[-3.7847889041303233,-0.6242950769699291]],[9,null],[10,null],[11,[-1.2025737194898056,-0.6122274594622468]],[12,[-6.90626428898031,-2.3996342021031296]],[13,[-0.5267489711934559,1.053497942386798]],[14,[-22.51851851851859,-0.614540466392441]],[15,[2.8483462886752022,1.1315348270080676]],[16,[-5.977212841894016,7.381559383908893]],[17,null],[18,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15876464101883822838,{"inputs":[{"Node":{"node_id":3227544593834141716,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.090841725,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.090841725,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[74.64101615137815,0.0,0.0,74.64101615137815,1268.897274573418,539.9999999999999]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15898396405528650339,{"inputs":[{"Node":{"node_id":16807867745126764195,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1156.935750346027,389.9999999999999]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.2050807562376,99.99999999999976]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15914878146223026034,{"inputs":[{"Node":{"node_id":4069478660487729695,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[39.06014871394696,-80.31594690033606]},"exposed":false}},{"Value":{"tagged_value":{"F64":-25.25081979598717},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.7021527212517815,1.4014617956106905]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-40.69754959903115,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16059265180575745658,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[1194.256258422041,640.0]],[2,[1044.9742261192855,599.9999999999999]],[3,[1100.9549882328188,585.0]],[4,[1082.2947341949744,580.0]],[5,[839.7114317029976,645.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,5]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16069762220015310717,{"inputs":[{"Node":{"node_id":16398743435291795904,"output_index":0}},{"Node":{"node_id":14791465604033956302,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16229837691656808412,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[74.85684586229115,93.12923138495351]],[2,[76.83345669875837,107.20900827532364]],[3,[130.01864188394373,17.639788893964138]],[4,[119.2038270691288,10.452135486817724]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-7.85185185185199,56.395434425300664]],[3,[0.0,0.0]],[4,[43.97876382175265,-36.84748630595526]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16244305414728361140,{"inputs":[{"Node":{"node_id":11547499603328872398,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.2422812,"green":0.5209957,"blue":0.39157256,"alpha":1.0,"linear":true},{"red":0.18447497,"green":0.44520125,"blue":0.34670407,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.2422812,"green":0.5209957,"blue":0.39157256,"alpha":1.0,"linear":true},{"red":0.18447497,"green":0.44520125,"blue":0.34670407,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[330.0,83.99999999999994,-83.99999999999994,330.0,600.0,357.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16261620049358949344,{"inputs":[{"Node":{"node_id":16059265180575745658,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16398743435291795904,{"inputs":[{"Node":{"node_id":5574499968250848265,"output_index":0}},{"Node":{"node_id":4741515246389989284,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16416441286881083283,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1306.217782649107,559.9999999999999]],[2,[1492.8203230275508,509.99999999999994]],[3,[1492.8203230275506,480.00000000000006]],[4,[1306.2177826491068,529.9999999999972]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16510804133693080967,{"inputs":[{"Node":{"node_id":3966971396176820223,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16564941800301062922,{"inputs":[{"Node":{"node_id":18371793711669837037,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.03,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.03,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[111.9615242270654,0.0,0.0,111.9615242270654,1231.57676649773,440.0210291519774]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16591255610014418910,{"inputs":[{"Node":{"node_id":2225749123534781340,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16727310898641763441,{"inputs":[{"Node":{"node_id":13920465562072008593,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.1412633,"green":0.3662527,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.1412633,"green":0.3662527,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[111.96152422706643,0.0,0.0,111.96152422706643,559.8076211353315,455.00000000000006]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16732345645494316637,{"inputs":[{"Node":{"node_id":11450962621506425680,"output_index":0}},{"Node":{"node_id":7637119583909417127,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16793555741218543212,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[559.7618537735666,489.9877366723751]],[2,[634.4486372867091,470.00000000000006]],[3,[783.7306695894638,509.9999999999999]],[4,[597.1281292110201,559.9999999999999]],[5,[298.56406460551005,480.00000000000006]],[6,[410.5255888325765,450.0000000000001]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[149.28203230275471,39.99999999999983]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,null],[2,null],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16807867745126764195,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16847360882244487081,{"inputs":[{"Node":{"node_id":13817976820605296433,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.8879232,"green":0.83076996,"blue":0.50888145,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.8879232,"green":0.83076996,"blue":0.50888145,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[257.03821846965366,66.64251135605264,-66.64251135605264,257.03821846965366,1080.576889863033,251.33333333333337]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16852951849051795674,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[1156.9357503463525,530.0]],[2,[1156.9357503463518,590.0]],[3,[933.0127018922192,650.0]],[4,[933.0127018922192,670.0]],[5,[1343.5382907247958,560.0]],[6,[1343.5382907247958,520.0]],[7,[1306.2177826491068,529.9999999999972]],[8,[1231.576766497731,510.0000000000022]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,null],[3,[0.0,20.0]],[4,[0.0,0.0]],[5,null],[6,null],[7,[-74.64101615137588,-19.99999999999494]],[8,[0.0,0.0]]],"handle_end":[[1,null],[2,null],[3,null],[4,null],[5,null],[6,null],[7,null],[8,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16923062582661131268,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[597.1281292110202,399.9999999999999]],[2,[597.1281292110202,409.99999999999994]],[3,[653.1088913245534,424.99999999999994]],[4,[671.769145362398,420.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17059035448296015006,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[709.0896534380867,469.99999999999994]],[2,[821.0511776651531,500.0]],[3,[933.0127018922194,470.0]],[4,[821.0511776651532,440.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17250040304106119844,{"inputs":[{"Node":{"node_id":6142412830271644616,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,16.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17332567356044944766,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[-0.10921713655450987,1.0126086768123077]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17433098630591807963,{"inputs":[{"Node":{"node_id":11490835759023283071,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.43965724,"blue":0.3515327,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.43965724,"blue":0.3515327,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[74.64101615137781,0.0,0.0,74.64101615137781,597.1281292110202,412.4999999999999]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17533670083736420411,{"inputs":[{"Node":{"node_id":7005645574203740491,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.8397260273972602,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.8397260273972602,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[70.38003300365364,2.1316282072803012e-14,-2.1316282072803012e-14,70.38003300365364,1140.7715561541318,440.7621960978579]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17638504852426495381,{"inputs":[{"Node":{"node_id":17881728913029763313,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[353.48615278178994,0.0,0.0,353.48615278178994,655.8022889203534,538.5024443400456]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17785019773455930267,{"inputs":[{"Node":{"node_id":17887542695709892422,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,-6.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17873337220577786871,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1156.9357503463468,509.9999999999987]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[4,[615.7883832488646,605.0000000000001]],[5,[597.1281292110198,599.9999999999999]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,null],[4,null],[5,[447.84609690826574,-119.99999999999989]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17881728913029763313,{"inputs":[{"Node":{"node_id":16793555741218543212,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17887542695709892422,{"inputs":[{"Node":{"node_id":14842592386831797498,"output_index":0}},{"Node":{"node_id":7259756719760382667,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17965270694495451178,{"inputs":[{"Node":{"node_id":9409313765472227540,"output_index":0}},{"Node":{"node_id":4887570735033124574,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18011777376689315137,{"inputs":[{"Node":{"node_id":10564228200140683112,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.037743783295079,0.0,0.0,1.037743783295079,0.02964805558748984,0.7603995789101692]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[18046677540207938977,{"inputs":[{"Node":{"node_id":2189393878093040029,"output_index":0}},{"Node":{"node_id":2292399603649738346,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18085100003956405261,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[1,[510.41975308641986,500.1481481481481]],[2,[476.9512618480758,444.1904085078117]],[3,[480.5925925925926,440.2962962962962]],[4,[511.55555555555554,490.2222222222222]],[5,[497.38271604938257,447.60493827160496]],[6,[499.77650172698026,445.9388618767647]],[7,[515.1604938271604,486.716049382716]],[8,[502.0960349862431,417.9179038759178]],[9,[505.311372421164,416.4524664944526]],[10,[524.0493827160495,487.1111111111112]],[11,[531.5890484844431,432.90541944395505]],[12,[533.8924329970387,433.46495092641567]],[13,[526.0246913580248,490.07407407407413]],[14,[552.9705625612692,418.19081042008474]],[15,[556.7578325004595,420.13017723423656]],[16,[530.3703703703702,486.71604938271594]],[17,[565.2914244954804,444.3855996237166]],[18,[568.2339832275112,446.0155371619765]],[19,[530.7654320987656,499.55555555555566]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,1]],"handle_primary":[[1,[-9.283950617284065,-12.246913580246884]],[2,[-17.16805625160663,-20.28383937076643]],[3,[21.32824309569804,17.329197515254634]],[4,[0.0,0.0]],[5,[-10.016557406305251,-15.024836109457851]],[6,[3.9272019767233246,4.629039357803151]],[7,[0.0,0.0]],[8,[-8.936088730151937,-20.93774746663439]],[9,[11.197015798182122,18.39034937970939]],[10,[0.0,0.0]],[11,[7.784237194372736,-22.222909722529664]],[12,[-5.082537215847424,18.7049831985629]],[13,[0.0,0.0]],[14,[15.260998855532309,-21.888591759537466]],[15,[-11.459519915000214,23.15277176924241]],[16,[0.0,0.0]],[17,[27.324497401397252,-21.15032331824051]],[18,[-19.30865594294653,18.299752742610902]],[19,[-1.5204271954055455,4.429070525747022]]],"handle_end":[[1,[28.522359190346833,33.698803394714844]],[2,[-22.123456790123555,-17.97530864197529]],[3,[-3.111111111111086,-12.0]],[4,[13.03703703703701,19.555555555555543]],[5,[-12.032856371187677,-14.183269935989983]],[6,[0.7901234567898427,-16.197530864197745]],[7,[18.59187624528363,43.5617887769169]],[8,[-11.197015798182008,-18.39034937970939]],[9,[0.7901234567898427,-21.135802469135857]],[10,[-7.784237194372736,22.22290972252955]],[11,[5.082537215847424,-18.704983198562843]],[12,[3.7530864197531177,-16.59259259259261]],[13,[-15.260998855532534,21.888591759537743]],[14,[11.286699158099054,-22.803605349427187]],[15,[4.54320987654296,-11.851851851852018]],[16,[-28.402535606591755,21.984770746653737]],[17,[19.435079545528083,-18.419570542198244]],[18,[4.54320987654296,-13.23456790123464]],[19,[2.7053847913285836,3.5688054694122116]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18128923159828618806,{"inputs":[{"Node":{"node_id":1229809699395562135,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.3267294443765037,0.5703803350862179,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.1274377,"green":0.3662527,"blue":0.19120166,"alpha":1.0,"linear":true},{"red":0.17329015,"green":0.49851036,"blue":0.26315314,"alpha":1.0,"linear":true},{"red":0.48808023,"green":0.56791306,"blue":0.23646957,"alpha":1.0,"linear":true},{"red":1.0,"green":0.68668544,"blue":0.18116423,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.3267294443765037,0.5703803350862179,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.1274377,"green":0.3662527,"blue":0.19120166,"alpha":1.0,"linear":true},{"red":0.17329015,"green":0.49851036,"blue":0.26315314,"alpha":1.0,"linear":true},{"red":0.48808023,"green":0.56791306,"blue":0.23646957,"alpha":1.0,"linear":true},{"red":1.0,"green":0.68668544,"blue":0.18116423,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-4.746561733668841,-46.29419024216065,46.29419024216065,-4.746561733668841,517.258279622168,489.4807977380199]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[18185020559178852986,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":4847316728405535983,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18187802220803838247,{"inputs":[{"Node":{"node_id":11634445349252640936,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Screen"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18371793711669837037,{"inputs":[{"Node":{"node_id":7861616450605235840,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.00000000000006]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18431382379595272672,{"inputs":[{"Node":{"node_id":10989897386232385465,"output_index":0}},{"Node":{"node_id":4191887059541031673,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[57904581517036791,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[70804263053697201,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-23,259]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[183952488591282082,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[194878846429432339,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,168]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[322234583139821148,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,180]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[326112971739898070,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[429913874753911073,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[456239140723765386,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-30,90]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[514222872092587805,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[532055960192543062,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[585709295659496998,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[664587514588499648,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[729026403095264425,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,153]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[764189229787475993,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,168]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[938033825024582130,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[958845362613832240,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,207]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[972153153989181918,{"persistent_metadata":{"display_name":"Sphere Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1032659476619711014,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1104068854328504126,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,201]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1108089904278882840,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1147521068928676110,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1156213189397385283,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1229809699395562135,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,51]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1268775104597510914,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1396768435017101055,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1490537476612110327,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1658032775659237960,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,105]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1831743139584171612,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2032185045476767535,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-36,216]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2036609094647228373,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,84]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2058192342619930156,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2062662104423219162,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,111]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2077983679740571162,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-65,219]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2088390810384907709,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,72]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2155997486525176376,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,6]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2183401450260403525,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,114]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2189393878093040029,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2209276411833629008,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,87]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2225749123534781340,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2292399603649738346,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2310170068575553369,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2452294403891427489,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2465823993152870948,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2510483139353274965,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2640491057355360805,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,174]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2785423879796980286,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2791109467690716388,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,144]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2843751023378786714,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,51]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2881239077602364410,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2900504420179573771,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2921219300441868542,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3014633976566537110,{"persistent_metadata":{"display_name":"Boolean Cut","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3021739385836969518,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3122972215852775755,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,162]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3185536512640676801,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3227544593834141716,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,204]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3365825508845848745,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3455270778005546310,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,165]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3564067978712674849,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,135]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3616319631707471648,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3670594928372882885,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,171]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3679103217373457623,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3680957604830907751,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,72]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3806549994589872867,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,84]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3927358878935116440,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,183]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3966971396176820223,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,147]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3970872207068447290,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-72,219]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4046495708656778502,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-65,225]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4069478660487729695,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-65,231]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4101813853952238986,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4105329493214975815,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-23,256]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4134257789770357215,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,141]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4187349759243468746,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,48]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4191887059541031673,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4197544064668946479,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4243146970185091100,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,60]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4323461535289334196,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,117]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4398598693761352299,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,129]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4740496570730418920,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4741515246389989284,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4757672276235057645,{"persistent_metadata":{"display_name":"Plant (Right)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4837219841531371489,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,192]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4847316728405535983,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4884180935153120645,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4887570735033124574,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4898866541060902381,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4924169570021915606,{"persistent_metadata":{"display_name":"Sphere","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4968550668755026811,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5017082804473894058,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,60]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5258402282444994019,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,207]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5261200785298607501,{"persistent_metadata":{"display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5317925967883407701,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-72,234]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5326013268137833446,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5346759588580719138,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5365849201631468915,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5434119356821575534,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5448146793323825465,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,159]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5540780316862276409,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5574499968250848265,{"persistent_metadata":{"display_name":"Water","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5670058004691708784,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-65,243]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5882319123081134737,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,189]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5891705401441266824,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5925268772265373737,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6006052038693767172,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6142412830271644616,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6556170892691431702,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6569279146800941123,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,54]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6589978257209505606,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,180]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6777328619777499144,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,135]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6785205785632793666,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6821938959315178556,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6868877732348460627,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7005645574203740491,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,150]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7030585744407664630,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,198]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7067047867039575315,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,156]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7156963182187517674,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,210]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7171713123860587892,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7259756719760382667,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7339104629465306715,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7340659059180155803,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-44,219]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7637119583909417127,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7639490284239357347,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7671691070850213967,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7799679303995308634,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,117]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7838724497953148309,{"persistent_metadata":{"display_name":"Geometric Ripples","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-9,3]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7861616450605235840,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,132]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7884283658260267478,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7910743362843097140,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7948029953091985757,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,189]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7952384394377946257,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8015732980153557800,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8028812053913481975,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8034980397175569257,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,60]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8073807569018624098,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8165914767449151618,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8166796652234334001,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8181290118694677328,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8242413775403456296,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8256712316698018135,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,204]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8343201730608263656,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,195]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8463468388280418154,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8508454285877707748,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8612613134760093452,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,96]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8863202447825570192,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8884703330021429739,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8891726805381758817,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-72,237]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8958782938691501404,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,99]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9115451226763736660,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9138781233934614517,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9150078008481575131,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-65,246]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9157963288496356916,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9210109719406330381,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,96]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9226731772122225003,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9278774434958175105,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,183]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9323583246068171750,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9392462024456293097,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,153]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9393309733761233513,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9409313765472227540,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9640215309187299519,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,141]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9641315149170593327,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,78]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9663740787529879916,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9666682009015049330,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,144]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9684750473849891261,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9695624216919732577,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9724746185253267560,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9771562518763748677,{"persistent_metadata":{"display_name":"Plant (Upper Left)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":39}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9798215931018813676,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9908869573449854874,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,108]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9935922395919478146,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,75]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9981992739451603109,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9993538712344947860,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10181153433637856462,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-58,246]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10188337730058049439,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10189927996178548902,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,120]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10431241258085047322,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,162]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10477328336261010694,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,120]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10507084483235320484,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10564228200140683112,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-72,240]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10651614176902312108,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10742991645899166287,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,201]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10779665858841986661,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-65,222]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10810157408196882043,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,111]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10849502918952703647,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10852750245702849075,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10917301734480569398,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,165]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10989897386232385465,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11076863066321508991,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11158238411769751544,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11221222899304956410,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,159]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11236872744106223256,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11429712783984224234,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11450962621506425680,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11479492521093639512,{"persistent_metadata":{"display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11490835759023283071,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,138]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11506204916439878896,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,174]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11547499603328872398,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,195]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11579925754926059876,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,253]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11595529463602678384,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,129]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11634445349252640936,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11634802583144606404,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11776939455674933130,{"persistent_metadata":{"display_name":"Backdrop Gradient","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11860177410232537211,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11895211316848895241,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11990662272042254522,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12019361655085452072,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,84]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12172015233077238737,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12302362769310895852,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12331680982485935376,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12360435709959435360,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12370676490908282512,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12469956387875933942,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12537712543904859919,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12548387328300782726,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12554549497938935061,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12683405703338263457,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12852312236973354891,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12875121980058869686,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,102]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12930243402848966353,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,189]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12931264630175648107,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-30,256]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12998832508553378533,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13001069903842109798,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-65,240]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13207576193421440093,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13287180494862716983,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13442128106088307772,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13531127678140037818,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13609749019463823009,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13696921450692276893,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13700218159488557234,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13701442050580061197,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,198]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13743495762122910279,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13747030364552895864,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,102]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13817976820605296433,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,192]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13837327017498431546,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13852123721901366011,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-37,90]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13853529851208960143,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-65,234]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13861850149743924125,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13868917743026516656,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13920465562072008593,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,171]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13942146309185231085,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13942787566051910019,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-30,259]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13946577152348504742,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14019233912018234740,{"persistent_metadata":{"display_name":"Structure","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":27}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14055195208113082127,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,48]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14102693648424950146,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14124486712683868036,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14161755104759532162,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14202574750104046500,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14234384001010789008,{"persistent_metadata":{"display_name":"Plant (Lower Left)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14255588039347536657,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,250]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14330881008352607546,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14341957170885045113,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14400993470150734626,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14449527838292182035,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,66]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14449710315388146362,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14483299526002574058,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,105]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14633096010607565334,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14752203606937854133,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,210]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14791465604033956302,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14805036488257720752,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14842592386831797498,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15134939288287905620,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,99]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15157035456876170143,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,126]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15166516760575860563,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,63]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15167880819976070791,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15216519480392295991,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15261165353096835967,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,156]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15300421479077882117,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15347111149235590492,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,87]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15478704582542175684,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15488533792651297821,{"persistent_metadata":{"display_name":"Structure Reflection","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15517065353723874205,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15595689026000825531,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15670426414376277308,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,253]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15709488322180832347,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-5,0]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,-3]}}},"network_metadata":null}}],[6,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-28,-3]}}},"network_metadata":null}}],[7,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15723520455917422372,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,48]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15775513677915164685,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,54]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15876464101883822838,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15898396405528650339,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,250]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15914878146223026034,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-72,231]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16059265180575745658,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16069762220015310717,{"persistent_metadata":{"display_name":"Fountain Water Ripples","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":87}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16229837691656808412,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-65,228]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16244305414728361140,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16261620049358949344,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16398743435291795904,{"persistent_metadata":{"display_name":"Fountain Water","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":31}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16416441286881083283,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,108]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16510804133693080967,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,147]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16564941800301062922,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16591255610014418910,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16727310898641763441,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16732345645494316637,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16793555741218543212,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,177]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16807867745126764195,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,250]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16847360882244487081,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16852951849051795674,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,114]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16923062582661131268,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,138]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17059035448296015006,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,126]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17250040304106119844,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17332567356044944766,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-65,237]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17433098630591807963,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17533670083736420411,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17638504852426495381,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17785019773455930267,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17873337220577786871,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,150]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17881728913029763313,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,177]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17887542695709892422,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,126]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17965270694495451178,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,96]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18011777376689315137,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18046677540207938977,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18085100003956405261,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,63]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18128923159828618806,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18185020559178852986,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18187802220803838247,{"persistent_metadata":{"display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18371793711669837037,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,132]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18431382379595272672,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[388.5,-452.13666473966714],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1379.0,128.0],"node_graph_width":1981.0},"selection_undo_history":[[],[],[],[],[],[15517065353723874205],[7340659059180155803],[7340659059180155803,13442128106088307772,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[16398743435291795904,4741515246389989284,14255588039347536657,5261200785298607501,2465823993152870948,15898396405528650339,16807867745126764195,18185020559178852986,4847316728405535983,11579925754926059876,15670426414376277308,5574499968250848265,5925268772265373737,4105329493214975815,12931264630175648107,11776939455674933130,9684750473849891261,70804263053697201,13942787566051910019],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[16398743435291795904,4741515246389989284,14255588039347536657,5261200785298607501,2465823993152870948,15898396405528650339,16807867745126764195,18185020559178852986,4847316728405535983,11579925754926059876,15670426414376277308,5574499968250848265,5925268772265373737,4105329493214975815,12931264630175648107,11776939455674933130,9684750473849891261,70804263053697201,13942787566051910019],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143,10188337730058049439,11076863066321508991,8891726805381758817,17332567356044944766,1268775104597510914,18011777376689315137,10564228200140683112,13001069903842109798,13861850149743924125,5891705401441266824,5670058004691708784],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[13442128106088307772],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143,10188337730058049439,11076863066321508991,8891726805381758817,17332567356044944766,1268775104597510914,18011777376689315137,10564228200140683112,13001069903842109798],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[13861850149743924125],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143,10188337730058049439,11076863066321508991,8891726805381758817,17332567356044944766],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[1268775104597510914],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[10188337730058049439],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[9157963288496356916],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[10507084483235320484],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[10989897386232385465],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[18431382379595272672],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7171713123860587892],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[2032185045476767535],[11776939455674933130],[9724746185253267560,6142412830271644616,17250040304106119844,11236872744106223256,3185536512640676801],[11776939455674933130,5574499968250848265],[11776939455674933130,16398743435291795904,5574499968250848265],[16398743435291795904],[]],"selection_redo_history":[]}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"8d83fa707928a1c54fe10224695a0c4791ab3501","document_ptz":{"pan":[-634.8230993402813,-317.94980900906876],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Isometric":{"y_axis_spacing":20.0,"angle_a":15.0,"angle_b":15.0}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":15709488322180832347,"output_index":0}}],"nodes":[[57904581517036791,{"inputs":[{"Node":{"node_id":9393309733761233513,"output_index":0}},{"Node":{"node_id":15300421479077882117,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[70804263053697201,{"inputs":[{"Node":{"node_id":13942787566051910019,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[3.410605131648481e-13,3.410605131648481e-13]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1268.999999999999,634.9999999999992]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[194878846429432339,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[671.7691453623979,420.00000000000006]],[2,[559.8076211353317,450.0000000000001]],[3,[410.5255888325765,410.0]],[4,[522.4871130596428,380.00000000000006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[322234583139821148,{"inputs":[{"Node":{"node_id":6589978257209505606,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[326112971739898070,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[559.8076211353317,605.0]],[2,[578.4678751731759,610.0]],[3,[597.1281292110207,605.0]],[4,[578.4678751731759,600.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[-1.1368683772161605e-13,-1.1368683772161605e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[456239140723765386,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[514222872092587805,{"inputs":[{"Node":{"node_id":5434119356821575534,"output_index":0}},{"Node":{"node_id":7910743362843097140,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[585709295659496998,{"inputs":[{"Node":{"node_id":11990662272042254522,"output_index":0}},{"Node":{"node_id":12331680982485935376,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[664587514588499648,{"inputs":[{"Node":{"node_id":5365849201631468915,"output_index":0}},{"Node":{"node_id":16564941800301062922,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[729026403095264425,{"inputs":[{"Node":{"node_id":9392462024456293097,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[764189229787475993,{"inputs":[{"Node":{"node_id":194878846429432339,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[938033825024582130,{"inputs":[{"Node":{"node_id":10477328336261010694,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.21586053,"green":0.47932023,"blue":0.46207705,"alpha":1.0,"linear":true},{"red":0.21586053,"green":0.47932023,"blue":0.46207705,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.21586053,"green":0.47932023,"blue":0.46207705,"alpha":1.0,"linear":true},{"red":0.21586053,"green":0.47932023,"blue":0.46207705,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-9.16419579684299,34.691530621701645,-34.691530621701645,-9.16419579684299,483.2823361060136,589.0672669244975]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[958845362613832240,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[971.7488173182716,440.37931084632993]],[2,[971.7488173182714,480.37931084632993]],[3,[1195.6718657723986,420.3793108463287]],[4,[1195.671865772399,520.3793108463286]],[5,[1382.2744061508483,470.3793108463301]],[6,[1382.2744061508486,330.3793108463298]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[972153153989181918,{"inputs":[{"Node":{"node_id":15488533792651297821,"output_index":0}},{"Node":{"node_id":9981992739451603109,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1032659476619711014,{"inputs":[{"Node":{"node_id":3014633976566537110,"output_index":0}},{"Node":{"node_id":2452294403891427489,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1104068854328504126,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1343.538290724796,580.0000000000001]],[2,[1530.14083110324,530.000000000003]],[3,[1530.14083110324,470.00000000000216]],[4,[1343.5382907247958,520.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1108089904278882840,{"inputs":[{"Node":{"node_id":5317925967883407701,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[69.79423868312793,0.0,0.0,69.79423868312793,-40.648024782723304,134.97463761731152]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1147521068928676110,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":938033825024582130,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1156213189397385283,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[55.980762113533615,610.0]],[2,[65.3108891324556,612.5]],[3,[83.97114317030048,607.4999999999999]],[4,[74.6410161513777,605.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1229809699395562135,{"inputs":[{"Node":{"node_id":2843751023378786714,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-36.95875397623445,-88.44786737074935]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.442673035713692,1.442673035713692]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1268775104597510914,{"inputs":[{"Node":{"node_id":13861850149743924125,"output_index":0}},{"Node":{"node_id":18011777376689315137,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1396768435017101055,{"inputs":[{"Node":{"node_id":15914878146223026034,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[83.0034142151073,0.0,0.0,83.0034142151073,-23.148253406408465,102.48745716339816]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1490537476612110327,{"inputs":[{"Node":{"node_id":2900504420179573771,"output_index":0}},{"Node":{"node_id":9724746185253267560,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1658032775659237960,{"inputs":[{"Node":{"node_id":14483299526002574058,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297003,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1831743139584171612,{"inputs":[{"Node":{"node_id":6569279146800941123,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1660875,"green":0.4637225,"blue":0.32023078,"alpha":1.0,"linear":true},{"red":0.15480843,"green":0.4249792,"blue":0.28720212,"alpha":0.85546875,"linear":true},{"red":0.14353022,"green":0.40372068,"blue":0.25983277,"alpha":0.3515625,"linear":true}],"position":[0.0,0.31019165912642926,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1660875,"green":0.4637225,"blue":0.32023078,"alpha":1.0,"linear":true},{"red":0.15480843,"green":0.4249792,"blue":0.28720212,"alpha":0.85546875,"linear":true},{"red":0.14353022,"green":0.40372068,"blue":0.25983277,"alpha":0.3515625,"linear":true}],"position":[0.0,0.31019165912642926,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[32.669270073466016,3.552713678800501e-15,-3.552713678800501e-15,32.669270073466016,712.5925925925926,591.7037037037037]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2032185045476767535,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":7340659059180155803,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2036609094647228373,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[0.8725092774628217,0.1666676721950458]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]],[5,[0.12749341167028605,0.1666646696927025]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.07925873631249913,0.08849560350574948]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.12799231715991943]],[5,null]],"handle_end":[[1,[0.0,-0.12799086965193351]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.07926033448372466,0.0884959630818129]],[5,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2062662104423219162,{"inputs":[{"Node":{"node_id":10810157408196882043,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970144,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2077983679740571162,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-137.83320996790803,20.957167389569804]],[2,[-130.2776544123526,8.793446239014884]],[3,[-119.7591358938339,55.2367451774976]],[4,[-124.49987663457466,76.24680898300153]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-5.037037037036939,-9.952135486817731]],[3,[0.0,0.0]],[4,[6.814814814814781,36.49116345166567]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2088390810384907709,{"inputs":[{"Node":{"node_id":14341957170885045113,"output_index":0}},{"Node":{"node_id":9323583246068171750,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2155997486525176376,{"inputs":[{"Node":{"node_id":15595689026000825531,"output_index":0}},{"Node":{"node_id":14805036488257720752,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2183401450260403525,{"inputs":[{"Node":{"node_id":16852951849051795674,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2189393878093040029,{"inputs":[{"Node":{"node_id":15478704582542175684,"output_index":0}},{"Node":{"node_id":17533670083736420411,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2209276411833629008,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[0.8725092774641316,0.16666767219504575]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]],[5,[0.1274934116812796,0.166664669692703]],[6,[0.5000000000000018,0.10816199860278752]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.07925873631249913,0.08849560350574948]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.12799231715991943]],[5,[0.14548887396141374,-0.05850358027814341]],[6,[0.22701785858837376,9.09188805575667e-7]]],"handle_end":[[1,[0.0,-0.12799086965193351]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.07926033448372466,0.08849596308181285]],[5,null],[6,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2225749123534781340,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1138.2754963085072,545.0000000000001]],[2,[1156.9357503463518,540.0000000000001]],[3,[1128.9453692895852,532.5000000000001]],[4,[1110.285115251741,537.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2292399603649738346,{"inputs":[{"Node":{"node_id":16510804133693080967,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}],"position":[0.0,0.9127081032507663,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}],"position":[0.0,0.9127081032507663,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[494.4559370523197,1.1368683772161605e-13,-1.1368683772161605e-13,494.4559370523197,945.1209843966468,40.18518518518522]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2310170068575553369,{"inputs":[{"Node":{"node_id":3564067978712674849,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.8883458,"green":0.7603504,"blue":0.28575674,"alpha":1.0,"linear":true},{"red":0.3924137,"green":0.7094022,"blue":0.34775993,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.8883458,"green":0.7603504,"blue":0.28575674,"alpha":1.0,"linear":true},{"red":0.3924137,"green":0.7094022,"blue":0.34775993,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[138.56524263919184,-4.618527782440651e-14,4.618527782440651e-14,138.56524263919184,1375.11535329943,427.9998261846075]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2452294403891427489,{"inputs":[{"Node":{"node_id":9278774434958175105,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.09305898,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.09305898,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[108.0,-62.000000000000114,62.000000000000114,108.0,1085.3205080756943,486.0000000000014]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2465823993152870948,{"inputs":[{"Node":{"node_id":15898396405528650339,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11789234,"green":0.54096377,"blue":0.48551413,"alpha":1.0,"linear":true},{"red":0.50888145,"green":0.7304609,"blue":0.5028866,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11789234,"green":0.54096377,"blue":0.48551413,"alpha":1.0,"linear":true},{"red":0.50888145,"green":0.7304609,"blue":0.5028866,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-0.4843761592267466,-2.2138141473659156e-16,-4.930380657631324e-32,-1.8077164362061455,0.48402602783373766,0.5459259284371658]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2510483139353274965,{"inputs":[{"Node":{"node_id":14202574750104046500,"output_index":0}},{"Node":{"node_id":18128923159828618806,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2640491057355360805,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[783.7306695894642,510.0]],[2,[653.1088913245535,475.0]],[3,[559.8076211353318,500.00000000000017]],[4,[410.5255888325763,460.0]],[5,[410.5255888325765,450.0000000000001]],[6,[559.7618537735666,489.9877366723752]],[7,[671.7691453623979,459.99999999999994]],[8,[709.0896534380868,470.00000000000006]],[9,[821.0511776651531,440.00000000000006]],[10,[933.0127018922194,470.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,null],[2,null],[3,[-149.2820323027555,-40.00000000000017]],[4,[0.0,0.0]],[5,null],[6,null],[7,[37.32050807568885,10.000000000000114]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"handle_end":[[1,null],[2,null],[3,null],[4,null],[5,null],[6,null],[7,null],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2785423879796980286,{"inputs":[{"Node":{"node_id":11634802583144606404,"output_index":0}},{"Node":{"node_id":2225749123534781340,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2791109467690716388,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1156.9357503463468,509.9999999999987]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[4,[615.5514854925251,605.0634765625002]],[5,[596.8912314546803,600.0634765625]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,null],[4,null],[5,[448.0829946646052,-120.0634765625]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2843751023378786714,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[1,[510.41975308641986,500.1481481481481]],[2,[476.9512618480758,444.1904085078117]],[3,[480.5925925925926,440.2962962962962]],[4,[511.55555555555554,490.2222222222222]],[5,[497.38271604938257,447.60493827160496]],[6,[499.77650172698026,445.9388618767647]],[7,[515.1604938271604,486.716049382716]],[8,[502.0960349862431,417.9179038759178]],[9,[505.311372421164,416.4524664944526]],[10,[524.0493827160495,487.1111111111112]],[11,[531.5890484844431,432.90541944395505]],[12,[533.8924329970387,433.46495092641567]],[13,[526.0246913580248,490.07407407407413]],[14,[552.9705625612692,418.19081042008474]],[15,[556.7578325004595,420.13017723423656]],[16,[530.3703703703702,486.71604938271594]],[17,[565.2914244954804,444.3855996237166]],[18,[568.2339832275112,446.0155371619765]],[19,[530.7654320987656,499.55555555555566]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,1]],"handle_primary":[[1,[-9.283950617284065,-12.246913580246884]],[2,[-17.16805625160663,-20.28383937076643]],[3,[21.32824309569804,17.329197515254634]],[4,[0.0,0.0]],[5,[-10.016557406305251,-15.024836109457851]],[6,[3.9272019767233246,4.629039357803151]],[7,[0.0,0.0]],[8,[-8.936088730151937,-20.93774746663439]],[9,[11.197015798182122,18.39034937970939]],[10,[0.0,0.0]],[11,[7.784237194372736,-22.222909722529664]],[12,[-5.082537215847424,18.7049831985629]],[13,[0.0,0.0]],[14,[15.260998855532309,-21.888591759537466]],[15,[-11.459519915000214,23.15277176924241]],[16,[0.0,0.0]],[17,[27.324497401397252,-21.15032331824051]],[18,[-19.30865594294653,18.299752742610902]],[19,[-1.5204271954055455,4.429070525747022]]],"handle_end":[[1,[28.522359190346833,33.698803394714844]],[2,[-22.123456790123555,-17.97530864197529]],[3,[-3.111111111111086,-12.0]],[4,[13.03703703703701,19.555555555555543]],[5,[-12.032856371187677,-14.183269935989983]],[6,[0.7901234567898427,-16.197530864197745]],[7,[18.59187624528363,43.5617887769169]],[8,[-11.197015798182008,-18.39034937970939]],[9,[0.7901234567898427,-21.135802469135857]],[10,[-7.784237194372736,22.22290972252955]],[11,[5.082537215847424,-18.704983198562843]],[12,[3.7530864197531177,-16.59259259259261]],[13,[-15.260998855532534,21.888591759537743]],[14,[11.286699158099054,-22.803605349427187]],[15,[4.54320987654296,-11.851851851852018]],[16,[-28.402535606591755,21.984770746653737]],[17,[19.435079545528083,-18.419570542198244]],[18,[4.54320987654296,-13.23456790123464]],[19,[2.7053847913285836,3.5688054694122116]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2881239077602364410,{"inputs":[{"Node":{"node_id":9641315149170593327,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.18782076,"green":0.49693304,"blue":0.33245158,"alpha":0.296875,"linear":true},{"red":0.18447497,"green":0.47932023,"blue":0.31854683,"alpha":0.70703125,"linear":true},{"red":0.18447497,"green":0.47932023,"blue":0.32314324,"alpha":0.80078125,"linear":true},{"red":0.19120166,"green":0.4910209,"blue":0.30946898,"alpha":0.23137255,"linear":true},{"red":0.18782076,"green":0.47353154,"blue":0.32314324,"alpha":0.18359375,"linear":true}],"position":[0.0,0.2777869967086046,0.36183495566130336,0.6507416725274494,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.18782076,"green":0.49693304,"blue":0.33245158,"alpha":0.296875,"linear":true},{"red":0.18447497,"green":0.47932023,"blue":0.31854683,"alpha":0.70703125,"linear":true},{"red":0.18447497,"green":0.47932023,"blue":0.32314324,"alpha":0.80078125,"linear":true},{"red":0.19120166,"green":0.4910209,"blue":0.30946898,"alpha":0.23137255,"linear":true},{"red":0.18782076,"green":0.47353154,"blue":0.32314324,"alpha":0.18359375,"linear":true}],"position":[0.0,0.2777869967086046,0.36183495566130336,0.6507416725274494,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-59.463528999500795,-48.57689559603688,48.57689559603688,-59.463528999500795,1348.4376415534275,438.2165483327192]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2900504420179573771,{"inputs":[{"Node":{"node_id":3185536512640676801,"output_index":0}},{"Node":{"node_id":6142412830271644616,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2921219300441868542,{"inputs":[{"Node":{"node_id":11506204916439878896,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.43965724,"blue":0.3515327,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.43965724,"blue":0.3515327,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[522.4871130596431,0.0,0.0,522.4871130596431,410.5255888325763,475.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3014633976566537110,{"inputs":[{"Node":{"node_id":5346759588580719138,"output_index":0}},{"Node":{"node_id":11860177410232537211,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3021739385836969518,{"inputs":[{"Node":{"node_id":6556170892691431702,"output_index":0}},{"Node":{"node_id":13868917743026516656,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3122972215852775755,{"inputs":[{"Node":{"node_id":10431241258085047322,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3185536512640676801,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":13837327017498431546,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3227544593834141716,{"inputs":[{"Node":{"node_id":8256712316698018135,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053871,-120.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3365825508845848745,{"inputs":[{"Node":{"node_id":7156963182187517674,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1714411,"green":0.4125427,"blue":0.3515327,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1714411,"green":0.4125427,"blue":0.3515327,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[440.30769230769306,-121.41176470588216,121.41176470588216,440.30769230769306,600.99801739379,581.1764705882348]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3455270778005546310,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[559.8076211353316,449.99999999999994]],[2,[559.7618537735666,489.9877366723752]],[3,[410.5255888325765,450.0000000000001]],[4,[410.5255888325765,410.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3564067978712674849,{"inputs":[{"Node":{"node_id":6777328619777499144,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970075,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3616319631707471648,{"inputs":[{"Node":{"node_id":12852312236973354891,"output_index":0}},{"Node":{"node_id":16727310898641763441,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3670594928372882885,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[671.7691453623979,459.99999999999994]],[2,[671.7691453623979,420.00000000000006]],[3,[559.8076211353316,450.00000000000006]],[4,[559.8076211353317,490.00000000000006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3680957604830907751,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"delta":[[1,[1304.1133973479657,421.12604785855825]],[2,[1304.6986739826243,420.69684499314127]],[3,[1278.0100594421583,366.7343392775492]],[4,[1311.6049382716046,423.2427983539094]],[5,[1301.1577503429353,350.639231824417]],[6,[1317.750342935528,414.37585733882025]],[7,[1336.2743484224964,374.25514403292175]],[8,[1319.9451303155006,428.8614540466391]],[9,[1321.5253772290812,429.56378600823047]],[10,[1354.710562414266,375.5720164609054]],[11,[1325.124828532236,431.14403292181055]],[12,[1360.3292181069958,385.0534979423868]],[13,[1322.315500685871,442.4691358024692]],[14,[1313.0096021947877,442.29355281207137]],[15,[1264.5486968449932,395.9981710105167]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[22.884316415180592,29.146776406035656]],[4,[0.0,0.0]],[5,[15.978052126200282,30.375857338820197]],[6,[0.0,0.0]],[7,[-16.182898948331285,35.4677640603565]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-22.650205761316556,26.60082304526742]],[11,[6.190926179952385,-9.64405832444237]],[12,[-18.78737997256485,20.455418381344316]],[13,[-1.0925163846973192,0.8063811410860922]],[14,[-1.4013919408635047,-1.0754868383370422]],[15,[30.375857338820197,15.10013717421117]]],"handle_end":[[1,[0.0,0.0]],[2,[26.044810242340873,43.48605395518973]],[3,[0.0,0.0]],[4,[16.153635116598025,62.683127572016474]],[5,[0.0,0.0]],[6,[-20.484682213077576,38.013717421124625]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[-20.894375857338673,18.52400548696835]],[10,null],[11,[-18.34842249657072,19.13854595336079]],[12,[1.2603823499284772,-0.9302822106615168]],[13,[0.8337588052027058,0.639861408644208]],[14,[36.34567901234527,22.650205761316897]],[15,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":15}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3806549994589872867,{"inputs":[{"Node":{"node_id":11429712783984224234,"output_index":0}},{"Node":{"node_id":11479492521093639512,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3927358878935116440,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1194.2562584220414,520.0000000000001]],[2,[1082.2947341949798,490.0000000000013]],[3,[1082.2947341949805,450.0000000000013]],[4,[1194.2562584220411,420.00000000000006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[6.821210263296962e-13,-40.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,null],[2,null],[3,[0.0,0.0]],[4,[0.0,-1.1368683772161605e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3966971396176820223,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1156.9357503463468,509.9999999999987]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[4,[615.7883832488646,605.0000000000001]],[5,[597.1281292110198,599.9999999999999]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,null],[4,null],[5,[447.84609690826574,-119.99999999999989]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3970872207068447290,{"inputs":[{"Node":{"node_id":2077983679740571162,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1.2314781197853364,-154.7967075368743]},"exposed":false}},{"Value":{"tagged_value":{"F64":-59.89430248166697},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.809730022247584,0.552568608414892]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-21.93845255979099,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4046495708656778502,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[106.87778599676416,75.02595252015249]],[2,[111.05567892098054,93.44803081206965]],[3,[130.0186418839436,64.45168544306966]],[4,[122.38078180163905,40.36997488237489]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4069478660487729695,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-22.15328312748764,98.9633432080564]],[2,[-23.148253406408465,116.21917209054972]],[3,[59.855160808698834,104.19217420861494]],[4,[55.822325899541134,88.0419325229343]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-27.645547736903644,17.139482007743737]],[3,[0.0,0.0]],[4,[24.844120782255654,5.22590107758802]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4105329493214975815,{"inputs":[{"Node":{"node_id":12931264630175648107,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969916,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4134257789770357215,{"inputs":[{"Node":{"node_id":9640215309187299519,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053945,-77.86019325256757]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999948,0.9999999999999948]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4187349759243468746,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[1,[583.5500685871057,499.53360768175577]],[2,[533.9259259259258,420.7407407407407]],[3,[589.8710562414265,497.0754458161865]],[4,[591.18792866941,498.3045267489712]],[5,[574.0246913580246,440.2962962962963]],[6,[594.4362139917694,493.6515775034293]],[7,[596.3676268861453,491.9835390946502]],[8,[580.9382716049382,401.9753086419752]],[9,[606.0246913580247,486.803840877915]],[10,[607.8683127572016,488.3840877914952]],[11,[615.6378600823045,431.5390946502058]],[12,[609.0096021947874,496.4609053497942]],[13,[609.7997256515774,497.6899862825788]],[14,[650.6666666666667,398.2222222222223]],[15,[615.4183813443072,491.19341563786]],[16,[616.0751917898693,491.077444156548]],[17,[668.3566529492455,433.2510288065844]],[18,[618.4910836762688,499.9725651577503]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,1]],"handle_primary":[[1,[0.0,0.0]],[2,[44.005486968450214,35.16049382716062]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[18.392318244170156,23.769547325102906]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[22.10150891632361,44.44444444444463]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[-3.906721536351256,29.62962962962956]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[-18.3045267489714,37.31138545953348]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[-38.27709190672158,34.5020576131688]],[18,[-6.945585968035971,18.68277302655963]]],"handle_end":[[1,[48.21947873799752,48.855967078189394]],[2,null],[3,[0.0,0.0]],[4,[21.113854595336193,37.201646090535064]],[5,null],[6,[0.0,0.0]],[7,[25.964334705075316,61.47599451303165]],[8,null],[9,[0.0,0.0]],[10,[-6.189300411522709,26.732510288065782]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[-23.747599451303245,35.4677640603565]],[14,null],[15,[0.0,0.0]],[16,[-35.29218106995893,26.337448559670804]],[17,null],[18,[7.8075669002856785,13.340866152962064]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4191887059541031673,{"inputs":[{"Node":{"node_id":4046495708656778502,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[23.140855887179427,0.0,0.0,23.140855887179427,106.87778599676416,66.90900284722227]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4197544064668946479,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[391.8653347947321,590.0]],[2,[363.8749537379656,582.4999999999999]],[3,[345.2146997001212,587.5]],[4,[419.85571585149864,607.5]],[5,[615.7883832488644,555.0000000000001]],[6,[634.4486372867087,560.0]],[7,[578.4678751731759,575.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4243146970185091100,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[1,[583.5500685871057,499.53360768175577]],[2,[533.9259259259258,420.7407407407407]],[3,[589.8710562414265,497.0754458161865]],[4,[591.18792866941,498.3045267489712]],[5,[574.0246913580246,440.2962962962963]],[6,[594.4362139917694,493.6515775034293]],[7,[596.3676268861453,491.9835390946502]],[8,[580.9382716049382,401.9753086419752]],[9,[606.0246913580247,486.803840877915]],[10,[607.8683127572016,488.3840877914952]],[11,[615.6378600823045,431.5390946502058]],[12,[609.0096021947874,496.4609053497942]],[13,[609.7997256515774,497.6899862825788]],[14,[650.6666666666667,398.2222222222223]],[15,[615.4183813443072,491.19341563786]],[16,[616.0751917898693,491.077444156548]],[17,[668.3566529492455,433.2510288065844]],[18,[618.4910836762688,499.9725651577503]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,1]],"handle_primary":[[1,[0.0,0.0]],[2,[44.005486968450214,35.16049382716062]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[18.392318244170156,23.769547325102906]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[22.10150891632361,44.44444444444463]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[-3.906721536351256,29.62962962962956]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[-18.3045267489714,37.31138545953348]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[-38.27709190672158,34.5020576131688]],[18,[-7.386678859929702,8.10852004267656]]],"handle_end":[[1,[48.21947873799752,48.855967078189394]],[2,null],[3,[0.0,0.0]],[4,[21.113854595336193,37.201646090535064]],[5,null],[6,[0.0,0.0]],[7,[25.964334705075316,61.47599451303165]],[8,null],[9,[0.0,0.0]],[10,[-6.189300411522709,26.732510288065782]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[-23.747599451303245,35.4677640603565]],[14,null],[15,[0.0,0.0]],[16,[-35.29218106995893,26.337448559670804]],[17,null],[18,[3.2434080170708057,6.03566529492457]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4323461535289334196,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[634.4486372867091,639.9999999999999]],[2,[597.1281292110198,630.0]],[3,[597.1281292110203,649.9999999999999]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,1.1368683772161605e-13]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4398598693761352299,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[709.0896534380867,469.99999999999994]],[2,[821.0511776651531,500.0]],[3,[933.0127018922194,470.0]],[4,[821.0511776651532,440.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4740496570730418920,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[279.90381056766614,600.0000000000001]],[2,[242.5833024919771,610.0]],[3,[261.2435565298215,615.0]],[4,[298.56406460551034,605.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4757672276235057645,{"inputs":[{"Node":{"node_id":4924169570021915606,"output_index":0}},{"Node":{"node_id":14400993470150734626,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4837219841531371489,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[933.0127018922194,430.0]],[2,[1343.5382907247958,320.00000000000006]],[3,[1007.6537180435968,230.0]],[4,[597.1281292110205,340.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4847316728405535983,{"inputs":[{"Node":{"node_id":11579925754926059876,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.2831488,"green":0.50888145,"blue":0.38642952,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.2831488,"green":0.50888145,"blue":0.38642952,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4884180935153120645,{"inputs":[{"Node":{"node_id":11221222899304956410,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[154.311005935412,0.0,0.0,154.311005935412,719.3881165522664,602.8576781717152]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4887570735033124574,{"inputs":[{"Node":{"node_id":9210109719406330381,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.13013649,"green":0.28818235,"blue":0.3515327,"alpha":0.6313726,"linear":true},{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.13013649,"green":0.28818235,"blue":0.3515327,"alpha":0.6313726,"linear":true},{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-12.375,56.25,-56.25,-12.375,895.5,611.25]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4898866541060902381,{"inputs":[{"Node":{"node_id":7799679303995308634,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.1295309,"green":0.48093295,"blue":0.27457628,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.1295309,"green":0.48093295,"blue":0.27457628,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[37.320508075689304,0.0,0.0,37.320508075689304,597.1281292110198,640.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4924169570021915606,{"inputs":[{"Node":{"node_id":972153153989181918,"output_index":0}},{"Node":{"node_id":8015732980153557800,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4968550668755026811,{"inputs":[{"Node":{"node_id":585709295659496998,"output_index":0}},{"Node":{"node_id":13609749019463823009,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5017082804473894058,{"inputs":[{"Node":{"node_id":8165914767449151618,"output_index":0}},{"Node":{"node_id":8166796652234334001,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5258402282444994019,{"inputs":[{"Node":{"node_id":958845362613832240,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-299.97967195575075,-80.37931084632919]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999984,0.9999999999999984]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5261200785298607501,{"inputs":[{"Node":{"node_id":2465823993152870948,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Lighten"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5317925967883407701,{"inputs":[{"Node":{"node_id":13853529851208960143,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,2.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5326013268137833446,{"inputs":[{"Node":{"node_id":12875121980058869686,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1980693,"green":0.44520125,"blue":0.43965724,"alpha":1.0,"linear":true},{"red":0.1980693,"green":0.44520125,"blue":0.43965724,"alpha":1.0,"linear":true},{"red":0.2831488,"green":0.43965724,"blue":0.25015837,"alpha":0.87890625,"linear":true},{"red":0.10224175,"green":0.27889434,"blue":0.2874409,"alpha":0.296875,"linear":true}],"position":[0.0,0.5005297191519419,0.8104119804726813,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1980693,"green":0.44520125,"blue":0.43965724,"alpha":1.0,"linear":true},{"red":0.1980693,"green":0.44520125,"blue":0.43965724,"alpha":1.0,"linear":true},{"red":0.2831488,"green":0.43965724,"blue":0.25015837,"alpha":0.87890625,"linear":true},{"red":0.10224175,"green":0.27889434,"blue":0.2874409,"alpha":0.296875,"linear":true}],"position":[0.0,0.5005297191519419,0.8104119804726813,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[560.0234567692879,0.0,0.0,560.0234567692879,709.9173857646327,654.4156387100882]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5346759588580719138,{"inputs":[{"Node":{"node_id":57904581517036791,"output_index":0}},{"Node":{"node_id":16244305414728361140,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5365849201631468915,{"inputs":[{"Node":{"node_id":10849502918952703647,"output_index":0}},{"Node":{"node_id":2310170068575553369,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5434119356821575534,{"inputs":[{"Node":{"node_id":1490537476612110327,"output_index":0}},{"Node":{"node_id":16059265180575745658,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5448146793323825465,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[709.0896534380863,630.0]],[2,[597.1281292110198,599.9999999999999]],[3,[783.730669589464,550.0]],[4,[895.6921938165308,580.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5540780316862276409,{"inputs":[{"Node":{"node_id":1032659476619711014,"output_index":0}},{"Node":{"node_id":13743495762122910279,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5574499968250848265,{"inputs":[{"Node":{"node_id":11776939455674933130,"output_index":0}},{"Node":{"node_id":5925268772265373737,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5670058004691708784,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-109.83320996790816,-37.64985269946783]],[2,[-117.83320996790816,-58.65991650497199]],[3,[-130.2776544123526,8.793446239014884]],[4,[-115.759135893834,30.3564064604534]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-0.7407407407406481,44.23171327474574]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.7407407407406481,-44.23171327474574]],[3,[0.0,0.0]],[4,[-12.740740740740762,23.22164946924204]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5882319123081134737,{"inputs":[{"Node":{"node_id":14102693648424950146,"output_index":0}},{"Node":{"node_id":13207576193421440093,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5891705401441266824,{"inputs":[{"Node":{"node_id":5670058004691708784,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[20.470566116530943,0.0,0.0,20.470566116530943,-130.3037760844391,-11.247763718905423]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5925268772265373737,{"inputs":[{"Node":{"node_id":4105329493214975815,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.5840785,"blue":0.5332765,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.5840785,"blue":0.5332765,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1269.9999999999995,0.0,0.0,1269.9999999999995,261.2435565296994,582.5000000000011]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6142412830271644616,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1278.2274015923404,412.5]],[2,[1175.5960043841962,440.0]],[3,[1203.586385440963,447.5]],[4,[1250.2370205355735,435.0]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6556170892691431702,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":3365825508845848745,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6569279146800941123,{"inputs":[{"Node":{"node_id":15775513677915164685,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,26.66666666666663]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6589978257209505606,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[709.0896534380868,410.0000000000001]],[2,[709.0896534380868,470.0]],[3,[821.0511776651532,440.0000000000001]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6777328619777499144,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1343.5382907246749,419.99978273075953]],[2,[1380.8587988003642,430.0]],[3,[1268.8972745734193,460.0000000000024]],[4,[1231.5767664977295,450.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[-6.821210263296962e-13,-5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6785205785632793666,{"inputs":[{"Node":{"node_id":10917301734480569398,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21223073,"green":0.49693304,"blue":0.40197787,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21223073,"green":0.49693304,"blue":0.40197787,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[149.2820323027551,0.0,0.0,149.2820323027551,410.5255888325765,449.9938683361876]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6821938959315178556,{"inputs":[{"Node":{"node_id":12683405703338263457,"output_index":0}},{"Node":{"node_id":5326013268137833446,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7005645574203740491,{"inputs":[{"Node":{"node_id":17873337220577786871,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7030585744407664630,{"inputs":[{"Node":{"node_id":13701442050580061197,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053887,-120.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7067047867039575315,{"inputs":[{"Node":{"node_id":15261165353096835967,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7156963182187517674,{"inputs":[{"Node":{"node_id":14752203606937854133,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565296996,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7171713123860587892,{"inputs":[{"Node":{"node_id":18431382379595272672,"output_index":0}},{"Node":{"node_id":9798215931018813676,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7259756719760382667,{"inputs":[{"Node":{"node_id":15157035456876170143,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-15.413359361670246,62.184932597083105,-62.184932597083105,-15.413359361670246,816.6422985933182,433.1685475779722]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7339104629465306715,{"inputs":[{"Node":{"node_id":16229837691656808412,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[55.16179602165258,0.0,0.0,55.16179602165258,74.85684586229115,58.83057188107068]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7340659059180155803,{"inputs":[{"Node":{"node_id":7171713123860587892,"output_index":0}},{"Node":{"node_id":13531127678140037818,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7639490284239357347,{"inputs":[{"Node":{"node_id":2155997486525176376,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8631573,"green":0.79910284,"blue":0.56471163,"alpha":0.7490196,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7671691070850213967,{"inputs":[{"Node":{"node_id":1658032775659237960,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.040000137,"green":0.16686814,"blue":0.16383977,"alpha":1.0,"linear":true},{"red":0.083675444,"green":0.25930732,"blue":0.25532693,"alpha":0.859375,"linear":true},{"red":0.14702728,"green":0.37626222,"blue":0.37123775,"alpha":0.71875,"linear":true},{"red":0.15592647,"green":0.34191445,"blue":0.29613832,"alpha":0.3984375,"linear":true}],"position":[0.0,0.6048571201787465,0.8131497297124398,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.040000137,"green":0.16686814,"blue":0.16383977,"alpha":1.0,"linear":true},{"red":0.083675444,"green":0.25930732,"blue":0.25532693,"alpha":0.859375,"linear":true},{"red":0.14702728,"green":0.37626222,"blue":0.37123775,"alpha":0.71875,"linear":true},{"red":0.15592647,"green":0.34191445,"blue":0.29613832,"alpha":0.3984375,"linear":true}],"position":[0.0,0.6048571201787465,0.8131497297124398,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[365.43045304903814,0.0,0.0,365.43045304903814,956.8125000000005,307.96874999999966]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7799679303995308634,{"inputs":[{"Node":{"node_id":4323461535289334196,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7838724497953148309,{"inputs":[{"Node":{"node_id":9771562518763748677,"output_index":0}},{"Node":{"node_id":7639490284239357347,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7861616450605235840,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1343.3813269975649,420.0420583039525]],[2,[1343.5382907247954,439.792314581573]],[3,[1268.8972745734186,460.00000000000233]],[4,[1231.5767664977302,450.00000000000233]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7884283658260267478,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1184.9261314031187,547.5]],[2,[1231.5767664977295,535.0000000000001]],[3,[1250.2370205355735,540.0000000000001]],[4,[1203.5863854409629,552.4999999999999]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7910743362843097140,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[-9.330127018921983,587.5]],[2,[121.29165124598823,552.5000000000001]],[3,[83.97114317030002,542.5]],[4,[55.98076211353339,550.0000000000001]],[5,[177.2724133595217,582.5]],[6,[130.62177826491063,594.9999999999999]],[7,[93.3012701892219,585.0]],[8,[261.24355652982126,540.0]],[9,[326.55444566227675,557.5]],[10,[261.2435565298214,575.0]],[11,[18.66025403784454,510.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7948029953091985757,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7952384394377946257,{"inputs":[{"Node":{"node_id":9935922395919478146,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true},{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true},{"red":0.5906189,"green":0.6938719,"blue":0.30054384,"alpha":1.0,"linear":true},{"red":0.9473066,"green":0.8468733,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.9473066,"green":0.8468733,"blue":0.2581829,"alpha":1.0,"linear":true}],"position":[0.0,0.15303737473719153,0.45863166412588735,0.6476150394844262,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true},{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true},{"red":0.5906189,"green":0.6938719,"blue":0.30054384,"alpha":1.0,"linear":true},{"red":0.9473066,"green":0.8468733,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.9473066,"green":0.8468733,"blue":0.2581829,"alpha":1.0,"linear":true}],"position":[0.0,0.15303737473719153,0.45863166412588735,0.6476150394844262,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[97.98415819142356,0.0,0.0,97.98415819142356,1318.0576131687244,439.8353909465018]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8015732980153557800,{"inputs":[{"Node":{"node_id":3806549994589872867,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297002,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8028812053913481975,{"inputs":[{"Node":{"node_id":15517065353723874205,"output_index":0}},{"Node":{"node_id":6785205785632793666,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8034980397175569257,{"inputs":[{"Node":{"node_id":4243146970185091100,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[55.4066256813212,48.820258260598735]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.093432966432927,1.093432966432927]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8073807569018624098,{"inputs":[{"Node":{"node_id":8028812053913481975,"output_index":0}},{"Node":{"node_id":12998832508553378533,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8165914767449151618,{"inputs":[{"Node":{"node_id":11158238411769751544,"output_index":0}},{"Node":{"node_id":13942146309185231085,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8166796652234334001,{"inputs":[{"Node":{"node_id":8034980397175569257,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.19544083,"green":0.49261037,"blue":0.2822318,"alpha":1.0,"linear":true},{"red":0.111932434,"green":0.2874409,"blue":0.17464739,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.19544083,"green":0.49261037,"blue":0.2822318,"alpha":1.0,"linear":true},{"red":0.111932434,"green":0.2874409,"blue":0.17464739,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[3.6582032212263584,60.97005368710563,-60.97005368710563,3.6582032212263584,598.862131143792,418.31733448991577]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8181290118694677328,{"inputs":[{"Node":{"node_id":5540780316862276409,"output_index":0}},{"Node":{"node_id":17638504852426495381,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8242413775403456296,{"inputs":[{"Node":{"node_id":9138781233934614517,"output_index":0}},{"Node":{"node_id":9115451226763736660,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8256712316698018135,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1268.897274573418,500.00000000000006]],[2,[1268.8972745734184,559.9999999999999]],[3,[1343.538290724796,579.9999999999998]],[4,[1343.5382907247958,520.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8343201730608263656,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[933.0127018922194,430.0]],[2,[933.0127018922194,470.0]],[3,[709.0896534380868,410.0000000000001]],[4,[709.0896534380868,470.0]],[5,[597.1281292110203,439.99999999999994]],[6,[597.1281292110205,340.0000000000001]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8463468388280418154,{"inputs":[{"Node":{"node_id":9993538712344947860,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":74.5472},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8508454285877707748,{"inputs":[{"Node":{"node_id":9908869573449854874,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.22696589,"green":0.4910209,"blue":0.42326772,"alpha":1.0,"linear":true},{"red":0.20507872,"green":0.5840785,"blue":0.5332765,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.22696589,"green":0.4910209,"blue":0.42326772,"alpha":1.0,"linear":true},{"red":0.20507872,"green":0.5840785,"blue":0.5332765,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[10.207271312565354,38.09405514513378,-38.09405514513378,10.207271312565354,1306.8465798679335,529.8451605094965]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8612613134760093452,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[933.0127018922192,650.0]],[2,[839.7114317029974,625.0000000000001]],[3,[802.3909236273086,635.0000000000001]],[4,[933.0127018922192,670.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8863202447825570192,{"inputs":[{"Node":{"node_id":5017082804473894058,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-299.38891648776223,-111.69072674057747]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0616145921394244,1.0616145921394244]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8884703330021429739,{"inputs":[{"Node":{"node_id":16732345645494316637,"output_index":0}},{"Node":{"node_id":326112971739898070,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8891726805381758817,{"inputs":[{"Node":{"node_id":17332567356044944766,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-74.42590421819692,41.71533421869417]},"exposed":false}},{"Value":{"tagged_value":{"F64":38.68758978528783},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[38.26905454222045,23.541084128981048]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[23.61080512850412,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8958782938691501404,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1156.9357503463525,530.0]],[2,[1231.576766497729,510.00000000000233]],[3,[1231.6308657449686,540.0144958496094]],[4,[1156.9357503463516,540.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-74.69511539861696,-0.014495849609375]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,[0.0,-2.273736754432321e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9115451226763736660,{"inputs":[{"Node":{"node_id":7067047867039575315,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.19120166,"green":0.42326772,"blue":0.32777813,"alpha":1.0,"linear":true},{"red":0.27049786,"green":0.5271152,"blue":0.3662527,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.19120166,"green":0.42326772,"blue":0.32777813,"alpha":1.0,"linear":true},{"red":0.27049786,"green":0.5271152,"blue":0.3662527,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[328.172534011826,-87.58299785155009,87.58299785155009,328.172534011826,608.9061780767327,603.2468117028296]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9138781233934614517,{"inputs":[{"Node":{"node_id":8073807569018624098,"output_index":0}},{"Node":{"node_id":4884180935153120645,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9150078008481575131,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9157963288496356916,{"inputs":[{"Node":{"node_id":10188337730058049439,"output_index":0}},{"Node":{"node_id":1108089904278882840,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9210109719406330381,{"inputs":[{"Node":{"node_id":8612613134760093452,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9226731772122225003,{"inputs":[{"Node":{"node_id":8884703330021429739,"output_index":0}},{"Node":{"node_id":1156213189397385283,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9278774434958175105,{"inputs":[{"Node":{"node_id":3927358878935116440,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053914,-80.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999972,0.9999999999999972]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9323583246068171750,{"inputs":[{"Node":{"node_id":3680957604830907751,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.26225072,"green":0.5028866,"blue":0.38642952,"alpha":1.0,"linear":true},{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.26225072,"green":0.5028866,"blue":0.38642952,"alpha":1.0,"linear":true},{"red":0.1682694,"green":0.38642952,"blue":0.22322798,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[3.5555555555554292,41.333333333333314,-41.333333333333314,3.5555555555554292,1310.6666666666667,380.00000000000006]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9392462024456293097,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1156.9357503463468,509.9999999999987]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[4,[615.7883832488646,605.0000000000001]],[5,[597.1281292110198,599.9999999999999]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,null],[4,null],[5,[447.84609690826574,-119.99999999999989]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9393309733761233513,{"inputs":[{"Node":{"node_id":13946577152348504742,"output_index":0}},{"Node":{"node_id":11895211316848895241,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9409313765472227540,{"inputs":[{"Node":{"node_id":6821938959315178556,"output_index":0}},{"Node":{"node_id":8463468388280418154,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9640215309187299519,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[1268.8972745734306,457.8601932525698]],[2,[1194.2562584220475,517.8601932525687]],[3,[746.4101615137856,637.8601932525706]],[4,[746.4101615137852,657.8601932525711]],[5,[1268.8972745734306,517.8601932525701]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-447.8460969082618,120.00000000000192]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,-60.00000000000029]]],"handle_end":[[1,null],[2,null],[3,[0.0,0.0]],[4,null],[5,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9641315149170593327,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[1,[1313.111111111111,440.66666666666663]],[2,[1297.047751590237,432.45710241679353]],[3,[1311.0123456790122,389.1358024691358]],[4,[1309.432098765432,385.3827160493827]],[5,[1280.0,432.79012345679007]],[6,[1286.7160493827164,380.04205830395256]],[7,[1284.082304526749,376.2304526748971]],[8,[1270.5185185185182,430.0]],[9,[1269.113854595336,397.6954732510288]],[10,[1267.5056400134067,396.48371220183463]],[11,[1259.4489801206926,442.53166286845914]],[12,[1302.7379972565157,443.9615912208504]],[13,[1312.9218106995884,446.85871056241416]],[14,[1325.5637860082304,455.6378600823044]],[15,[1319.4403292181073,447.7366255144034]],[16,[1323.5884773662551,445.96633567616453]],[17,[1343.538290724795,449.4814814814814]],[18,[1327.484998303753,444.1384489176408]],[19,[1353.7580246913572,440.1251028806582]],[20,[1326.2661179698216,436.1481481481482]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,1]],"handle_primary":[[1,[-1.6922078070856514,-5.274941522376082]],[2,[-7.975963753017595,-5.0295761250696955]],[3,null],[4,[-16.197530864197688,14.61728395061732]],[5,[0.0,-30.09785939152056]],[6,null],[7,[-10.798353909464822,37.53086419753089]],[8,[-2.1728395061727497,-5.1111111111111995]],[9,[0.0,0.0]],[10,[-0.14088374697121253,12.961503560065635]],[11,[14.00629256044499,3.614815506799175]],[12,[9.763281342613707,0.018425375535628064]],[13,[0.0,0.0]],[14,[0.7997581306144639,-0.5767761645364544]],[15,[0.05852766346606586,-1.7558299039780536]],[16,[19.75931834024595,4.512540664093933]],[17,[0.17673990847697496,-0.9253757795596016]],[18,[26.44161668001243,-3.0566001241026584]],[19,[-0.162851070793522,-0.9241759662677964]],[20,null]],"handle_end":[[1,[3.0857646420445235,-0.2303077208630384]],[2,null],[3,null],[4,null],[5,null],[6,null],[7,null],[8,[0.0,0.0]],[9,null],[10,[-4.337869009581482,-9.544008547471435]],[11,[-11.251577773519555,-0.02123410547835647]],[12,[0.0,0.0]],[13,[-0.8413105648451165,0.6067432917530482]],[14,[-0.022878726643284608,0.6863617992941045]],[15,null],[16,null],[17,null],[18,null],[19,[1.229080932784882,6.672153635116501]],[20,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9663740787529879916,{"inputs":[{"Node":{"node_id":14633096010607565334,"output_index":0}},{"Node":{"node_id":10651614176902312108,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9666682009015049330,{"inputs":[{"Node":{"node_id":2791109467690716388,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9684750473849891261,{"inputs":[{"Node":{"node_id":70804263053697201,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.9301109,"green":0.66538733,"blue":0.34670407,"alpha":1.0,"linear":true},{"red":0.5906189,"green":0.6071563,"blue":0.3737451,"alpha":1.0,"linear":true},{"red":0.33716366,"green":0.5520115,"blue":0.40197787,"alpha":1.0,"linear":true}],"position":[0.0,0.5772391174087621,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.9301109,"green":0.66538733,"blue":0.34670407,"alpha":1.0,"linear":true},{"red":0.5906189,"green":0.6071563,"blue":0.3737451,"alpha":1.0,"linear":true},{"red":0.33716366,"green":0.5520115,"blue":0.40197787,"alpha":1.0,"linear":true}],"position":[0.0,0.5772391174087621,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.000788022064618,0.0,0.0,1.000788022064618,0.0,0.5000000000000001]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9724746185253267560,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[1091.6248612138966,472.5]],[2,[1063.63448015713,465.0]],[3,[1044.9742261192855,470.0]],[4,[1184.9261314031187,507.5]],[5,[1259.567147554496,487.5]],[6,[1194.256258422041,470.0]],[7,[1138.2754963085074,485.0]],[8,[1184.9261314031187,497.5]],[9,[1222.2466394788075,487.5000000000001]],[10,[1194.2562584220411,480.0]],[11,[1175.5960043841962,485.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9771562518763748677,{"inputs":[{"Node":{"node_id":14234384001010789008,"output_index":0}},{"Node":{"node_id":12554549497938935061,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9798215931018813676,{"inputs":[{"Node":{"node_id":10779665858841986661,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[30.27160493827101,0.0,0.0,30.27160493827101,97.17913571110466,-79.94642851844347]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9908869573449854874,{"inputs":[{"Node":{"node_id":16416441286881083283,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9935922395919478146,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[1,[1317.9649443682358,445.9417771681145]],[2,[1309.8491083676272,442.3520804755373]],[3,[1276.181069958848,406.51851851851853]],[4,[1281.3168724279838,402.0411522633745]],[5,[1303.7037037037037,419.6872427983538]],[6,[1283.8189300411525,381.6296296296296]],[7,[1291.19341563786,379.78600823045264]],[8,[1311.341563786008,420.872427983539]],[9,[1303.5720164609054,369.51440329218104]],[10,[1307.9176954732511,360.6913580246913]],[11,[1318.5843621399176,404.93827160493817]],[12,[1330.9629629629628,378.8641975308641]],[13,[1334.9135802469134,382.9465020576131]],[14,[1320.9547325102878,428.11522633744846]],[15,[1346.7654320987656,379.522633744856]],[16,[1349.7942386831278,385.3168724279836]],[17,[1331.2263374485594,418.633744855967]],[18,[1353.2181069958854,390.3209876543211]],[19,[1353.7448559670786,395.8518518518519]],[20,[1325.5637860082302,441.9423868312756]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,1]],"handle_primary":[[1,[-5.73075474332677,0.190602104454058]],[2,[-1.1927104603494172,-1.8387619597050957]],[3,[-25.9423868312756,-18.304526748971227]],[4,[11.934313314187648,6.04743230718924]],[5,[0.0,0.0]],[6,[-13.958847736625785,-23.967078189300366]],[7,[13.958847736626012,18.304526748971227]],[8,[0.0,0.0]],[9,[-8.427983539094384,-34.502057613168745]],[10,[10.930041152263357,24.88888888888891]],[11,[0.0,0.0]],[12,[8.691358024691226,-13.168724279835374]],[13,[-7.506172839506235,20.67489711934155]],[14,[0.0,0.0]],[15,[17.514403292181214,-18.96296296296299]],[16,[-13.168724279835487,17.382716049382793]],[17,[0.0,0.0]],[18,[14.617283950616866,-16.32921810699594]],[19,[-17.792694511774243,22.05806648377495]],[20,[-0.8876695625660886,2.750800182899013]]],"handle_end":[[1,[1.8728852309102424,2.887364730986178]],[2,[21.160177959832257,14.930277849830986]],[3,[-29.366255144032948,-14.880658436213992]],[4,[0.0,0.0]],[5,[8.275699533270199,14.209219953350214]],[6,[-21.35436745259517,-28.00242524443996]],[7,[0.0,0.0]],[8,[7.512329871725342,30.753600412376215]],[9,[-11.24897964853426,-25.61514642859032]],[10,[0.0,0.0]],[11,[-8.691358024691226,13.168724279835374]],[12,[7.506172839506235,-20.67489711934155]],[13,[0.0,0.0]],[14,[-16.17829033097064,17.51634441849427]],[15,[22.902000000470935,-30.23064000062169]],[16,[0.0,0.0]],[17,[-11.234881916731185,12.550678897970386]],[18,[19.22633744855989,-23.835390946502]],[19,[2.149866795831258,-6.662224576095184]],[20,[6.571889866311722,-0.218577847920983]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9981992739451603109,{"inputs":[{"Node":{"node_id":13852123721901366011,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.022173883,"green":0.06847818,"blue":0.022173883,"alpha":0.59765625,"linear":true},{"red":0.022173883,"green":0.07036011,"blue":0.022173883,"alpha":0.4453125,"linear":true},{"red":0.022173883,"green":0.06301004,"blue":0.022173883,"alpha":0.2109375,"linear":true}],"position":[0.0,0.8744713248939212,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.022173883,"green":0.06847818,"blue":0.022173883,"alpha":0.59765625,"linear":true},{"red":0.022173883,"green":0.07036011,"blue":0.022173883,"alpha":0.4453125,"linear":true},{"red":0.022173883,"green":0.06301004,"blue":0.022173883,"alpha":0.2109375,"linear":true}],"position":[0.0,0.8744713248939212,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-0.960402449584894,-4.389465686028167e-16,0.0,-3.584270737558197,0.4917953695426217,3.516868774843142]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9993538712344947860,{"inputs":[{"Node":{"node_id":15134939288287905620,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.119538434,"green":0.30054384,"blue":0.2874409,"alpha":1.0,"linear":true},{"red":0.119538434,"green":0.30054384,"blue":0.2917707,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.119538434,"green":0.30054384,"blue":0.2874409,"alpha":1.0,"linear":true},{"red":0.119538434,"green":0.30054384,"blue":0.2917707,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[30.450841897898517,0.0,0.0,30.450841897898517,1226.9629629629628,509.33333333333326]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10181153433637856462,{"inputs":[{"Node":{"node_id":9150078008481575131,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[187.102540378,187.10254037799996]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.205080756,373.205080756]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10188337730058049439,{"inputs":[{"Node":{"node_id":1268775104597510914,"output_index":0}},{"Node":{"node_id":11076863066321508991,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10189927996178548902,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[298.56406460551045,540.0000000000002]],[2,[298.5640646055101,570.0000000000006]],[3,[597.1281292110203,649.9999999999999]],[4,[597.1281292110198,630.0]],[5,[709.0896534380867,660.0]],[6,[709.0896534380864,649.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-5.684341886080801e-13,-19.999999999999886]],[4,[0.0,0.0]],[5,[-2.273736754432321e-13,-10.000000000000114]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10431241258085047322,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[298.56406460551034,479.99999999999983]],[2,[597.1281292110192,559.9999999999998]],[3,[597.1281292110202,599.9999999999999]],[4,[709.0896534380863,630.0]],[5,[709.0896534380863,649.9999999999999]],[6,[298.56406460551045,540.0000000000001]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10477328336261010694,{"inputs":[{"Node":{"node_id":10189927996178548902,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970024,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10507084483235320484,{"inputs":[{"Node":{"node_id":9157963288496356916,"output_index":0}},{"Node":{"node_id":1396768435017101055,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10564228200140683112,{"inputs":[{"Node":{"node_id":13001069903842109798,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-140.23409378379097,-66.17529531267506]},"exposed":false}},{"Value":{"tagged_value":{"F64":-66.17233335779959},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[61.12160376625298,24.813625019997943]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-31.95064812348834,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10651614176902312108,{"inputs":[{"Node":{"node_id":4134257789770357215,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.14412849,"green":0.35640025,"blue":0.32314324,"alpha":1.0,"linear":true},{"red":0.18447497,"green":0.44520125,"blue":0.35640025,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.33245158,"blue":0.31854683,"alpha":1.0,"linear":true},{"red":0.11443538,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}],"position":[0.0,0.869076264787314,0.9670173672287944,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.14412849,"green":0.35640025,"blue":0.32314324,"alpha":1.0,"linear":true},{"red":0.18447497,"green":0.44520125,"blue":0.35640025,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.33245158,"blue":0.31854683,"alpha":1.0,"linear":true},{"red":0.11443538,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}],"position":[0.0,0.869076264787314,0.9670173672287944,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[540.3483949723926,-2.8421709430404014e-14,2.8421709430404014e-14,540.3483949723926,748.8089485570027,648.8589703924824]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10742991645899166287,{"inputs":[{"Node":{"node_id":1104068854328504126,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053887,-120.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10779665858841986661,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[98.808765340734,-112.29086885060116]],[2,[97.17913571110468,-93.86098831945704]],[3,[122.7099999086348,-47.60198818628578]],[4,[127.45074064937567,-74.14101615113282]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-5.92592592592608,-17.692685309898252]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10810157408196882043,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1231.576766497731,510.00000000000233]],[2,[1231.5767664977286,540.0]],[3,[1306.217782649106,559.9999999999999]],[4,[1306.2177826491084,530.0000000000023]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[-6.821210263296962e-13,-1.1368683772161605e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10849502918952703647,{"inputs":[{"Node":{"node_id":9663740787529879916,"output_index":0}},{"Node":{"node_id":17433098630591807963,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10917301734480569398,{"inputs":[{"Node":{"node_id":3455270778005546310,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10989897386232385465,{"inputs":[{"Node":{"node_id":10507084483235320484,"output_index":0}},{"Node":{"node_id":7339104629465306715,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11076863066321508991,{"inputs":[{"Node":{"node_id":8891726805381758817,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.1092171365545098,0.0,0.0,1.1092171365545098,-0.10921713655450987,0.5063043384061539]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11158238411769751544,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":14124486712683868036,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11221222899304956410,{"inputs":[{"Node":{"node_id":5448146793323825465,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11429712783984224234,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":12302362769310895852,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11450962621506425680,{"inputs":[{"Node":{"node_id":514222872092587805,"output_index":0}},{"Node":{"node_id":4197544064668946479,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11479492521093639512,{"inputs":[{"Node":{"node_id":15216519480392295991,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Lighten"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11490835759023283071,{"inputs":[{"Node":{"node_id":16923062582661131268,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11506204916439878896,{"inputs":[{"Node":{"node_id":2640491057355360805,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11547499603328872398,{"inputs":[{"Node":{"node_id":8343201730608263656,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11579925754926059876,{"inputs":[{"Node":{"node_id":15670426414376277308,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[914.352447854139,315.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[410.52558883186134,109.99999999999974]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11595529463602678384,{"inputs":[{"Node":{"node_id":4398598693761352299,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11634445349252640936,{"inputs":[{"Node":{"node_id":2032185045476767535,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[708.5896534382083,269.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,0.267949192432]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11634802583144606404,{"inputs":[{"Node":{"node_id":9226731772122225003,"output_index":0}},{"Node":{"node_id":7884283658260267478,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11776939455674933130,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":9684750473849891261,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11860177410232537211,{"inputs":[{"Node":{"node_id":5882319123081134737,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11895211316848895241,{"inputs":[{"Node":{"node_id":10742991645899166287,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21586053,"green":0.47932023,"blue":0.34670407,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21586053,"green":0.47932023,"blue":0.34670407,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[186.60254037844425,0.0,0.0,186.60254037844425,1343.5382907247958,525.0000000000011]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11990662272042254522,{"inputs":[{"Node":{"node_id":1147521068928676110,"output_index":0}},{"Node":{"node_id":15167880819976070791,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12019361655085452072,{"inputs":[{"Node":{"node_id":2036609094647228373,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1080.8351529382842,378.98352292316827]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.0038859407525,220.57244110912933]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.003011245448756e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12302362769310895852,{"inputs":[{"Node":{"node_id":15347111149235590492,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.6062657,"green":0.63883054,"blue":0.3602605,"alpha":1.0,"linear":true},{"red":0.44865155,"green":0.54719424,"blue":0.28927982,"alpha":1.0,"linear":true},{"red":0.31854683,"green":0.46207705,"blue":0.27467737,"alpha":1.0,"linear":true},{"red":0.18782076,"green":0.3813261,"blue":0.2462014,"alpha":1.0,"linear":true},{"red":0.13563335,"green":0.33245158,"blue":0.23074007,"alpha":1.0,"linear":true},{"red":0.057805434,"green":0.23074007,"blue":0.19120166,"alpha":1.0,"linear":true}],"position":[0.0,0.4047792425110607,0.6425390774124099,0.8010456340133093,0.894708599277477,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.6062657,"green":0.63883054,"blue":0.3602605,"alpha":1.0,"linear":true},{"red":0.44865155,"green":0.54719424,"blue":0.28927982,"alpha":1.0,"linear":true},{"red":0.31854683,"green":0.46207705,"blue":0.27467737,"alpha":1.0,"linear":true},{"red":0.18782076,"green":0.3813261,"blue":0.2462014,"alpha":1.0,"linear":true},{"red":0.13563335,"green":0.33245158,"blue":0.23074007,"alpha":1.0,"linear":true},{"red":0.057805434,"green":0.23074007,"blue":0.19120166,"alpha":1.0,"linear":true}],"position":[0.0,0.4047792425110607,0.6425390774124099,0.8010456340133093,0.894708599277477,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-0.6280229858611819,-7.706107293371535e-17,2.465190328815662e-32,-0.6292514134472751,0.5027713289486063,0.6581287661256529]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12331680982485935376,{"inputs":[{"Node":{"node_id":2183401450260403525,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.6313726,"linear":true},{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.6313726,"linear":true},{"red":0.30498737,"green":0.3515327,"blue":0.13013649,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[23.992379011075172,89.54077746378124,-89.54077746378124,23.992379011075172,1232.4286852860116,509.8553655459547]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12360435709959435360,{"inputs":[{"Node":{"node_id":15723520455917422372,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.19461781,"green":0.4910209,"blue":0.2831488,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.3662527,"blue":0.19120166,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.19461781,"green":0.4910209,"blue":0.2831488,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.3662527,"blue":0.19120166,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.03010866848740079,54.84537877648688,-54.84537877648688,0.03010866848740079,601.2182244170343,447.3706264136704]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12370676490908282512,{"inputs":[{"Node":{"node_id":9666682009015049330,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.20863685,"blue":0.22696589,"alpha":0.5019608,"linear":true},{"red":0.06124607,"green":0.21586053,"blue":0.23455065,"alpha":0.17254902,"linear":true},{"red":0.0,"green":1.0,"blue":1.0,"alpha":0.003921569,"linear":true}],"position":[0.0,0.643741535074667,0.8214781907174007,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.20863685,"blue":0.22696589,"alpha":0.5019608,"linear":true},{"red":0.06124607,"green":0.21586053,"blue":0.23455065,"alpha":0.17254902,"linear":true},{"red":0.0,"green":1.0,"blue":1.0,"alpha":0.003921569,"linear":true}],"position":[0.0,0.643741535074667,0.8214781907174007,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[4.209241704032138,40.39274118587963,-40.39274118587963,4.209241704032138,1052.889473021082,481.8527922453704]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12469956387875933942,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":2881239077602364410,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12537712543904859919,{"inputs":[{"Node":{"node_id":4968550668755026811,"output_index":0}},{"Node":{"node_id":8508454285877707748,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12548387328300782726,{"inputs":[{"Node":{"node_id":764189229787475993,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[173.41101516874107,-7.105427357601002e-15,7.105427357601002e-15,173.41101516874107,616.4787251736955,439.11304174611325]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12554549497938935061,{"inputs":[{"Node":{"node_id":14055195208113082127,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[833.274364370262,-33.56362500933909]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.8,-0.6]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[7.016709298534876e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12683405703338263457,{"inputs":[{"Node":{"node_id":12537712543904859919,"output_index":0}},{"Node":{"node_id":14449710315388146362,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12852312236973354891,{"inputs":[{"Node":{"node_id":8181290118694677328,"output_index":0}},{"Node":{"node_id":2921219300441868542,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12875121980058869686,{"inputs":[{"Node":{"node_id":13747030364552895864,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12930243402848966353,{"inputs":[{"Node":{"node_id":7948029953091985757,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[895.6921938163274,310.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.2050807562376,99.99999999999976]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12931264630175648107,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[1492.820323027551,460.0000000000025]],[2,[1531.2435565296985,470.3]],[3,[1531.243556529699,704.9999999999997]],[4,[261.24355652969956,704.9999999999997]],[5,[261.2435565296994,530.0000000000001]],[6,[298.56406460551034,520.0000000000002]],[7,[298.56406460551045,540.0000000000001]],[8,[709.0896534380863,649.9999999999999]],[9,[1231.576766497731,510.0000000000024]],[10,[1306.2177826491086,530.0000000000023]],[11,[1492.8203230275508,480.0000000000001]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12998832508553378533,{"inputs":[{"Node":{"node_id":3122972215852775755,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.18447497,"green":0.45078585,"blue":0.38642952,"alpha":1.0,"linear":true},{"red":0.16513222,"green":0.42326772,"blue":0.35640025,"alpha":1.0,"linear":true},{"red":0.13843162,"green":0.3515327,"blue":0.31854683,"alpha":1.0,"linear":true}],"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.18447497,"green":0.45078585,"blue":0.38642952,"alpha":1.0,"linear":true},{"red":0.16513222,"green":0.42326772,"blue":0.35640025,"alpha":1.0,"linear":true},{"red":0.13843162,"green":0.3515327,"blue":0.31854683,"alpha":1.0,"linear":true}],"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[404.27541897008257,122.85928732422236,-122.85928732422236,404.27541897008257,300.68299245776245,518.8255689888956]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13001069903842109798,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.02964805558748984,0.4451546735104888]],[2,[1.067391838882569,0.5169672994595966]],[3,[1.0311603768047983,1.0082447817061446]],[4,[0.15793848790232112,1.0756444843098496]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-0.4856258676143469,-0.19200483651697595]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13207576193421440093,{"inputs":[{"Node":{"node_id":12930243402848966353,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.2831488,"green":0.50888145,"blue":0.38642952,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.2831488,"green":0.50888145,"blue":0.38642952,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13287180494862716983,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[765.07041555162,525.0]],[2,[783.7306695894645,520.0]],[3,[811.7210506462309,527.5]],[4,[830.3813046840751,522.5]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13442128106088307772,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":13700218159488557234,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13531127678140037818,{"inputs":[{"Node":{"node_id":3970872207068447290,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[18.074074074074133,0.0,0.0,18.074074074074133,-137.83320996790803,42.520127611008206]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13609749019463823009,{"inputs":[{"Node":{"node_id":2062662104423219162,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.09989874,"green":0.27889434,"blue":0.2831488,"alpha":1.0,"linear":true},{"red":0.09989874,"green":0.27889434,"blue":0.2831488,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.09989874,"green":0.27889434,"blue":0.2831488,"alpha":1.0,"linear":true},{"red":0.09989874,"green":0.27889434,"blue":0.2831488,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-9.548830446270811,35.636720378343966,-35.636720378343966,-9.548830446270811,1277.7809612621757,523.3659137612484]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13696921450692276893,{"inputs":[{"Node":{"node_id":729026403095264425,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}],"position":[0.0,0.9059757781988896,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}],"position":[0.0,0.9059757781988896,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[217.29845897826567,-7.105427357601002e-15,7.105427357601002e-15,217.29845897826567,1097.073492861303,299.163664081673]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13700218159488557234,{"inputs":[{"Node":{"node_id":10181153433637856462,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}],"position":[0.0,0.4831746395427087,0.49908141270537343,0.5160486374122156,0.65708869278784,0.6729954659505047,0.6899626906573468,0.7291993977919214,0.7440457194104085,0.7588920410288952,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}],"position":[0.0,0.4831746395427087,0.49908141270537343,0.5160486374122156,0.65708869278784,0.6729954659505047,0.6899626906573468,0.7291993977919214,0.7440457194104085,0.7588920410288952,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-0.4991103632473921,-6.112339087721917e-17,4.474542765298796e-17,-0.4991103632473921,0.5008896367526081,0.4999999999999996]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13701442050580061197,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1268.897274573418,500.00000000000006]],[2,[1343.5382907247958,520.0000000000001]],[3,[1530.14083110324,469.9999999999986]],[4,[1380.8587988003635,429.9999999999991]],[5,[1380.8587988003635,469.9997827307588]],[6,[1380.8587988003635,469.9999999999993]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0002172692405224552]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,null],[5,null],[6,[4.547473508864641e-13,5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13743495762122910279,{"inputs":[{"Node":{"node_id":322234583139821148,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.07818743,"green":0.26225072,"blue":0.27049786,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.07818743,"green":0.26225072,"blue":0.27049786,"alpha":1.0,"linear":true},{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[98.39323426041926,21.97130473776349,-21.97130473776349,98.39323426041926,714.5450410368313,418.41006413654026]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13747030364552895864,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[709.0896534380864,650.0]],[2,[1231.576766497729,510.00000000000233]],[3,[1231.6308657449686,540.0144958496094]],[4,[1156.9357503463516,540.0]],[5,[709.0896534380863,660.0]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-74.69511539861696,-0.014495849609375]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,[0.0,0.0]],[5,[-2.273736754432321e-13,-2.273736754432321e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13817976820605296433,{"inputs":[{"Node":{"node_id":4837219841531371489,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13837327017498431546,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[662.4390183434757,547.5]],[2,[774.4005425705423,577.5]],[3,[746.4101615137756,585.0]],[4,[718.419780457009,577.5]],[5,[802.3909236273089,554.9999999999999]],[6,[765.07041555162,544.9999999999999]],[7,[634.4486372867094,580.0000000000001]],[8,[727.7499074759312,605.0]],[9,[1063.63448015713,515.0000000000001]],[10,[914.3524478543748,475.0]],[11,[858.3716857408417,490.0]],[12,[1287.5575286112626,604.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13852123721901366011,{"inputs":[{"Node":{"node_id":456239140723765386,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[819.6941583984747,299.6363877833991]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.20900992053447,59.27277556679853]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13853529851208960143,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-39.199465111941095,125.88462054688308]],[2,[28.09271595801783,129.8163283935271]],[3,[29.146213900404632,142.10291541428978]],[4,[-40.648024782723304,138.90840278889075]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[-37.794238683127446,8.35487917411865]],[2,[0.0,0.0]],[3,[27.65672806576993,9.286366023261053]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13861850149743924125,{"inputs":[{"Node":{"node_id":13442128106088307772,"output_index":0}},{"Node":{"node_id":5891705401441266824,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13868917743026516656,{"inputs":[{"Node":{"node_id":5258402282444994019,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.89626944,"green":0.6583749,"blue":0.20863685,"alpha":1.0,"linear":true},{"red":0.32314324,"green":0.5583405,"blue":0.33245158,"alpha":1.0,"linear":true},{"red":0.19608434,"green":0.4751555,"blue":0.30076632,"alpha":1.0,"linear":true}],"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.89626944,"green":0.6583749,"blue":0.20863685,"alpha":1.0,"linear":true},{"red":0.32314324,"green":0.5583405,"blue":0.33245158,"alpha":1.0,"linear":true},{"red":0.19608434,"green":0.4751555,"blue":0.30076632,"alpha":1.0,"linear":true}],"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[429.33192665655974,-2.8421709430404014e-14,2.8421709430404014e-14,429.33192665655974,1378.2465619988443,336.3515021544947]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13920465562072008593,{"inputs":[{"Node":{"node_id":3670594928372882885,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13942146309185231085,{"inputs":[{"Node":{"node_id":15166516760575860563,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.111932434,"green":0.2874409,"blue":0.17464739,"alpha":1.0,"linear":true},{"red":0.17464739,"green":0.46207705,"blue":0.30054384,"alpha":1.0,"linear":true},{"red":1.0,"green":0.68668544,"blue":0.18116423,"alpha":1.0,"linear":true}],"position":[0.0,0.2134053325596848,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.111932434,"green":0.2874409,"blue":0.17464739,"alpha":1.0,"linear":true},{"red":0.17464739,"green":0.46207705,"blue":0.30054384,"alpha":1.0,"linear":true},{"red":1.0,"green":0.68668544,"blue":0.18116423,"alpha":1.0,"linear":true}],"position":[0.0,0.2134053325596848,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-5.020401833688084,-41.8975353029611,41.8975353029611,-5.020401833688084,517.1612264010163,481.698518566117]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13942787566051910019,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.000788022064618,-6.266203653947348e-16]],[3,[1.000788022064618,1.0000000000000009]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13946577152348504742,{"inputs":[{"Node":{"node_id":3021739385836969518,"output_index":0}},{"Node":{"node_id":15876464101883822838,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14019233912018234740,{"inputs":[{"Node":{"node_id":16069762220015310717,"output_index":0}},{"Node":{"node_id":17887542695709892422,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14055195208113082127,{"inputs":[{"Node":{"node_id":2510483139353274965,"output_index":0}},{"Node":{"node_id":12360435709959435360,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14102693648424950146,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":16847360882244487081,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14124486712683868036,{"inputs":[{"Node":{"node_id":14449527838292182035,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1660875,"green":0.4637225,"blue":0.32023078,"alpha":1.0,"linear":true},{"red":0.15480843,"green":0.4249792,"blue":0.28720212,"alpha":0.85546875,"linear":true},{"red":0.14353022,"green":0.40372068,"blue":0.25983277,"alpha":0.3515625,"linear":true}],"position":[0.0,0.31019165912642926,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1660875,"green":0.4637225,"blue":0.32023078,"alpha":1.0,"linear":true},{"red":0.15480843,"green":0.4249792,"blue":0.28720212,"alpha":0.85546875,"linear":true},{"red":0.14353022,"green":0.40372068,"blue":0.25983277,"alpha":0.3515625,"linear":true}],"position":[0.0,0.31019165912642926,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[32.669270073466016,3.552713678800501e-15,-3.552713678800501e-15,32.669270073466016,712.5925925925926,591.7037037037037]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14202574750104046500,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":1831743139584171612,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14234384001010789008,{"inputs":[{"Node":{"node_id":4757672276235057645,"output_index":0}},{"Node":{"node_id":8863202447825570192,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14255588039347536657,{"inputs":[{"Node":{"node_id":18185020559178852986,"output_index":0}},{"Node":{"node_id":5261200785298607501,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14330881008352607546,{"inputs":[{"Node":{"node_id":11595529463602678384,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.33716366,"blue":0.30946898,"alpha":0.5019608,"linear":true},{"red":0.21952623,"green":0.4910209,"blue":0.3662527,"alpha":0.0,"linear":true}],"position":[0.0,0.7251131221719457,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.06124607,"green":0.22322798,"blue":0.2581829,"alpha":1.0,"linear":true},{"red":0.1274377,"green":0.33716366,"blue":0.30946898,"alpha":0.5019608,"linear":true},{"red":0.21952623,"green":0.4910209,"blue":0.3662527,"alpha":0.0,"linear":true}],"position":[0.0,0.7251131221719457,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0629903008048132,22.322796316901588,-22.322796316901588,1.0629903008048132,782.6266089675632,450.7078875412521]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14341957170885045113,{"inputs":[{"Node":{"node_id":12469956387875933942,"output_index":0}},{"Node":{"node_id":7952384394377946257,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14400993470150734626,{"inputs":[{"Node":{"node_id":2088390810384907709,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-69.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14449527838292182035,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[1,[699.8518518518516,598.1234567901233]],[2,[667.3909465020577,593.3827160493828]],[3,[699.7421124828531,603.0617283950616]],[4,[682.3593964334707,606.4197530864195]],[5,[662.6063100137173,612.5432098765428]],[6,[695.3964334705074,609.7777777777776]],[7,[692.1871665904588,615.6720012193263]],[8,[701.8247218411828,611.4580094497792]],[9,[709.3552812071331,611.4970278920897]],[10,[709.413808870599,616.4718792866942]],[11,[713.6278006401462,612.5505258344765]],[12,[721.9094650205761,611.3799725651577]],[13,[734.8148148148149,620.9492455418381]],[14,[728.493827160494,609.9753086419753]],[15,[763.4567901234569,605.6296296296294]],[16,[726.2990397805214,601.9862825788753]],[17,[749.8271604938273,587.4567901234568]],[18,[725.5089163237311,594.6117969821673]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,1]],"handle_primary":[[1,[-13.651577503429507,-4.016460905349504]],[2,[5.399176954732297,6.584362139917744]],[3,[0.0,0.0]],[4,[-6.038618148571572,2.2123832635880945]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[1.0398530837227329,0.17152215813985094]],[10,[2.71082158531226,-3.275875783141601]],[11,[0.9510922553114368,-0.40840938602514143]],[12,[0.6886396813392821,0.35058484628291353]],[13,[-3.101966163694442,-4.096936442615402]],[14,[-0.1771601410563335,-2.331086581557088]],[15,[-15.992684042066571,-5.647919524462736]],[16,[0.0,0.0]],[17,[-7.648317030623161,4.388047332817109]],[18,[-0.0877914951989851,0.0]]],"handle_end":[[1,[8.559670781892919,2.502057613168745]],[2,[0.0,0.0]],[3,[6.038618148571345,-2.2123832635879808]],[4,[0.0,0.0]],[5,[-8.69135802469134,3.3580246913579685]],[6,[4.13595488492615,-4.1749733272365575]],[7,[-5.1358024691359105,5.530864197530718]],[8,[-3.7847889041303233,-0.6242950769699291]],[9,null],[10,null],[11,[-1.2025737194898056,-0.6122274594622468]],[12,[-6.90626428898031,-2.3996342021031296]],[13,[-0.5267489711934559,1.053497942386798]],[14,[-22.51851851851859,-0.614540466392441]],[15,[2.8483462886752022,1.1315348270080676]],[16,[-5.977212841894016,7.381559383908893]],[17,null],[18,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14449710315388146362,{"inputs":[{"Node":{"node_id":7671691070850213967,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":81.1788},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14483299526002574058,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1156.9357503463516,540.0]],[2,[1156.9357503463518,589.9999999999999]],[3,[933.0127018922192,649.9999999999999]],[4,[839.7114317029976,625.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[2.273736754432321e-13,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14633096010607565334,{"inputs":[{"Node":{"node_id":18046677540207938977,"output_index":0}},{"Node":{"node_id":12370676490908282512,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14752203606937854133,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[597.1281292110193,599.9999999999997]],[2,[597.1281292110197,559.9999999999997]],[3,[1044.9742261192855,439.99999999999994]],[4,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14791465604033956302,{"inputs":[{"Node":{"node_id":18187802220803838247,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14805036488257720752,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[849.0415587219195,592.5000000000001]],[2,[877.0319397786857,585.0]],[3,[895.6921938165301,590.0]],[4,[942.3428289111416,577.5]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14842592386831797498,{"inputs":[{"Node":{"node_id":664587514588499648,"output_index":0}},{"Node":{"node_id":14330881008352607546,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15134939288287905620,{"inputs":[{"Node":{"node_id":8958782938691501404,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15157035456876170143,{"inputs":[{"Node":{"node_id":17059035448296015006,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15166516760575860563,{"inputs":[{"Node":{"node_id":18085100003956405261,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-36.95875397623445,-115.11453403741598]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.442673035713692,1.442673035713692]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15167880819976070791,{"inputs":[{"Node":{"node_id":4898866541060902381,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":33.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15216519480392295991,{"inputs":[{"Node":{"node_id":12019361655085452072,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.5972019,"green":0.5394796,"blue":0.2874409,"alpha":0.01,"linear":true},{"red":0.40197787,"green":0.40197787,"blue":0.40197787,"alpha":0.011764706,"linear":true},{"red":0.5972019,"green":0.5394796,"blue":0.2874409,"alpha":0.53515625,"linear":true},{"red":0.92158204,"green":0.5394796,"blue":0.27049786,"alpha":1.0,"linear":true}],"position":[0.0,0.6837652235970189,0.7972664177223364,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.5972019,"green":0.5394796,"blue":0.2874409,"alpha":0.01,"linear":true},{"red":0.40197787,"green":0.40197787,"blue":0.40197787,"alpha":0.011764706,"linear":true},{"red":0.5972019,"green":0.5394796,"blue":0.2874409,"alpha":0.53515625,"linear":true},{"red":0.92158204,"green":0.5394796,"blue":0.27049786,"alpha":1.0,"linear":true}],"position":[0.0,0.6837652235970189,0.7972664177223364,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-0.6337961423750527,-6.938893903907227e-17,2.7755575615628914e-17,-0.6350358623897354,0.5377061694297174,0.32181501263817824]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15261165353096835967,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1156.9357503463468,509.9999999999987]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[4,[615.7883832488644,605.0000000000001]],[5,[597.1281292110198,599.9999999999999]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,null],[4,null],[5,[447.84609690826574,-119.99999999999989]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15300421479077882117,{"inputs":[{"Node":{"node_id":7030585744407664630,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[261.2435565298224,0.0,0.0,261.2435565298224,1268.8972745734177,474.9999999999996]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15347111149235590492,{"inputs":[{"Node":{"node_id":2209276411833629008,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1080.8351529382842,378.9835229231682]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.0038859407525,220.57244110912933]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.003011245448756e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15478704582542175684,{"inputs":[{"Node":{"node_id":8242413775403456296,"output_index":0}},{"Node":{"node_id":13696921450692276893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15488533792651297821,{"inputs":[{"Node":{"node_id":14019233912018234740,"output_index":0}},{"Node":{"node_id":17965270694495451178,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15517065353723874205,{"inputs":[{"Node":{"node_id":3616319631707471648,"output_index":0}},{"Node":{"node_id":12548387328300782726,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15595689026000825531,{"inputs":[{"Node":{"node_id":2785423879796980286,"output_index":0}},{"Node":{"node_id":13287180494862716983,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15670426414376277308,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15709488322180832347,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}},"exposed":true}},{"Node":{"node_id":7838724497953148309,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1270.0,635.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.26635566,"green":0.5711249,"blue":0.46207705,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"Generic":"T"}]},"import_index":1}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":2}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":3}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":4}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15723520455917422372,{"inputs":[{"Node":{"node_id":4187349759243468746,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[55.4066256813212,75.48692492726542]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.093432966432927,1.093432966432927]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15775513677915164685,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[1,[699.8518518518516,598.1234567901233]],[2,[667.3909465020577,593.3827160493828]],[3,[699.7421124828531,603.0617283950616]],[4,[682.3593964334707,606.4197530864195]],[5,[662.6063100137173,612.5432098765428]],[6,[695.3964334705074,609.7777777777776]],[7,[692.1871665904588,615.6720012193263]],[8,[701.8247218411828,611.4580094497792]],[9,[709.3552812071331,611.4970278920897]],[10,[709.413808870599,616.4718792866942]],[11,[713.6278006401462,612.5505258344765]],[12,[721.9094650205761,611.3799725651577]],[13,[734.8148148148149,620.9492455418381]],[14,[728.493827160494,609.9753086419753]],[15,[763.4567901234569,605.6296296296294]],[16,[726.2990397805214,601.9862825788753]],[17,[749.8271604938273,587.4567901234568]],[18,[725.5089163237311,594.6117969821673]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,1]],"handle_primary":[[1,[-13.651577503429507,-4.016460905349504]],[2,[5.399176954732297,6.584362139917744]],[3,[0.0,0.0]],[4,[-6.038618148571572,2.2123832635880945]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[1.0398530837227329,0.17152215813985094]],[10,[2.71082158531226,-3.275875783141601]],[11,[0.9510922553114368,-0.40840938602514143]],[12,[0.6886396813392821,0.35058484628291353]],[13,[-3.101966163694442,-4.096936442615402]],[14,[-0.1771601410563335,-2.331086581557088]],[15,[-15.992684042066571,-5.647919524462736]],[16,[0.0,0.0]],[17,[-7.648317030623161,4.388047332817109]],[18,[-0.0877914951989851,0.0]]],"handle_end":[[1,[8.559670781892919,2.502057613168745]],[2,[0.0,0.0]],[3,[6.038618148571345,-2.2123832635879808]],[4,[0.0,0.0]],[5,[-8.69135802469134,3.3580246913579685]],[6,[4.13595488492615,-4.1749733272365575]],[7,[-5.1358024691359105,5.530864197530718]],[8,[-3.7847889041303233,-0.6242950769699291]],[9,null],[10,null],[11,[-1.2025737194898056,-0.6122274594622468]],[12,[-6.90626428898031,-2.3996342021031296]],[13,[-0.5267489711934559,1.053497942386798]],[14,[-22.51851851851859,-0.614540466392441]],[15,[2.8483462886752022,1.1315348270080676]],[16,[-5.977212841894016,7.381559383908893]],[17,null],[18,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15876464101883822838,{"inputs":[{"Node":{"node_id":3227544593834141716,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.090841725,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.090841725,"green":0.27889434,"blue":0.26635566,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[74.64101615137815,0.0,0.0,74.64101615137815,1268.897274573418,539.9999999999999]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15898396405528650339,{"inputs":[{"Node":{"node_id":16807867745126764195,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[895.6921938163268,320.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.2050807562376,99.99999999999976]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.8801215900696402e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15914878146223026034,{"inputs":[{"Node":{"node_id":4069478660487729695,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[39.06014871394696,-80.31594690033606]},"exposed":false}},{"Value":{"tagged_value":{"F64":-25.25081979598717},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.7021527212517815,1.4014617956106905]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-40.69754959903115,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16059265180575745658,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[1194.256258422041,635.0]],[2,[1044.9742261192855,594.9999999999999]],[3,[1100.9549882328188,580.0]],[4,[1082.2947341949744,575.0]],[5,[839.7114317029977,640.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,5]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16069762220015310717,{"inputs":[{"Node":{"node_id":16398743435291795904,"output_index":0}},{"Node":{"node_id":14791465604033956302,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16229837691656808412,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[74.85684586229115,93.12923138495351]],[2,[76.83345669875837,107.20900827532364]],[3,[130.01864188394373,17.639788893964138]],[4,[119.2038270691288,10.452135486817724]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-7.85185185185199,56.395434425300664]],[3,[0.0,0.0]],[4,[43.97876382175265,-36.84748630595526]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16244305414728361140,{"inputs":[{"Node":{"node_id":11547499603328872398,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.2422812,"green":0.5209957,"blue":0.39157256,"alpha":1.0,"linear":true},{"red":0.18447497,"green":0.44520125,"blue":0.34670407,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.2422812,"green":0.5209957,"blue":0.39157256,"alpha":1.0,"linear":true},{"red":0.18447497,"green":0.44520125,"blue":0.34670407,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[330.0,83.99999999999994,-83.99999999999994,330.0,600.0,357.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16398743435291795904,{"inputs":[{"Node":{"node_id":5574499968250848265,"output_index":0}},{"Node":{"node_id":14255588039347536657,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16416441286881083283,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1306.217782649107,559.9999999999999]],[2,[1492.8203230275508,509.99999999999994]],[3,[1492.8203230275506,480.00000000000006]],[4,[1306.2177826491068,529.9999999999972]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16510804133693080967,{"inputs":[{"Node":{"node_id":3966971396176820223,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16564941800301062922,{"inputs":[{"Node":{"node_id":18371793711669837037,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.03,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.03,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[111.9615242270654,0.0,0.0,111.9615242270654,1231.57676649773,440.0210291519774]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16727310898641763441,{"inputs":[{"Node":{"node_id":13920465562072008593,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.1412633,"green":0.3662527,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.1412633,"green":0.3662527,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[111.96152422706643,0.0,0.0,111.96152422706643,559.8076211353315,455.00000000000006]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16732345645494316637,{"inputs":[{"Node":{"node_id":11450962621506425680,"output_index":0}},{"Node":{"node_id":4740496570730418920,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16793555741218543212,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[559.7618537735666,489.9877366723751]],[2,[634.4486372867091,470.00000000000006]],[3,[783.7306695894638,509.9999999999999]],[4,[597.1281292110201,559.9999999999999]],[5,[298.56406460551005,480.00000000000006]],[6,[410.5255888325765,450.0000000000001]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[149.28203230275471,39.99999999999983]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,null],[2,null],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16807867745126764195,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16847360882244487081,{"inputs":[{"Node":{"node_id":13817976820605296433,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.8879232,"green":0.83076996,"blue":0.50888145,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.8879232,"green":0.83076996,"blue":0.50888145,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[257.03821846965366,66.64251135605264,-66.64251135605264,257.03821846965366,1080.576889863033,251.33333333333337]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16852951849051795674,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[1156.9357503463525,530.0]],[2,[1156.9357503463518,590.0]],[3,[933.0127018922192,650.0]],[4,[933.0127018922192,670.0]],[5,[1343.5382907247958,560.0]],[6,[1343.5382907247958,520.0]],[7,[1306.2177826491068,529.9999999999972]],[8,[1231.576766497731,510.0000000000022]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,null],[3,[0.0,20.0]],[4,[0.0,0.0]],[5,null],[6,null],[7,[-74.64101615137588,-19.99999999999494]],[8,[0.0,0.0]]],"handle_end":[[1,null],[2,null],[3,null],[4,null],[5,null],[6,null],[7,null],[8,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16923062582661131268,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[597.1281292110202,399.9999999999999]],[2,[597.1281292110202,409.99999999999994]],[3,[653.1088913245534,424.99999999999994]],[4,[671.769145362398,420.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17059035448296015006,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[709.0896534380867,469.99999999999994]],[2,[821.0511776651531,500.0]],[3,[933.0127018922194,470.0]],[4,[821.0511776651532,440.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17332567356044944766,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[-0.10921713655450987,1.0126086768123077]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17433098630591807963,{"inputs":[{"Node":{"node_id":11490835759023283071,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.43965724,"blue":0.3515327,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.20507872,"green":0.43965724,"blue":0.3515327,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[74.64101615137781,0.0,0.0,74.64101615137781,597.1281292110202,412.4999999999999]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17533670083736420411,{"inputs":[{"Node":{"node_id":7005645574203740491,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}],"position":[0.0,0.8397260273972602,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":1.0,"linear":true},{"red":0.05951124,"green":0.20863685,"blue":0.22696589,"alpha":0.0,"linear":true}],"position":[0.0,0.8397260273972602,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[70.38003300365364,2.1316282072803012e-14,-2.1316282072803012e-14,70.38003300365364,1140.7715561541318,440.7621960978579]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17638504852426495381,{"inputs":[{"Node":{"node_id":17881728913029763313,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.9386859,"green":0.7304609,"blue":0.40197787,"alpha":1.0,"linear":true},{"red":0.9559735,"green":0.87962234,"blue":0.45641106,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[353.48615278178994,0.0,0.0,353.48615278178994,655.8022889203534,538.5024443400456]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17873337220577786871,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1156.9357503463468,509.9999999999987]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[4,[615.7883832488646,605.0000000000001]],[5,[597.1281292110198,599.9999999999999]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,null],[4,null],[5,[447.84609690826574,-119.99999999999989]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,null],[5,null],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17881728913029763313,{"inputs":[{"Node":{"node_id":16793555741218543212,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17887542695709892422,{"inputs":[{"Node":{"node_id":14842592386831797498,"output_index":0}},{"Node":{"node_id":7259756719760382667,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17965270694495451178,{"inputs":[{"Node":{"node_id":9409313765472227540,"output_index":0}},{"Node":{"node_id":4887570735033124574,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18011777376689315137,{"inputs":[{"Node":{"node_id":10564228200140683112,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.037743783295079,0.0,0.0,1.037743783295079,0.02964805558748984,0.7603995789101692]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18046677540207938977,{"inputs":[{"Node":{"node_id":2189393878093040029,"output_index":0}},{"Node":{"node_id":2292399603649738346,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18085100003956405261,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[1,[510.41975308641986,500.1481481481481]],[2,[476.9512618480758,444.1904085078117]],[3,[480.5925925925926,440.2962962962962]],[4,[511.55555555555554,490.2222222222222]],[5,[497.38271604938257,447.60493827160496]],[6,[499.77650172698026,445.9388618767647]],[7,[515.1604938271604,486.716049382716]],[8,[502.0960349862431,417.9179038759178]],[9,[505.311372421164,416.4524664944526]],[10,[524.0493827160495,487.1111111111112]],[11,[531.5890484844431,432.90541944395505]],[12,[533.8924329970387,433.46495092641567]],[13,[526.0246913580248,490.07407407407413]],[14,[552.9705625612692,418.19081042008474]],[15,[556.7578325004595,420.13017723423656]],[16,[530.3703703703702,486.71604938271594]],[17,[565.2914244954804,444.3855996237166]],[18,[568.2339832275112,446.0155371619765]],[19,[530.7654320987656,499.55555555555566]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,1]],"handle_primary":[[1,[-9.283950617284065,-12.246913580246884]],[2,[-17.16805625160663,-20.28383937076643]],[3,[21.32824309569804,17.329197515254634]],[4,[0.0,0.0]],[5,[-10.016557406305251,-15.024836109457851]],[6,[3.9272019767233246,4.629039357803151]],[7,[0.0,0.0]],[8,[-8.936088730151937,-20.93774746663439]],[9,[11.197015798182122,18.39034937970939]],[10,[0.0,0.0]],[11,[7.784237194372736,-22.222909722529664]],[12,[-5.082537215847424,18.7049831985629]],[13,[0.0,0.0]],[14,[15.260998855532309,-21.888591759537466]],[15,[-11.459519915000214,23.15277176924241]],[16,[0.0,0.0]],[17,[27.324497401397252,-21.15032331824051]],[18,[-19.30865594294653,18.299752742610902]],[19,[-1.5204271954055455,4.429070525747022]]],"handle_end":[[1,[28.522359190346833,33.698803394714844]],[2,[-22.123456790123555,-17.97530864197529]],[3,[-3.111111111111086,-12.0]],[4,[13.03703703703701,19.555555555555543]],[5,[-12.032856371187677,-14.183269935989983]],[6,[0.7901234567898427,-16.197530864197745]],[7,[18.59187624528363,43.5617887769169]],[8,[-11.197015798182008,-18.39034937970939]],[9,[0.7901234567898427,-21.135802469135857]],[10,[-7.784237194372736,22.22290972252955]],[11,[5.082537215847424,-18.704983198562843]],[12,[3.7530864197531177,-16.59259259259261]],[13,[-15.260998855532534,21.888591759537743]],[14,[11.286699158099054,-22.803605349427187]],[15,[4.54320987654296,-11.851851851852018]],[16,[-28.402535606591755,21.984770746653737]],[17,[19.435079545528083,-18.419570542198244]],[18,[4.54320987654296,-13.23456790123464]],[19,[2.7053847913285836,3.5688054694122116]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18128923159828618806,{"inputs":[{"Node":{"node_id":1229809699395562135,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1274377,"green":0.3662527,"blue":0.19120166,"alpha":1.0,"linear":true},{"red":0.17329015,"green":0.49851036,"blue":0.26315314,"alpha":1.0,"linear":true},{"red":0.48808023,"green":0.56791306,"blue":0.23646957,"alpha":1.0,"linear":true},{"red":1.0,"green":0.68668544,"blue":0.18116423,"alpha":1.0,"linear":true}],"position":[0.0,0.3267294443765037,0.5703803350862179,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.1274377,"green":0.3662527,"blue":0.19120166,"alpha":1.0,"linear":true},{"red":0.17329015,"green":0.49851036,"blue":0.26315314,"alpha":1.0,"linear":true},{"red":0.48808023,"green":0.56791306,"blue":0.23646957,"alpha":1.0,"linear":true},{"red":1.0,"green":0.68668544,"blue":0.18116423,"alpha":1.0,"linear":true}],"position":[0.0,0.3267294443765037,0.5703803350862179,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-4.746561733668841,-46.29419024216065,46.29419024216065,-4.746561733668841,517.258279622168,489.4807977380199]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18185020559178852986,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":4847316728405535983,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18187802220803838247,{"inputs":[{"Node":{"node_id":11634445349252640936,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Screen"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18371793711669837037,{"inputs":[{"Node":{"node_id":7861616450605235840,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18431382379595272672,{"inputs":[{"Node":{"node_id":10989897386232385465,"output_index":0}},{"Node":{"node_id":4191887059541031673,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[57904581517036791,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[70804263053697201,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[194878846429432339,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[322234583139821148,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[326112971739898070,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[456239140723765386,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[514222872092587805,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[585709295659496998,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[664587514588499648,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[729026403095264425,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[764189229787475993,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[938033825024582130,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[958845362613832240,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[972153153989181918,{"persistent_metadata":{"display_name":"Sphere Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1032659476619711014,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1104068854328504126,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1108089904278882840,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1147521068928676110,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1156213189397385283,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1229809699395562135,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1268775104597510914,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1396768435017101055,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1490537476612110327,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1658032775659237960,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1831743139584171612,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2032185045476767535,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-36,216]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2036609094647228373,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2062662104423219162,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2077983679740571162,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2088390810384907709,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,72]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2155997486525176376,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,6]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2183401450260403525,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2189393878093040029,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2209276411833629008,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2225749123534781340,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2292399603649738346,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2310170068575553369,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2452294403891427489,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2465823993152870948,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2510483139353274965,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2640491057355360805,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2785423879796980286,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2791109467690716388,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2843751023378786714,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2881239077602364410,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2900504420179573771,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2921219300441868542,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3014633976566537110,{"persistent_metadata":{"display_name":"Boolean Cut","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3021739385836969518,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3122972215852775755,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3185536512640676801,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3227544593834141716,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3365825508845848745,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3455270778005546310,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3564067978712674849,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3616319631707471648,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3670594928372882885,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3680957604830907751,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3806549994589872867,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,84]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3927358878935116440,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3966971396176820223,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3970872207068447290,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4046495708656778502,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4069478660487729695,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4105329493214975815,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4134257789770357215,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4187349759243468746,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4191887059541031673,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4197544064668946479,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4243146970185091100,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4323461535289334196,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4398598693761352299,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4740496570730418920,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4757672276235057645,{"persistent_metadata":{"display_name":"Plant (Right)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4837219841531371489,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4847316728405535983,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4884180935153120645,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4887570735033124574,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4898866541060902381,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4924169570021915606,{"persistent_metadata":{"display_name":"Sphere","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4968550668755026811,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5017082804473894058,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,60]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5258402282444994019,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5261200785298607501,{"persistent_metadata":{"display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5317925967883407701,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5326013268137833446,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5346759588580719138,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5365849201631468915,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5434119356821575534,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5448146793323825465,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5540780316862276409,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5574499968250848265,{"persistent_metadata":{"display_name":"Water","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5670058004691708784,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5882319123081134737,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,189]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5891705401441266824,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5925268772265373737,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6142412830271644616,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6556170892691431702,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6569279146800941123,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6589978257209505606,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6777328619777499144,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6785205785632793666,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6821938959315178556,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7005645574203740491,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7030585744407664630,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7067047867039575315,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7156963182187517674,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7171713123860587892,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7259756719760382667,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7339104629465306715,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7340659059180155803,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-44,219]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7639490284239357347,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7671691070850213967,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7799679303995308634,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7838724497953148309,{"persistent_metadata":{"display_name":"Geometric Ripples","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-9,3]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7861616450605235840,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7884283658260267478,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7910743362843097140,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7948029953091985757,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7952384394377946257,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8015732980153557800,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8028812053913481975,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8034980397175569257,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8073807569018624098,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8165914767449151618,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8166796652234334001,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8181290118694677328,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8242413775403456296,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8256712316698018135,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8343201730608263656,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8463468388280418154,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8508454285877707748,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8612613134760093452,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8863202447825570192,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8884703330021429739,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8891726805381758817,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8958782938691501404,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9115451226763736660,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9138781233934614517,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9150078008481575131,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9157963288496356916,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9210109719406330381,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9226731772122225003,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9278774434958175105,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9323583246068171750,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9392462024456293097,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9393309733761233513,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9409313765472227540,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9640215309187299519,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9641315149170593327,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9663740787529879916,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9666682009015049330,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9684750473849891261,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9724746185253267560,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9771562518763748677,{"persistent_metadata":{"display_name":"Plant (Upper Left)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":39}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9798215931018813676,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9908869573449854874,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9935922395919478146,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9981992739451603109,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9993538712344947860,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10181153433637856462,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10188337730058049439,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10189927996178548902,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10431241258085047322,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10477328336261010694,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10507084483235320484,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10564228200140683112,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10651614176902312108,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10742991645899166287,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10779665858841986661,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10810157408196882043,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10849502918952703647,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10917301734480569398,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10989897386232385465,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11076863066321508991,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11158238411769751544,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11221222899304956410,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11429712783984224234,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11450962621506425680,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11479492521093639512,{"persistent_metadata":{"display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11490835759023283071,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11506204916439878896,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11547499603328872398,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11579925754926059876,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11595529463602678384,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11634445349252640936,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11634802583144606404,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11776939455674933130,{"persistent_metadata":{"display_name":"Backdrop Gradient","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11860177410232537211,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11895211316848895241,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11990662272042254522,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12019361655085452072,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12302362769310895852,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12331680982485935376,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12360435709959435360,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12370676490908282512,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12469956387875933942,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12537712543904859919,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12548387328300782726,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12554549497938935061,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12683405703338263457,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12852312236973354891,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12875121980058869686,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12930243402848966353,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12931264630175648107,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12998832508553378533,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13001069903842109798,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13207576193421440093,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13287180494862716983,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13442128106088307772,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13531127678140037818,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13609749019463823009,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13696921450692276893,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13700218159488557234,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13701442050580061197,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13743495762122910279,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13747030364552895864,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13817976820605296433,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13837327017498431546,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13852123721901366011,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13853529851208960143,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13861850149743924125,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13868917743026516656,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13920465562072008593,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13942146309185231085,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13942787566051910019,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13946577152348504742,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14019233912018234740,{"persistent_metadata":{"display_name":"Structure","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":27}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14055195208113082127,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,48]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14102693648424950146,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14124486712683868036,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14202574750104046500,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14234384001010789008,{"persistent_metadata":{"display_name":"Plant (Lower Left)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14255588039347536657,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,250]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14330881008352607546,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14341957170885045113,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14400993470150734626,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14449527838292182035,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14449710315388146362,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14483299526002574058,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14633096010607565334,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14752203606937854133,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14791465604033956302,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14805036488257720752,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14842592386831797498,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15134939288287905620,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15157035456876170143,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15166516760575860563,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15167880819976070791,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15216519480392295991,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15261165353096835967,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15300421479077882117,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15347111149235590492,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15478704582542175684,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15488533792651297821,{"persistent_metadata":{"display_name":"Structure Reflection","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15517065353723874205,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15595689026000825531,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15670426414376277308,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15709488322180832347,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-5,0]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15723520455917422372,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15775513677915164685,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15876464101883822838,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15898396405528650339,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15914878146223026034,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16059265180575745658,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16069762220015310717,{"persistent_metadata":{"display_name":"Fountain Water Ripples","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":87}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16229837691656808412,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16244305414728361140,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16398743435291795904,{"persistent_metadata":{"display_name":"Fountain Water","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":31}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16416441286881083283,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16510804133693080967,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16564941800301062922,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16727310898641763441,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16732345645494316637,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16793555741218543212,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16807867745126764195,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16847360882244487081,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16852951849051795674,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16923062582661131268,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17059035448296015006,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17332567356044944766,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17433098630591807963,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17533670083736420411,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17638504852426495381,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17873337220577786871,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17881728913029763313,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17887542695709892422,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,126]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17965270694495451178,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,96]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18011777376689315137,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18046677540207938977,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18085100003956405261,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18128923159828618806,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18185020559178852986,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18187802220803838247,{"persistent_metadata":{"display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18371793711669837037,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18431382379595272672,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[520.5000004529949,-486.13666473966714],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1511.0,161.0],"node_graph_width":1980.0}}}},"collapsed":[[15709488322180832347,7838724497953148309],[15709488322180832347,9771562518763748677],[15709488322180832347,14234384001010789008],[15709488322180832347,4757672276235057645],[15709488322180832347,4924169570021915606]],"properties_panel_collapsed_sections":[],"commit_hash":"","document_ptz":{"pan":[-634.9889130425015,-317.5091956355934],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Isometric":{"y_axis_spacing":20.0,"angle_a":15.0,"angle_b":15.0}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/marbled-mandelbrot.graphite b/demo-artwork/marbled-mandelbrot.graphite index ab952d756b..de204c0339 100644 --- a/demo-artwork/marbled-mandelbrot.graphite +++ b/demo-artwork/marbled-mandelbrot.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":12241147352993594415,"output_index":0}}],"nodes":[[80924370013313595,{"inputs":[{"Node":{"node_id":6029481207635803402,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.12704918032786883,0.5,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.06469504,"green":0.0,"blue":0.0755814,"alpha":1.0,"linear":true},{"red":0.016644126,"green":0.13212071,"blue":0.62523156,"alpha":1.0,"linear":true},{"red":1.0,"green":0.8708812,"blue":0.3485102,"alpha":1.0,"linear":true},{"red":0.30054384,"green":0.8468733,"blue":0.8468733,"alpha":0.01,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"raster_nodes::gradient_map::GradientMapNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3606681156406984991,{"inputs":[{"Node":{"node_id":6323350524796370485,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.3237704918032787,0.5655737704918032,0.8155737704918032,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.04631017,"green":0.0,"blue":0.0076861563,"alpha":1.0,"linear":true},{"red":0.83939683,"green":0.7249875,"blue":0.27055356,"alpha":1.0,"linear":true},{"red":0.025397457,"green":0.3485102,"blue":0.3485102,"alpha":1.0,"linear":true},{"red":0.01102731,"green":0.09231063,"blue":0.09231063,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"raster_nodes::gradient_map::GradientMapNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4388711862172196665,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"raster_nodes::std_nodes::MandelbrotNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"FOOTPRINT","inject":"","sources":[]}}],[6029481207635803402,{"inputs":[{"Node":{"node_id":4388711862172196665,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6323350524796370485,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}},{"Value":{"tagged_value":{"NoiseType":"OpenSimplex2"},"exposed":false}},{"Value":{"tagged_value":{"DomainWarpType":"OpenSimplex2"},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}},{"Value":{"tagged_value":{"FractalType":"PingPong"},"exposed":false}},{"Value":{"tagged_value":{"U32":3},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"CellularDistanceFunction":"Hybrid"},"exposed":false}},{"Value":{"tagged_value":{"CellularReturnType":"CellValue"},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"raster_nodes::std_nodes::NoisePatternNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"FOOTPRINT","inject":"","sources":[]}}],[6565638614909771142,{"inputs":[{"Node":{"node_id":7624113397561636853,"output_index":0}},{"Node":{"node_id":80924370013313595,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7624113397561636853,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":3606681156406984991,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12241147352993594415,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":6565638614909771142,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Node":{"node_id":6,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":4}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":7,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},{"Concrete":{"name":"core_types::list::List"}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6,{"inputs":[{"Node":{"node_id":5,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::TranslateFootprintNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7,{"inputs":[{"Node":{"node_id":2,"output_index":0}},{"Value":{"tagged_value":{"U32":1},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[80924370013313595,{"persistent_metadata":{"display_name":"Gradient Map","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Image","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":["Image"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3606681156406984991,{"persistent_metadata":{"display_name":"Gradient Map","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Image","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":["Image"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4388711862172196665,{"persistent_metadata":{"display_name":"Mandelbrot","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}}],"output_names":["Raster"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6029481207635803402,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6323350524796370485,{"persistent_metadata":{"display_name":"Noise Pattern","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacer","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_scale","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_noise_type","input_name":"Noise Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_domain_warp_type","input_name":"Domain Warp Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_domain_warp_amplitude","input_name":"Domain Warp Amplitude","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_type","input_name":"Fractal Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_octaves","input_name":"Fractal Octaves","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_lacunarity","input_name":"Fractal Lacunarity","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_gain","input_name":"Fractal Gain","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_weighted_strength","input_name":"Fractal Weighted Strength","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_ping_pong_strength","input_name":"Fractal Ping Pong Strength","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_distance_function","input_name":"Cellular Distance Function","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_return_type","input_name":"Cellular Return Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_jitter","input_name":"Cellular Jitter","input_description":"TODO"}}],"output_names":["Image"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6565638614909771142,{"persistent_metadata":{"display_name":"Mandelbrot Set","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-16,6]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7624113397561636853,{"persistent_metadata":{"display_name":"Swirly Noise","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12241147352993594415,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,3]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,-3]}}},"network_metadata":null}}],[6,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-28,-3]}}},"network_metadata":null}}],[7,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[345.0,-187.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1336.0,394.0],"node_graph_width":1981.0},"selection_undo_history":[[6565638614909771142],[7624113397561636853],[6565638614909771142],[7624113397561636853],[6565638614909771142],[]],"selection_redo_history":[]}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"f6ffa45a8180183d70a67d3e41249934a8fcacc9","document_ptz":{"pan":[-339.3903349049215,-502.62390663267854],"tilt":0.0,"zoom":4.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":12241147352993594415,"output_index":0}}],"nodes":[[80924370013313595,{"inputs":[{"Node":{"node_id":6029481207635803402,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.06469504,"green":0.0,"blue":0.0755814,"alpha":1.0,"linear":true},{"red":0.016644126,"green":0.13212071,"blue":0.62523156,"alpha":1.0,"linear":true},{"red":1.0,"green":0.8708812,"blue":0.3485102,"alpha":1.0,"linear":true},{"red":0.30054384,"green":0.8468733,"blue":0.8468733,"alpha":0.01,"linear":true}],"position":[0.0,0.12704918032786883,0.5,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"raster_nodes::gradient_map::GradientMapNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3606681156406984991,{"inputs":[{"Node":{"node_id":6323350524796370485,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":0.04631017,"green":0.0,"blue":0.0076861563,"alpha":1.0,"linear":true},{"red":0.83939683,"green":0.7249875,"blue":0.27055356,"alpha":1.0,"linear":true},{"red":0.025397457,"green":0.3485102,"blue":0.3485102,"alpha":1.0,"linear":true},{"red":0.01102731,"green":0.09231063,"blue":0.09231063,"alpha":1.0,"linear":true}],"position":[0.0,0.3237704918032787,0.5655737704918032,0.8155737704918032,1.0],"midpoint":[0.5,0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"raster_nodes::gradient_map::GradientMapNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4388711862172196665,{"inputs":[],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"raster_nodes::std_nodes::MandelbrotNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"FOOTPRINT","inject":""}}],[6029481207635803402,{"inputs":[{"Node":{"node_id":4388711862172196665,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6323350524796370485,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}},{"Value":{"tagged_value":{"NoiseType":"OpenSimplex2"},"exposed":false}},{"Value":{"tagged_value":{"DomainWarpType":"OpenSimplex2"},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}},{"Value":{"tagged_value":{"FractalType":"PingPong"},"exposed":false}},{"Value":{"tagged_value":{"U32":3},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"CellularDistanceFunction":"Hybrid"},"exposed":false}},{"Value":{"tagged_value":{"CellularReturnType":"CellValue"},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"raster_nodes::std_nodes::NoisePatternNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"FOOTPRINT","inject":""}}],[6565638614909771142,{"inputs":[{"Node":{"node_id":7624113397561636853,"output_index":0}},{"Node":{"node_id":80924370013313595,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7624113397561636853,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":3606681156406984991,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12241147352993594415,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}},"exposed":true}},{"Node":{"node_id":6565638614909771142,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"Generic":"T"}]},"import_index":1}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":2}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":3}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":4}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[80924370013313595,{"persistent_metadata":{"display_name":"Gradient Map","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Image","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":["Image"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3606681156406984991,{"persistent_metadata":{"display_name":"Gradient Map","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Image","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":["Image"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4388711862172196665,{"persistent_metadata":{"display_name":"Mandelbrot","input_metadata":[],"output_names":["Raster"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6029481207635803402,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6323350524796370485,{"persistent_metadata":{"display_name":"Noise Pattern","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacer","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_scale","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_noise_type","input_name":"Noise Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_domain_warp_type","input_name":"Domain Warp Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_domain_warp_amplitude","input_name":"Domain Warp Amplitude","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_type","input_name":"Fractal Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_octaves","input_name":"Fractal Octaves","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_lacunarity","input_name":"Fractal Lacunarity","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_gain","input_name":"Fractal Gain","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_weighted_strength","input_name":"Fractal Weighted Strength","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_ping_pong_strength","input_name":"Fractal Ping Pong Strength","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_distance_function","input_name":"Cellular Distance Function","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_return_type","input_name":"Cellular Return Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_jitter","input_name":"Cellular Jitter","input_description":"TODO"}}],"output_names":["Image"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6565638614909771142,{"persistent_metadata":{"display_name":"Mandelbrot Set","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-16,6]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7624113397561636853,{"persistent_metadata":{"display_name":"Swirly Noise","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12241147352993594415,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,3]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[345.0,-187.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1335.0,393.0],"node_graph_width":1980.0}}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"","document_ptz":{"pan":[-339.3903349049215,-502.62390663267854],"tilt":0.0,"zoom":4.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/painted-dreams.graphite b/demo-artwork/painted-dreams.graphite index be573fb36b..8c207e7d36 100644 --- a/demo-artwork/painted-dreams.graphite +++ b/demo-artwork/painted-dreams.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":392274448837115448,"output_index":0}}],"nodes":[[57390435731316553,{"inputs":[{"Node":{"node_id":8460565235419043665,"output_index":0}},{"Node":{"node_id":13838011362258067867,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[140396870212231820,{"inputs":[{"Node":{"node_id":18095952297474762348,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[294265135510952894,{"inputs":[{"Node":{"node_id":11264395591110193456,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[20.0,0.0,0.0,20.0,-10.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[392274448837115448,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":6787585796949551500,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1536.0,768.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Node":{"node_id":6,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":4}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":7,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},{"Concrete":{"name":"core_types::list::List"}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6,{"inputs":[{"Node":{"node_id":5,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::TranslateFootprintNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7,{"inputs":[{"Node":{"node_id":2,"output_index":0}},{"Value":{"tagged_value":{"U32":1},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[682567808439406093,{"inputs":[{"Node":{"node_id":7755499790391969923,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":15},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[804622576568168609,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[13654185056786459919,6952183320761642858,2802617302192982616,7639287212006638253,15117515618866904690,15750781936547583892,7025422618543191491,3831533579307185652,16937470333767479918,10412162547161259027,5269777039739103358],"remove":[],"delta":[[2802617302192982616,[911.7777777777776,334.88888888888886]],[3831533579307185652,[880.4444444444443,357.3333333333333]],[5269777039739103358,[902.2222222222222,394.66666666666663]],[6952183320761642858,[933.9259259259262,324.3456790123457]],[7025422618543191491,[911.5555555555554,345.3333333333333]],[7639287212006638253,[862.8888888888888,349.3333333333333]],[10412162547161259027,[887.3333333333333,376.0]],[13654185056786459919,[946.1728395061732,330.8641975308642]],[15117515618866904690,[819.1111111111109,354.44444444444434]],[15750781936547583892,[840.6666666666665,368.66666666666663]],[16937470333767479918,[876.6666666666665,359.55555555555554]]]},"segments":{"add":[10498175376126066982,10426255560432238561,11214998966879437330,1241631398419524272,15286139376878919277,15838384105575178137,12854270992100552972,379744301215040936,4069217348643062888,10438163357339042361,9330486019469919863],"remove":[],"start_point":[[379744301215040936,3831533579307185652],[1241631398419524272,7639287212006638253],[4069217348643062888,16937470333767479918],[9330486019469919863,5269777039739103358],[10426255560432238561,6952183320761642858],[10438163357339042361,10412162547161259027],[10498175376126066982,13654185056786459919],[11214998966879437330,2802617302192982616],[12854270992100552972,7025422618543191491],[15286139376878919277,15117515618866904690],[15838384105575178137,15750781936547583892]],"end_point":[[379744301215040936,16937470333767479918],[1241631398419524272,15117515618866904690],[4069217348643062888,10412162547161259027],[9330486019469919863,13654185056786459919],[10426255560432238561,2802617302192982616],[10438163357339042361,5269777039739103358],[10498175376126066982,6952183320761642858],[11214998966879437330,7639287212006638253],[12854270992100552972,3831533579307185652],[15286139376878919277,15750781936547583892],[15838384105575178137,7025422618543191491]],"handle_primary":[[379744301215040936,[-0.2222222222221717,0.0]],[1241631398419524272,[-17.111111111111086,12.888888888888856]],[4069217348643062888,[0.0,0.0]],[9330486019469919863,[5.555555555555429,-0.2222222222221717]],[10426255560432238561,[-0.39506172839503506,-0.19753086419757435]],[10438163357339042361,[1.3333333333332575,10.888888888888856]],[10498175376126066982,[0.0,0.0]],[11214998966879437330,[-16.666666666666515,-3.777777777777771]],[12854270992100552972,[-0.4444444444443434,0.0]],[15286139376878919277,[-0.5188510642573192,0.6084707935380038]],[15838384105575178137,[22.222222222222285,5.555555555555543]]],"handle_end":[[379744301215040936,[0.0,0.0]],[1241631398419524272,[0.5951379226228255,-0.6979344728938486]],[4069217348643062888,[-1.3333333333332575,-10.888888888888856]],[9330486019469919863,[0.0,0.0]],[10426255560432238561,[16.666666666666515,3.777777777777771]],[10438163357339042361,[-5.555555555555429,0.2222222222221717]],[10498175376126066982,[4.9382716049382225,0.19753086419757435]],[11214998966879437330,[17.111111111111086,-12.888888888888856]],[12854270992100552972,[33.77777777777783,2.2222222222222285]],[15286139376878919277,[-22.222222222222285,-5.555555555555543]],[15838384105575178137,[-20.0,2.0]]],"stroke":[[379744301215040936,0],[1241631398419524272,0],[4069217348643062888,0],[9330486019469919863,0],[10426255560432238561,0],[10438163357339042361,0],[10498175376126066982,0],[11214998966879437330,0],[12854270992100552972,0],[15286139376878919277,0],[15838384105575178137,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":379744301215040936},{"ty":"Primary","segment":4069217348643062888}],[{"ty":"End","segment":1241631398419524272},{"ty":"Primary","segment":15286139376878919277}],[{"ty":"End","segment":4069217348643062888},{"ty":"Primary","segment":10438163357339042361}],[{"ty":"End","segment":10426255560432238561},{"ty":"Primary","segment":11214998966879437330}],[{"ty":"End","segment":10438163357339042361},{"ty":"Primary","segment":9330486019469919863}],[{"ty":"End","segment":11214998966879437330},{"ty":"Primary","segment":1241631398419524272}],[{"ty":"End","segment":15286139376878919277},{"ty":"Primary","segment":15838384105575178137}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[876963243827503916,{"inputs":[{"Node":{"node_id":7651693425519490419,"output_index":0}},{"Node":{"node_id":17223836790030950966,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[990192925663920333,{"inputs":[{"Node":{"node_id":3410481056630111806,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[466.8,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.9},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1001728975241745659,{"inputs":[{"Node":{"node_id":12770183061753030023,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1009114585722052052,{"inputs":[{"Node":{"node_id":15692102598187739001,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1097494158696050491,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":15.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1258994191538244490,{"inputs":[{"Node":{"node_id":5488285068107445023,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[60.587565195411344,0.0,0.0,60.587565195411344,868.7732029845887,104.82722889376552]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1491840484128555837,{"inputs":[{"Node":{"node_id":1508440849951861669,"output_index":0}},{"Node":{"node_id":9808637865669223270,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1508440849951861669,{"inputs":[{"Node":{"node_id":8566844905246185636,"output_index":0}},{"Node":{"node_id":7480253252288032958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1627123781166851142,{"inputs":[{"Node":{"node_id":4807760870555738383,"output_index":0}},{"Node":{"node_id":15354358358546908017,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1662641269094032596,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0}},{"Node":{"node_id":14139765080256493579,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1809704172129195322,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2025899804080897524,{"inputs":[{"Node":{"node_id":17740496701763775226,"output_index":0}},{"Node":{"node_id":3214181946162459584,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2124231869409556689,{"inputs":[{"Node":{"node_id":15877481873925059044,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2185437945364824599,{"inputs":[{"Node":{"node_id":18081743490344004315,"output_index":0}},{"Node":{"node_id":4421418468606442725,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2287485748649359627,{"inputs":[{"Node":{"node_id":804622576568168609,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2723198387862533596,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0}},{"Node":{"node_id":11201759760883367635,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2834866505092039323,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0}},{"Node":{"node_id":14139765080256493579,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2871608309888343463,{"inputs":[{"Node":{"node_id":12494428953087324640,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2880630606834119505,{"inputs":[{"Node":{"node_id":8297015715799006244,"output_index":0}},{"Node":{"node_id":16322546010403524636,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3050731459444225191,{"inputs":[{"Node":{"node_id":682567808439406093,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3079923906392020295,{"inputs":[{"Node":{"node_id":17056531964793634106,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3109716240255919254,{"inputs":[{"Node":{"node_id":5877930116725120460,"output_index":0}},{"Node":{"node_id":18053728639616073084,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3214181946162459584,{"inputs":[{"Node":{"node_id":5449860184735415958,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[945.6888871136836,0.0,0.0,945.6888871136836,0.0,384.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3410481056630111806,{"inputs":[{"Node":{"node_id":1097494158696050491,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[30.0,0.0,0.0,30.0,-15.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3471746866096043087,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[354.1044977315747,0.0,0.0,354.1044977315747,525.6902462010306,232.6091521617111]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3608604157153838227,{"inputs":[{"Node":{"node_id":17299978721726771610,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3750439930725791025,{"inputs":[{"Node":{"node_id":12276520439585231336,"output_index":0}},{"Node":{"node_id":14228923746783465609,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3997031659711823213,{"inputs":[{"Node":{"node_id":6484183251661832039,"output_index":0}},{"Node":{"node_id":7962101329808960965,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4102754869474520966,{"inputs":[{"Node":{"node_id":2723198387862533596,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4261249487994076490,{"inputs":[{"Node":{"node_id":14516211820212764316,"output_index":0}},{"Node":{"node_id":5534800796196967885,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4301099429811409147,{"inputs":[{"Node":{"node_id":57390435731316553,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[81.3755165062,-154.9064700048801]},"exposed":false}},{"Value":{"tagged_value":{"F64":23.8615898276},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4328376070224119511,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":13446205009526451196,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4421418468606442725,{"inputs":[{"Node":{"node_id":8863346544623578893,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[364.0000000000002,0.0,0.0,364.0000000000002,-2.273736754432321e-13,635.1243141489638]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4470272391975492611,{"inputs":[{"Node":{"node_id":7018444885869143173,"output_index":0}},{"Node":{"node_id":12145355397916841389,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4560146526699152877,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0}},{"Node":{"node_id":13646498613066619660,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4631655038168471552,{"inputs":[{"Node":{"node_id":990192925663920333,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4771789845668099116,{"inputs":[{"Node":{"node_id":17351444026127625357,"output_index":0}},{"Node":{"node_id":14684142559936015947,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4807760870555738383,{"inputs":[{"Node":{"node_id":876963243827503916,"output_index":0}},{"Node":{"node_id":8269257328703012432,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4809200889774783438,{"inputs":[{"Node":{"node_id":3109716240255919254,"output_index":0}},{"Node":{"node_id":14139129879376457893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5014806436727666175,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0}},{"Node":{"node_id":8863346544623578893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5449860184735415958,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[17520941196305861319,6029995238423674441,16590926169549948521,12817219955590128894,4723170318056755559,12317789037775437786,17339925811006567497,4659274885664969740,1541401134848201833,17321098837874422287,11084016020553554647,9729762716079513741,13279221198527484331,7727030009292816503,15701538241214188894],"remove":[],"delta":[[1541401134848201833,[886.0,572.0]],[4659274885664969740,[896.0,523.0]],[4723170318056755559,[923.0,349.0]],[6029995238423674441,[898.0,46.0]],[7727030009292816503,[0.0,768.0]],[9729762716079513741,[585.0,666.0]],[11084016020553554647,[655.0,636.0]],[12317789037775437786,[902.0,394.0]],[12817219955590128894,[933.0,273.0]],[13279221198527484331,[564.0,768.0]],[15701538241214188894,[0.0,0.0]],[16590926169549948521,[869.0,147.0]],[17321098837874422287,[802.6666666666667,656.4444444444445]],[17339925811006567497,[898.0,468.0]],[17520941196305861319,[889.0,0.0]]]},"segments":{"add":[862900208337901235,4806484166818510930,11569179934425192262,9808624553037921371,9730229894941201870,1248401493076165062,8832757535144158913,15056691877609602335,8919277736361106420,16631919016540861133,9314952320711038398,10137845066833192587,14740183693208469558,3307452201570141575,3876401232874291775],"remove":[],"start_point":[[862900208337901235,17520941196305861319],[1248401493076165062,12317789037775437786],[3307452201570141575,7727030009292816503],[3876401232874291775,15701538241214188894],[4806484166818510930,6029995238423674441],[8832757535144158913,17339925811006567497],[8919277736361106420,1541401134848201833],[9314952320711038398,11084016020553554647],[9730229894941201870,4723170318056755559],[9808624553037921371,12817219955590128894],[10137845066833192587,9729762716079513741],[11569179934425192262,16590926169549948521],[14740183693208469558,13279221198527484331],[15056691877609602335,4659274885664969740],[16631919016540861133,17321098837874422287]],"end_point":[[862900208337901235,6029995238423674441],[1248401493076165062,17339925811006567497],[3307452201570141575,15701538241214188894],[3876401232874291775,17520941196305861319],[4806484166818510930,16590926169549948521],[8832757535144158913,4659274885664969740],[8919277736361106420,17321098837874422287],[9314952320711038398,9729762716079513741],[9730229894941201870,12317789037775437786],[9808624553037921371,4723170318056755559],[10137845066833192587,13279221198527484331],[11569179934425192262,12817219955590128894],[14740183693208469558,7727030009292816503],[15056691877609602335,1541401134848201833],[16631919016540861133,11084016020553554647]],"handle_primary":[[862900208337901235,[0.0,0.0]],[1248401493076165062,[21.0,27.0]],[3307452201570141575,[0.0,0.0]],[3876401232874291775,[0.0,0.0]],[4806484166818510930,[11.595886737767424,32.210796493798]],[8832757535144158913,[14.888888888888914,4.8888888888888005]],[8919277736361106420,[10.458809984597837,40.44073194044492]],[9314952320711038398,[-34.0,-7.0]],[9730229894941201870,[-24.00371914417652,11.366922485048674]],[9808624553037921371,[18.0,36.0]],[10137845066833192587,[-19.0,43.0]],[11569179934425192262,[-4.0,51.0]],[14740183693208469558,[0.0,0.0]],[15056691877609602335,[0.0,0.0]],[16631919016540861133,[-63.996421719362885,-1.2074796550824587]]],"handle_end":[[862900208337901235,[-9.000000000000114,-25.0]],[1248401493076165062,[30.59259259259261,-36.59259259259255]],[3307452201570141575,[0.0,0.0]],[3876401232874291775,[0.0,0.0]],[4806484166818510930,[3.365858386031487,-42.91469442190146]],[8832757535144158913,[33.33333333333326,-9.666666666666742]],[8919277736361106420,[70.66666666666652,1.333333333333485]],[9314952320711038398,[19.0,-43.0]],[9730229894941201870,[-21.0,-27.0]],[9808624553037921371,[28.703703703703695,-13.592592592592496]],[10137845066833192587,[0.0,0.0]],[11569179934425192262,[-18.0,-36.0]],[14740183693208469558,[0.0,0.0]],[15056691877609602335,[-10.0,-38.66666666666663]],[16631919016540861133,[34.0,7.0]]],"stroke":[[862900208337901235,0],[1248401493076165062,0],[3307452201570141575,0],[3876401232874291775,0],[4806484166818510930,0],[8832757535144158913,0],[8919277736361106420,0],[9314952320711038398,0],[9730229894941201870,0],[9808624553037921371,0],[10137845066833192587,0],[11569179934425192262,0],[14740183693208469558,0],[15056691877609602335,0],[16631919016540861133,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":862900208337901235},{"ty":"Primary","segment":4806484166818510930}],[{"ty":"End","segment":3307452201570141575},{"ty":"Primary","segment":3876401232874291775}],[{"ty":"End","segment":4806484166818510930},{"ty":"Primary","segment":11569179934425192262}],[{"ty":"End","segment":8919277736361106420},{"ty":"Primary","segment":16631919016540861133}],[{"ty":"End","segment":9314952320711038398},{"ty":"Primary","segment":10137845066833192587}],[{"ty":"End","segment":9730229894941201870},{"ty":"Primary","segment":1248401493076165062}],[{"ty":"End","segment":9808624553037921371},{"ty":"Primary","segment":9730229894941201870}],[{"ty":"End","segment":10137845066833192587},{"ty":"Primary","segment":14740183693208469558}],[{"ty":"End","segment":11569179934425192262},{"ty":"Primary","segment":9808624553037921371}],[{"ty":"End","segment":14740183693208469558},{"ty":"Primary","segment":3307452201570141575}],[{"ty":"End","segment":15056691877609602335},{"ty":"Primary","segment":8919277736361106420}],[{"ty":"End","segment":16631919016540861133},{"ty":"Primary","segment":9314952320711038398}]],"remove_g1_continuous":[[{"ty":"Primary","segment":8832757535144158913},{"ty":"End","segment":1248401493076165062}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5486211022469996717,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[266134622800431246,12075466065090700811,7115673652122600762,9852238672814254137],"remove":[134095410253559933],"delta":[[266134622800431246,[525.7325506063205,282.1042056224195]],[7115673652122600762,[646.5386352539062,343.99395751953125]],[9852238672814254137,[879.7947439326053,110.54094004739208]],[12075466065090700811,[877.0370370370372,136.5925925925926]]]},"segments":{"add":[17255728395700231433,3166693019207180063,10242199012993595528,2159953159628520134],"remove":[3769008694104161528,10196443086284452827,13980530488817762548],"start_point":[[2159953159628520134,9852238672814254137],[3166693019207180063,7115673652122600762],[10242199012993595528,266134622800431246],[17255728395700231433,12075466065090700811]],"end_point":[[2159953159628520134,12075466065090700811],[3166693019207180063,266134622800431246],[10242199012993595528,9852238672814254137],[17255728395700231433,7115673652122600762]],"handle_primary":[[2159953159628520134,[0.0,0.0]],[3166693019207180063,[-126.67994767097883,-51.72627287889763]],[10242199012993595528,[137.37856050479058,-43.88198340019727]],[17255728395700231433,[0.0010773420832492775,-0.01370555995902123]]],"handle_end":[[2159953159628520134,[0.0,0.0]],[3166693019207180063,[0.0,0.0]],[10242199012993595528,[-15.794743932605344,36.71831921186718]],[17255728395700231433,[165.46136474609386,67.5615980360243]]],"stroke":[[2159953159628520134,0],[3166693019207180063,0],[10242199012993595528,0],[17255728395700231433,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":3166693019207180063},{"ty":"End","segment":17255728395700231433}]],"remove_g1_continuous":[[{"ty":"Primary","segment":3769008694104161528},{"ty":"End","segment":10196443086284452827}],[{"ty":"Primary","segment":10242199012993595528},{"ty":"End","segment":3166693019207180063}],[{"ty":"End","segment":3166693019207180063},{"ty":"Primary","segment":13980530488817762548}],[{"ty":"End","segment":10242199012993595528},{"ty":"Primary","segment":2159953159628520134}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5488285068107445023,{"inputs":[{"Node":{"node_id":7667878689218439065,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5534800796196967885,{"inputs":[{"Node":{"node_id":3608604157153838227,"output_index":0}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CentroidNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5556372312033787775,{"inputs":[{"Node":{"node_id":6484183251661832039,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5856350938151339368,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5138872293174440313,14935583009751134816,9014079831396927156,7008812441195504980,9603704700847490044,7238075805746621699,2355002738045707979,5021902985892894619,17629528758352690600,5995306636877552],"remove":[10768931421586254879],"delta":[[5995306636877552,[912.8888888888888,479.7037037037037]],[2355002738045707979,[826.2057613168724,485.0041152263375]],[5021902985892894619,[857.679012345679,478.2880658436215]],[5138872293174440313,[922.9629629629628,422.22222222222223]],[7008812441195504980,[888.8888888888887,421.3333333333333]],[7238075805746621699,[798.6831275720165,497.9094650205762]],[9014079831396927156,[908.4444444444443,429.9259259259259]],[9603704700847490044,[821.037037037037,464.2962962962963]],[14935583009751134816,[914.9629629629628,418.3703703703703]],[17629528758352690600,[892.148148148148,480.2962962962963]]]},"segments":{"add":[7250062683967197158,14131440324578863745,4499620435559196394,14571502160667941876,7203043366367198812,239843798079287870,7655921914272804429,12687760936062936386,7117413478945421556,9071432674597727163],"remove":[3746587001535987651],"start_point":[[239843798079287870,2355002738045707979],[4499620435559196394,9014079831396927156],[7117413478945421556,5995306636877552],[7203043366367198812,9603704700847490044],[7250062683967197158,5138872293174440313],[7655921914272804429,5021902985892894619],[9071432674597727163,7238075805746621699],[12687760936062936386,17629528758352690600],[14131440324578863745,14935583009751134816],[14571502160667941876,7008812441195504980]],"end_point":[[239843798079287870,5021902985892894619],[4499620435559196394,7008812441195504980],[7117413478945421556,5138872293174440313],[7203043366367198812,7238075805746621699],[7250062683967197158,14935583009751134816],[7655921914272804429,17629528758352690600],[9071432674597727163,2355002738045707979],[12687760936062936386,5995306636877552],[14131440324578863745,9014079831396927156],[14571502160667941876,9603704700847490044]],"handle_primary":[[239843798079287870,[9.61316872427983,-1.843621399176982]],[4499620435559196394,[-0.2962962962963047,-0.2962962962963047]],[7117413478945421556,[0.0,0.0]],[7203043366367198812,[0.0,0.2962962962963047]],[7250062683967197158,[0.0,0.0]],[7655921914272804429,[18.172839506172863,-1.9753086419753456]],[9071432674597727163,[4.345679012345499,-3.555555555555543]],[12687760936062936386,[10.666666666666742,3.555555555555543]],[14131440324578863745,[0.0,0.0]],[14571502160667941876,[-0.5925925925926094,0.0]]],"handle_end":[[239843798079287870,[-21.502976534539364,2.3372800581021456]],[4499620435559196394,[8.59259259259261,5.629629629629619]],[7117413478945421556,[15.703703703703695,33.48148148148147]],[7203043366367198812,[-1.1851851851852189,-25.18518518518516]],[7250062683967197158,[0.0,0.0]],[7655921914272804429,[-10.666666666666742,-3.555555555555543]],[9071432674597727163,[-9.913826570592164,1.9012818080587977]],[12687760936062936386,[0.0,0.0]],[14131440324578863745,[2.962962962963047,-3.259259259259238]],[14571502160667941876,[24.395061728395035,-0.36213991769540144]]],"stroke":[[239843798079287870,0],[4499620435559196394,0],[7117413478945421556,0],[7203043366367198812,0],[7250062683967197158,0],[7655921914272804429,0],[9071432674597727163,0],[12687760936062936386,0],[14131440324578863745,0],[14571502160667941876,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":239843798079287870},{"ty":"End","segment":9071432674597727163}],[{"ty":"End","segment":239843798079287870},{"ty":"Primary","segment":7655921914272804429}],[{"ty":"End","segment":7250062683967197158},{"ty":"Primary","segment":14131440324578863745}],[{"ty":"End","segment":7655921914272804429},{"ty":"Primary","segment":12687760936062936386}],[{"ty":"End","segment":12687760936062936386},{"ty":"Primary","segment":7117413478945421556}]],"remove_g1_continuous":[[{"ty":"End","segment":3746587001535987651},{"ty":"Primary","segment":239843798079287870}],[{"ty":"End","segment":9071432674597727163},{"ty":"Primary","segment":3746587001535987651}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5877930116725120460,{"inputs":[{"Node":{"node_id":4470272391975492611,"output_index":0}},{"Node":{"node_id":1258994191538244490,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5888633415105234509,{"inputs":[{"Node":{"node_id":3750439930725791025,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5954536408321808728,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8323145223085840944,87630150944518163,8212340198835025146,6057321578372831916,16788403743390653241,16686047298905200065,15635903913637220842,8652457572576966876,3124531241960914803,18307826411292029066,9969822516610975381,16995054111951247369,16808246968731723098],"remove":[],"delta":[[87630150944518163,[879.1111111111111,595.8518518518517]],[3124531241960914803,[589.9588477366256,64.65843621399176]],[6057321578372831916,[708.148148148148,616.2962962962962]],[8212340198835025146,[830.8148148148148,633.7777777777776]],[8323145223085840944,[891.5555555555554,569.3827160493826]],[8652457572576966876,[514.4523315429688,146.72100830078125]],[9969822516610975381,[0.0,0.0]],[15635903913637220842,[468.4799499511719,219.78570556640625]],[16686047298905200065,[283.3333333333333,354.66666666666663]],[16788403743390653241,[467.99999999999994,487.3333333333333]],[16808246968731723098,[891.5555555555554,768.0]],[16995054111951247369,[0.0,768.0]],[18307826411292029066,[601.1756940654021,0.0]]]},"segments":{"add":[14879480148926424885,5227512358023446442,17410347049685436697,9544743211426701912,14715945740984195653,515539069333222772,9242150930423817167,8823161072525575433,15885450050057549950,1662692131856898001,178608879920007638,12162371359208565273,16224358815792062223],"remove":[],"start_point":[[178608879920007638,9969822516610975381],[515539069333222772,16686047298905200065],[1662692131856898001,18307826411292029066],[5227512358023446442,87630150944518163],[8823161072525575433,8652457572576966876],[9242150930423817167,15635903913637220842],[9544743211426701912,6057321578372831916],[12162371359208565273,16995054111951247369],[14715945740984195653,16788403743390653241],[14879480148926424885,8323145223085840944],[15885450050057549950,3124531241960914803],[16224358815792062223,16808246968731723098],[17410347049685436697,8212340198835025146]],"end_point":[[178608879920007638,16995054111951247369],[515539069333222772,15635903913637220842],[1662692131856898001,9969822516610975381],[5227512358023446442,8212340198835025146],[8823161072525575433,3124531241960914803],[9242150930423817167,8652457572576966876],[9544743211426701912,16788403743390653241],[12162371359208565273,16808246968731723098],[14715945740984195653,16686047298905200065],[14879480148926424885,87630150944518163],[15885450050057549950,18307826411292029066],[16224358815792062223,8323145223085840944],[17410347049685436697,6057321578372831916]],"handle_primary":[[178608879920007638,[0.0,0.0]],[515539069333222772,[48.66666666666663,-23.999999999999943]],[1662692131856898001,[0.0,0.0]],[5227512358023446442,[-4.444444444444457,18.074074074074133]],[8823161072525575433,[11.259252477575274,-22.666663275824646]],[9242150930423817167,[27.25925925925918,-22.518518518518533]],[9544743211426701912,[-57.48148148148141,-21.629629629629676]],[12162371359208565273,[0.0,0.0]],[14715945740984195653,[-92.66666666666656,-80.66666666666669]],[14879480148926424885,[0.0,0.0]],[15885450050057549950,[11.193415637860312,-27.25925925925926]],[16224358815792062223,[0.0,0.0]],[17410347049685436697,[-26.37037037037044,2.3703703703704377]]],"handle_end":[[178608879920007638,[0.0,0.0]],[515539069333222772,[-95.07216232621772,78.5378732260062]],[1662692131856898001,[0.0,0.0]],[5227512358023446442,[26.37037037037044,-2.3703703703704377]],[8823161072525575433,[-12.439135136214697,30.29295262583988]],[9242150930423817167,[-9.36826657882972,18.859808361471693]],[9544743211426701912,[92.66666666666656,80.66666666666669]],[12162371359208565273,[0.0,0.0]],[14715945740984195653,[0.0,0.0]],[14879480148926424885,[4.444444444444457,-18.074074074074133]],[15885450050057549950,[0.0,0.0]],[16224358815792062223,[0.0,0.0]],[17410347049685436697,[57.48148148148141,21.629629629629676]]],"stroke":[[178608879920007638,0],[515539069333222772,0],[1662692131856898001,0],[5227512358023446442,0],[8823161072525575433,0],[9242150930423817167,0],[9544743211426701912,0],[12162371359208565273,0],[14715945740984195653,0],[14879480148926424885,0],[15885450050057549950,0],[16224358815792062223,0],[17410347049685436697,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":178608879920007638},{"ty":"Primary","segment":12162371359208565273}],[{"ty":"End","segment":515539069333222772},{"ty":"Primary","segment":9242150930423817167}],[{"ty":"End","segment":1662692131856898001},{"ty":"Primary","segment":178608879920007638}],[{"ty":"End","segment":5227512358023446442},{"ty":"Primary","segment":17410347049685436697}],[{"ty":"End","segment":8823161072525575433},{"ty":"Primary","segment":15885450050057549950}],[{"ty":"End","segment":9242150930423817167},{"ty":"Primary","segment":8823161072525575433}],[{"ty":"End","segment":9544743211426701912},{"ty":"Primary","segment":14715945740984195653}],[{"ty":"End","segment":12162371359208565273},{"ty":"Primary","segment":16224358815792062223}],[{"ty":"End","segment":14879480148926424885},{"ty":"Primary","segment":5227512358023446442}],[{"ty":"End","segment":15885450050057549950},{"ty":"Primary","segment":1662692131856898001}],[{"ty":"End","segment":17410347049685436697},{"ty":"Primary","segment":9544743211426701912}]],"remove_g1_continuous":[[{"ty":"End","segment":14715945740984195653},{"ty":"Primary","segment":515539069333222772}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6194305264313730032,{"inputs":[{"Node":{"node_id":4560146526699152877,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6445954214067437701,{"inputs":[{"Node":{"node_id":13670206802546093234,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6484183251661832039,{"inputs":[{"Node":{"node_id":294265135510952894,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[474.2,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.2},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[6503655938154160104,{"inputs":[{"Node":{"node_id":17696051535511578981,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6616450276140292763,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[14760110820354327749,9465415708990918986,13517856880347849115,12398030966924498647,2930103517622848405,9496337687212684441],"remove":[],"delta":[[2930103517622848405,[819.2592592592591,69.33333333333334]],[9465415708990918986,[706.3703703703703,86.51851851851853]],[9496337687212684441,[732.148148148148,57.18518518518518]],[12398030966924498647,[823.4074074074074,97.4814814814815]],[13517856880347849115,[777.1851851851851,92.44444444444446]],[14760110820354327749,[614.8148148148148,129.1851851851852]]]},"segments":{"add":[18226408581696793441,16628058317667581864,3809009367670994230,13496648265229692336,10686631697241750410,11696351847604335156],"remove":[],"start_point":[[3809009367670994230,13517856880347849115],[10686631697241750410,2930103517622848405],[11696351847604335156,9496337687212684441],[13496648265229692336,12398030966924498647],[16628058317667581864,9465415708990918986],[18226408581696793441,14760110820354327749]],"end_point":[[3809009367670994230,12398030966924498647],[10686631697241750410,9496337687212684441],[11696351847604335156,14760110820354327749],[13496648265229692336,2930103517622848405],[16628058317667581864,13517856880347849115],[18226408581696793441,9465415708990918986]],"handle_primary":[[3809009367670994230,[21.33333333333337,4.740740740740733]],[10686631697241750410,[-13.037037037036953,-4.444444444444457]],[11696351847604335156,[-29.333333333333258,11.55555555555555]],[13496648265229692336,[14.222222222222172,-0.8888888888888857]],[16628058317667581864,[41.185185185185105,-9.7777777777778]],[18226408581696793441,[0.0,0.0]]],"handle_end":[[3809009367670994230,[-14.222222222222172,0.8888888888888857]],[10686631697241750410,[29.333333333333258,-11.55555555555555]],[11696351847604335156,[54.81481481481478,-42.37037037037035]],[13496648265229692336,[13.037037037036953,4.444444444444457]],[16628058317667581864,[-21.33333333333337,-4.740740740740733]],[18226408581696793441,[-41.185185185185105,9.7777777777778]]],"stroke":[[3809009367670994230,0],[10686631697241750410,0],[11696351847604335156,0],[13496648265229692336,0],[16628058317667581864,0],[18226408581696793441,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3809009367670994230},{"ty":"Primary","segment":13496648265229692336}],[{"ty":"End","segment":10686631697241750410},{"ty":"Primary","segment":11696351847604335156}],[{"ty":"End","segment":13496648265229692336},{"ty":"Primary","segment":10686631697241750410}],[{"ty":"End","segment":16628058317667581864},{"ty":"Primary","segment":3809009367670994230}],[{"ty":"End","segment":18226408581696793441},{"ty":"Primary","segment":16628058317667581864}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6726954210929537972,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[177515045030371783,4609870404630548899,1458337690478625792,16230687409600568539,8055802412900565217,12390708657704154619,12909592102393222573,6873550371723398444,13416153271806375161,2492294980235986276,12448133448335459077,7624137673235413199],"remove":[],"delta":[[177515045030371783,[604.2883706752018,0.0]],[1458337690478625792,[473.1851851851851,213.62962962962965]],[2492294980235986276,[604.4434936307387,42.970116997735616]],[4609870404630548899,[589.432098765432,64.79012345679011]],[6873550371723398444,[538.6666666666667,136.0]],[7624137673235413199,[617.8765432098766,2.465190328815662e-32]],[8055802412900565217,[480.4444444444445,219.7777777777778]],[12390708657704154619,[596.6748971193416,72.42798353909465]],[12448133448335459077,[610.3703703703706,2.4308653429145085e-63]],[12909592102393222573,[607.8024691358027,0.0]],[13416153271806375161,[531.8518518518517,131.2592592592593]],[16230687409600568539,[491.55555555555554,311.55555555555566]]]},"segments":{"add":[12529947318087068663,5578827639764758986,1705877195608053135,2463526518527501592,9361245670457788924,921651403153242564,9825559201153691780,15749222431214672690,14294722277069184337,4341232355541306629,3818841110886669992],"remove":[5057709998225566481,11060716078587457450,16939098306153440303,17799038492181728804,17843645051722826880],"start_point":[[921651403153242564,4609870404630548899],[1705877195608053135,16230687409600568539],[2463526518527501592,8055802412900565217],[3818841110886669992,7624137673235413199],[4341232355541306629,12390708657704154619],[5578827639764758986,1458337690478625792],[9361245670457788924,6873550371723398444],[9825559201153691780,13416153271806375161],[12529947318087068663,177515045030371783],[14294722277069184337,12448133448335459077],[15749222431214672690,2492294980235986276]],"end_point":[[921651403153242564,13416153271806375161],[1705877195608053135,8055802412900565217],[2463526518527501592,6873550371723398444],[3818841110886669992,12448133448335459077],[4341232355541306629,7624137673235413199],[5578827639764758986,16230687409600568539],[9361245670457788924,12390708657704154619],[9825559201153691780,1458337690478625792],[12529947318087068663,4609870404630548899],[14294722277069184337,2492294980235986276],[15749222431214672690,12909592102393222573]],"handle_primary":[[921651403153242564,[-7.513106110924076,12.956274823940417]],[1705877195608053135,[0.0,0.0]],[2463526518527501592,[9.74414620103056,-24.528368023283747]],[3818841110886669992,[0.0,0.0]],[4341232355541306629,[19.753086419753117,-26.73251028806584]],[5578827639764758986,[-19.25925925925924,60.44444444444443]],[9361245670457788924,[22.844654233974516,-21.876660410500975]],[9825559201153691780,[-30.00610951685011,28.39287782239575]],[12529947318087068663,[0.0,0.0]],[14294722277069184337,[-0.2633744855968416,28.576131687242796]],[15749222431214672690,[3.877242131088792,-22.333682252383095]]],"handle_end":[[921651403153242564,[27.555555555555657,-26.07407407407412]],[1705877195608053135,[-19.33333333333331,48.66666666666666]],[2463526518527501592,[-34.96296296296305,33.481481481481495]],[3818841110886669992,[0.0,0.0]],[4341232355541306629,[0.0,0.0]],[5578827639764758986,[0.0,0.0]],[9361245670457788924,[-16.14969885498249,21.855925783742933]],[9825559201153691780,[6.194184133897295,-19.440208666385132]],[12529947318087068663,[12.90534979423876,-22.255144032921805]],[14294722277069184337,[0.0,0.0]],[15749222431214672690,[0.0,0.0]]],"stroke":[[921651403153242564,0],[1705877195608053135,0],[2463526518527501592,0],[3818841110886669992,0],[4341232355541306629,0],[5578827639764758986,0],[9361245670457788924,0],[9825559201153691780,0],[12529947318087068663,0],[14294722277069184337,0],[15749222431214672690,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":5578827639764758986},{"ty":"End","segment":9825559201153691780}],[{"ty":"Primary","segment":16939098306153440303},{"ty":"End","segment":9361245670457788924}],[{"ty":"End","segment":921651403153242564},{"ty":"Primary","segment":9825559201153691780}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":2463526518527501592}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":17799038492181728804}],[{"ty":"End","segment":2463526518527501592},{"ty":"Primary","segment":9361245670457788924}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":4341232355541306629}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":5057709998225566481}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":17843645051722826880}],[{"ty":"End","segment":11060716078587457450},{"ty":"Primary","segment":5578827639764758986}],[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":921651403153242564}],[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":11060716078587457450}],[{"ty":"End","segment":17799038492181728804},{"ty":"Primary","segment":16939098306153440303}],[{"ty":"End","segment":17843645051722826880},{"ty":"Primary","segment":15749222431214672690}]],"remove_g1_continuous":[[{"ty":"Primary","segment":14294722277069184337},{"ty":"End","segment":3818841110886669992}],[{"ty":"Primary","segment":15749222431214672690},{"ty":"End","segment":14294722277069184337}],[{"ty":"End","segment":4341232355541306629},{"ty":"Primary","segment":3818841110886669992}],[{"ty":"End","segment":5057709998225566481},{"ty":"Primary","segment":14294722277069184337}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6728362629909402903,{"inputs":[{"Node":{"node_id":5856350938151339368,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6787585796949551500,{"inputs":[{"Node":{"node_id":11095670964487764044,"output_index":0}},{"Node":{"node_id":16177422101884031678,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6852799892628327372,{"inputs":[{"Node":{"node_id":2025899804080897524,"output_index":0}},{"Node":{"node_id":16671141883125519098,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7018444885869143173,{"inputs":[{"Node":{"node_id":12234961922142600898,"output_index":0}},{"Node":{"node_id":8426490990601560741,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7029437790788498388,{"inputs":[{"Node":{"node_id":1809704172129195322,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[40.0,0.0,0.0,40.0,-20.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7104088139635280554,{"inputs":[{"Node":{"node_id":16785043320296790229,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7104261880154687267,{"inputs":[{"Node":{"node_id":2834866505092039323,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7201841978411396053,{"inputs":[{"Node":{"node_id":4328376070224119511,"output_index":0}},{"Node":{"node_id":17735408893002232096,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7252918969430566594,{"inputs":[{"Node":{"node_id":5534800796196967885,"output_index":0}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7376049709233607419,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16958489363675356032,7347160684180114694,4322398537034510509,3438797896265725901,16005438712872589849,1674257131044231065,10491326691824745018,9374180853656949931,13358295350421759755,15245407364463454564],"remove":[],"delta":[[1674257131044231065,[829.4320987654323,121.67901234567904]],[3438797896265725901,[795.4567901234569,94.41975308641976]],[4322398537034510509,[776.888888888889,117.53086419753087]],[7347160684180114694,[772.1481481481483,138.66666666666669]],[9374180853656949931,[784.0000000000002,176.98765432098767]],[10491326691824745018,[811.851851851852,148.54320987654322]],[13358295350421759755,[778.4691358024693,177.1851851851852]],[15245407364463454564,[773.530864197531,141.4320987654321]],[16005438712872589849,[817.1851851851852,94.61728395061728]],[16958489363675356032,[658.172839506173,169.08641975308643]]]},"segments":{"add":[11663644781855838202,198953627342130434,8327087349631976772,13015157349146777770,8528911024810728168,3235570761188242773,16847383896493391194,16846650637386857857,3784798568712268630,12873317883441611394],"remove":[],"start_point":[[198953627342130434,7347160684180114694],[3235570761188242773,1674257131044231065],[3784798568712268630,13358295350421759755],[8327087349631976772,4322398537034510509],[8528911024810728168,16005438712872589849],[11663644781855838202,16958489363675356032],[12873317883441611394,15245407364463454564],[13015157349146777770,3438797896265725901],[16846650637386857857,9374180853656949931],[16847383896493391194,10491326691824745018]],"end_point":[[198953627342130434,4322398537034510509],[3235570761188242773,10491326691824745018],[3784798568712268630,15245407364463454564],[8327087349631976772,3438797896265725901],[8528911024810728168,1674257131044231065],[11663644781855838202,7347160684180114694],[12873317883441611394,16958489363675356032],[13015157349146777770,16005438712872589849],[16846650637386857857,13358295350421759755],[16847383896493391194,9374180853656949931]],"handle_primary":[[198953627342130434,[0.0,0.3950617283950635]],[3235570761188242773,[0.1975308641974607,7.703703703703709]],[3784798568712268630,[-2.962962962963161,-10.864197530864232]],[8327087349631976772,[-0.19753086419757435,-13.82716049382715]],[8528911024810728168,[5.530864197530946,5.925925925925924]],[11663644781855838202,[0.0,0.0]],[12873317883441611394,[-19.75308641975323,2.172839506172835]],[13015157349146777770,[0.0,0.0]],[16846650637386857857,[0.0,0.0]],[16847383896493391194,[-17.185185185185105,13.234567901234584]]],"handle_end":[[198953627342130434,[0.19753086419757435,13.82716049382715]],[3235570761188242773,[17.185185185185105,-13.234567901234584]],[3784798568712268630,[2.9629629629629335,5.135802469135797]],[8327087349631976772,[0.0,0.0]],[8528911024810728168,[-0.1975308641974607,-7.703703703703709]],[11663644781855838202,[-74.27160493827171,29.03703703703698]],[12873317883441611394,[33.382716049382566,14.222222222222172]],[13015157349146777770,[-5.530864197530946,-5.925925925925924]],[16846650637386857857,[0.0,0.0]],[16847383896493391194,[0.0,0.0]]],"stroke":[[198953627342130434,0],[3235570761188242773,0],[3784798568712268630,0],[8327087349631976772,0],[8528911024810728168,0],[11663644781855838202,0],[12873317883441611394,0],[13015157349146777770,0],[16846650637386857857,0],[16847383896493391194,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":198953627342130434},{"ty":"Primary","segment":8327087349631976772}],[{"ty":"End","segment":3235570761188242773},{"ty":"Primary","segment":16847383896493391194}],[{"ty":"End","segment":8327087349631976772},{"ty":"Primary","segment":13015157349146777770}],[{"ty":"End","segment":8528911024810728168},{"ty":"Primary","segment":3235570761188242773}],[{"ty":"End","segment":13015157349146777770},{"ty":"Primary","segment":8528911024810728168}],[{"ty":"End","segment":16847383896493391194},{"ty":"Primary","segment":16846650637386857857}]],"remove_g1_continuous":[[{"ty":"End","segment":3784798568712268630},{"ty":"Primary","segment":12873317883441611394}],[{"ty":"End","segment":16846650637386857857},{"ty":"Primary","segment":3784798568712268630}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7480253252288032958,{"inputs":[{"Node":{"node_id":7104261880154687267,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[195.0851086560816,0.0,0.0,195.0851086560816,491.34203769,481.9969791731038]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7651693425519490419,{"inputs":[{"Node":{"node_id":4771789845668099116,"output_index":0}},{"Node":{"node_id":15817956847588799375,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7667878689218439065,{"inputs":[{"Node":{"node_id":18271512507682813443,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7755499790391969923,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7855094781869605606,{"inputs":[{"Node":{"node_id":14141479077115894852,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractBack"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7962101329808960965,{"inputs":[{"Node":{"node_id":16322546010403524636,"output_index":0}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7977952035097419157,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::EllipseNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8269257328703012432,{"inputs":[{"Node":{"node_id":4102754869474520966,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[527.149568302942,0.0,0.0,527.149568302942,969.0,112.62232452533392]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8297015715799006244,{"inputs":[{"Node":{"node_id":17569892869974995307,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,407.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":24.2},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8359580532088731394,{"inputs":[{"Node":{"node_id":6726954210929537972,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[150.17799756170405,0.0,0.0,150.17799756170405,467.6985456481726,155.77777777777783]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8426490990601560741,{"inputs":[{"Node":{"node_id":10760002922115563021,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[234.710547513527,0.0,0.0,234.710547513527,1240.7725840169994,39.84647303257805]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8460565235419043665,{"inputs":[{"Node":{"node_id":3079923906392020295,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,412.1]},"exposed":false}},{"Value":{"tagged_value":{"F64":27.6},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8511737864852441844,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8566844905246185636,{"inputs":[{"Node":{"node_id":6852799892628327372,"output_index":0}},{"Node":{"node_id":17131529656312051452,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8863346544623578893,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5480246971175127548,949359986970918930,6461719056721357962,6265491311473200676],"remove":[947514826240006203],"delta":[[949359986970918930,[0.0,608.0]],[5480246971175127548,[364.0,767.9999999999999]],[6265491311473200676,[-2.273736754432321e-13,768.0000000000001]],[6461719056721357962,[173.33333333333331,506.66666666666674]]]},"segments":{"add":[8951068186878308228,9717584104793611782,15710828508798332384,12480300844056666979],"remove":[6561081452252813685,11231973846952426191,15926511461198813522],"start_point":[[8951068186878308228,6461719056721357962],[9717584104793611782,949359986970918930],[12480300844056666979,6265491311473200676],[15710828508798332384,5480246971175127548]],"end_point":[[8951068186878308228,5480246971175127548],[9717584104793611782,6461719056721357962],[12480300844056666979,949359986970918930],[15710828508798332384,6265491311473200676]],"handle_primary":[[8951068186878308228,[121.00000000000006,-37.99999999999994]],[9717584104793611782,[0.0,0.0]],[12480300844056666979,null],[15710828508798332384,null]],"handle_end":[[8951068186878308228,[-92.0,-81.99999999999989]],[9717584104793611782,[-63.1770926995265,19.84073985604961]],[12480300844056666979,null],[15710828508798332384,null]],"stroke":[[8951068186878308228,0],[9717584104793611782,0],[12480300844056666979,0],[15710828508798332384,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":8951068186878308228},{"ty":"End","segment":9717584104793611782}],[{"ty":"Primary","segment":9717584104793611782},{"ty":"End","segment":12480300844056666979}],[{"ty":"End","segment":6561081452252813685},{"ty":"Primary","segment":9717584104793611782}]],"remove_g1_continuous":[[{"ty":"Primary","segment":11231973846952426191},{"ty":"End","segment":9717584104793611782}],[{"ty":"End","segment":15926511461198813522},{"ty":"Primary","segment":8951068186878308228}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8887924609778270360,{"inputs":[{"Node":{"node_id":5014806436727666175,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9071802450034150503,{"inputs":[{"Node":{"node_id":9338394475379815879,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.0,0.0,0.0,1.0,-0.5,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9135110142507605216,{"inputs":[{"Node":{"node_id":11196821089257149774,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9338394475379815879,{"inputs":[{"Node":{"node_id":7977952035097419157,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1327.0278641242007,11.102707365920756]},"exposed":false}},{"Value":{"tagged_value":{"F64":13.64801326231709},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[230.36030209674013,67.6958526826066]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2.2090991564182537e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9563008199132558110,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[458.37025643097087,0.0,0.0,458.37025643097087,0.0,536.6436095791163]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9808637865669223270,{"inputs":[{"Node":{"node_id":140396870212231820,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[888.3925221020878,0.0,0.0,888.3925221020878,0.0,384.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10063704933309776584,{"inputs":[{"Node":{"node_id":13838011362258067867,"output_index":0}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10080296672372912698,{"inputs":[{"Node":{"node_id":12867379765049504290,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10265035897167064154,{"inputs":[{"Node":{"node_id":14698962747138962125,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[89.4784572749088,0.0,0.0,89.4784572749088,825.6747934624586,531.907924925352]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10286817149456341619,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10786213048155734586,12599396287665855262,6164201091766276213,6781153531246981076,15695128662656633322,8241402276734357681,10333377922713208038,3749627916562964805,2535476870476707501],"remove":[],"delta":[[2535476870476707501,[887.5061728395062,568.6913580246915]],[3749627916562964805,[866.172839506173,558.2222222222224]],[6164201091766276213,[902.9135802469136,506.8641975308643]],[6781153531246981076,[872.6913580246915,513.7777777777779]],[8241402276734357681,[853.3333333333336,529.1851851851854]],[10333377922713208038,[843.4567901234569,550.1234567901236]],[10786213048155734586,[917.7283950617284,502.91358024691374]],[12599396287665855262,[902.5185185185188,498.56790123456807]],[15695128662656633322,[825.6790123456792,509.4320987654323]]]},"segments":{"add":[15700595221504820396,6369399239389505343,17761347836385237495,3021925106447084698,14489254209548096966,3461110970422306113,14847678502054094837,14515109677644612103,264894972572137143],"remove":[],"start_point":[[264894972572137143,2535476870476707501],[3021925106447084698,6781153531246981076],[3461110970422306113,8241402276734357681],[6369399239389505343,12599396287665855262],[14489254209548096966,15695128662656633322],[14515109677644612103,3749627916562964805],[14847678502054094837,10333377922713208038],[15700595221504820396,10786213048155734586],[17761347836385237495,6164201091766276213]],"end_point":[[264894972572137143,10786213048155734586],[3021925106447084698,15695128662656633322],[3461110970422306113,10333377922713208038],[6369399239389505343,6164201091766276213],[14489254209548096966,8241402276734357681],[14515109677644612103,2535476870476707501],[14847678502054094837,3749627916562964805],[15700595221504820396,12599396287665855262],[17761347836385237495,6781153531246981076]],"handle_primary":[[264894972572137143,[0.0,0.0]],[3021925106447084698,[-16.59259259259261,2.370370370370324]],[3461110970422306113,[0.38915905346209456,1.493515242756871]],[6369399239389505343,[-7.1111111111111995,-5.530864197530889]],[14489254209548096966,[-0.3950434518873181,1.0617032941893854]],[14515109677644612103,[8.888888888888914,0.0]],[14847678502054094837,[0.7901234567900701,2.765432098765473]],[15700595221504820396,[0.0,0.0]],[17761347836385237495,[0.0,0.0]]],"handle_end":[[264894972572137143,[3.753086419753003,37.1358024691358]],[3021925106447084698,[0.5488119028742631,-1.474965354794051]],[3461110970422306113,[-0.7901234567900701,-2.765432098765473]],[6369399239389505343,[0.0,0.0]],[14489254209548096966,[-0.5712718875797691,-2.192428171126153]],[14515109677644612103,[0.0,0.0]],[14847678502054094837,[-8.888888888888914,0.0]],[15700595221504820396,[7.1111111111111995,5.530864197530889]],[17761347836385237495,[16.59259259259261,-2.370370370370324]]],"stroke":[[264894972572137143,0],[3021925106447084698,0],[3461110970422306113,0],[6369399239389505343,0],[14489254209548096966,0],[14515109677644612103,0],[14847678502054094837,0],[15700595221504820396,0],[17761347836385237495,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3021925106447084698},{"ty":"Primary","segment":14489254209548096966}],[{"ty":"End","segment":3461110970422306113},{"ty":"Primary","segment":14847678502054094837}],[{"ty":"End","segment":6369399239389505343},{"ty":"Primary","segment":17761347836385237495}],[{"ty":"End","segment":14489254209548096966},{"ty":"Primary","segment":3461110970422306113}],[{"ty":"End","segment":14515109677644612103},{"ty":"Primary","segment":264894972572137143}],[{"ty":"End","segment":14847678502054094837},{"ty":"Primary","segment":14515109677644612103}],[{"ty":"End","segment":15700595221504820396},{"ty":"Primary","segment":6369399239389505343}],[{"ty":"End","segment":17761347836385237495},{"ty":"Primary","segment":3021925106447084698}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10760002922115563021,{"inputs":[{"Node":{"node_id":14257963317028524134,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10995640810984321903,{"inputs":[{"Node":{"node_id":12353675714904258944,"output_index":0}},{"Node":{"node_id":10265035897167064154,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11095670964487764044,{"inputs":[{"Node":{"node_id":17603523494627491590,"output_index":0}},{"Node":{"node_id":8359580532088731394,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11196821089257149774,{"inputs":[{"Node":{"node_id":5888633415105234509,"output_index":0}},{"Node":{"node_id":18031616785650843168,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11201759760883367635,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5173348374891662425,12314285668680405002,7388288026322342161,12796056970187696453],"remove":[],"delta":[[5173348374891662425,[969.0,0.0]],[7388288026322342161,[1277.0,319.0]],[12314285668680405002,[1085.0,181.0]],[12796056970187696453,[1418.0,0.0]]]},"segments":{"add":[10860608091363771974,9177623211202289793,18091265337503274797,9065140293539496953],"remove":[],"start_point":[[9065140293539496953,12796056970187696453],[9177623211202289793,12314285668680405002],[10860608091363771974,5173348374891662425],[18091265337503274797,7388288026322342161]],"end_point":[[9065140293539496953,5173348374891662425],[9177623211202289793,7388288026322342161],[10860608091363771974,12314285668680405002],[18091265337503274797,12796056970187696453]],"handle_primary":[[9065140293539496953,[0.0,0.0]],[9177623211202289793,[-33.0,137.0]],[10860608091363771974,[0.0,0.0]],[18091265337503274797,[178.0,-35.0]]],"handle_end":[[9065140293539496953,[0.0,0.0]],[9177623211202289793,[-77.81941867085992,15.301571086966838]],[10860608091363771974,[25.066898104916696,-104.0656072840481]],[18091265337503274797,[168.99998492988766,81.0]]],"stroke":[[9065140293539496953,0],[9177623211202289793,0],[10860608091363771974,0],[18091265337503274797,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9177623211202289793},{"ty":"Primary","segment":18091265337503274797}],[{"ty":"End","segment":10860608091363771974},{"ty":"Primary","segment":9177623211202289793}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11210964267417873667,{"inputs":[{"Node":{"node_id":4261249487994076490,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[91.7203910728,-99.9607940061]},"exposed":false}},{"Value":{"tagged_value":{"F64":23.318559511400004},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11264395591110193456,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11301831865756336526,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3251241957527197760,11100418327549747778,8048619563638005414,1078998931754662073],"remove":[],"delta":[[1078998931754662073,[942.0246913580248,264.2962962962963]],[3251241957527197760,[875.8001811251517,185.6784024477276]],[8048619563638005414,[944.0577392578124,302.0703430175781]],[11100418327549747778,[910.880658436214,243.0946502057613]]]},"segments":{"add":[6165219920202055745,10795897848378052161,3439025775805007707,12551435438068218604],"remove":[],"start_point":[[3439025775805007707,8048619563638005414],[6165219920202055745,3251241957527197760],[10795897848378052161,11100418327549747778],[12551435438068218604,1078998931754662073]],"end_point":[[3439025775805007707,1078998931754662073],[6165219920202055745,11100418327549747778],[10795897848378052161,8048619563638005414],[12551435438068218604,3251241957527197760]],"handle_primary":[[3439025775805007707,[-2.629814161991817e-6,5.151861046215345e-6]],[6165219920202055745,[0.0,0.0]],[10795897848378052161,[11.46027223334628,13.82427457744465]],[12551435438068218604,[-14.61728395061732,-27.456790123456813]]],"handle_end":[[3439025775805007707,[14.61728395061732,27.456790123456813]],[6165219920202055745,[-29.36625514403283,-35.42386831275718]],[10795897848378052161,[-4.732636377154108,-19.33783272951229]],[12551435438068218604,[23.33217876876199,5.204454965879364]]],"stroke":[[3439025775805007707,0],[6165219920202055745,0],[10795897848378052161,0],[12551435438068218604,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3439025775805007707},{"ty":"Primary","segment":12551435438068218604}],[{"ty":"End","segment":6165219920202055745},{"ty":"Primary","segment":10795897848378052161}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11373527190663101881,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[12058665768506126331,6802441093413090533,4854280308383915721,17729943149159368459,7436032950540776377,2189722519288419244,15817054697695831753,15744271344233846756,13877679667762731651,13567509413382199058,5664077098702810122,14178520291283306679,15575201098426093294],"remove":[],"delta":[[2189722519288419244,[796.0493827160494,202.2716049382716]],[4854280308383915721,[813.9259259259259,200.2962962962963]],[5664077098702810122,[686.5185185185185,191.1111111111111]],[6802441093413090533,[783.4074074074074,172.74074074074073]],[7436032950540776377,[815.4074074074074,203.25925925925927]],[12058665768506126331,[693.7283950617283,174.35390946502056]],[13567509413382199058,[702.6831275720166,195.95061728395063]],[13877679667762731651,[743.4074074074074,234.66666666666669]],[14178520291283306679,[668.4444444444443,183.1111111111111]],[15575201098426093294,[636.7407407407406,173.33333333333331]],[15744271344233846756,[785.7777777777777,205.62962962962965]],[15817054697695831753,[806.716049382716,206.22222222222223]],[17729943149159368459,[801.1851851851852,199.90123456790124]]]},"segments":{"add":[2336956120616260883,1639796012074210121,3918280827204321712,13932755083907220179,14941832641240060361,94092576912261794,18299135553255571870,3109091330258982137,11037018395008586448,16261506098907231989,8279051592565434787,2367379450383978497,5102625335252315850],"remove":[],"start_point":[[94092576912261794,2189722519288419244],[1639796012074210121,6802441093413090533],[2336956120616260883,12058665768506126331],[2367379450383978497,14178520291283306679],[3109091330258982137,15744271344233846756],[3918280827204321712,4854280308383915721],[5102625335252315850,15575201098426093294],[8279051592565434787,5664077098702810122],[11037018395008586448,13877679667762731651],[13932755083907220179,17729943149159368459],[14941832641240060361,7436032950540776377],[16261506098907231989,13567509413382199058],[18299135553255571870,15817054697695831753]],"end_point":[[94092576912261794,15817054697695831753],[1639796012074210121,4854280308383915721],[2336956120616260883,6802441093413090533],[2367379450383978497,15575201098426093294],[3109091330258982137,13877679667762731651],[3918280827204321712,17729943149159368459],[5102625335252315850,12058665768506126331],[8279051592565434787,14178520291283306679],[11037018395008586448,13567509413382199058],[13932755083907220179,7436032950540776377],[14941832641240060361,2189722519288419244],[16261506098907231989,5664077098702810122],[18299135553255571870,15744271344233846756]],"handle_primary":[[94092576912261794,[0.0,0.0]],[1639796012074210121,[0.0,0.0]],[2336956120616260883,[0.0,0.0]],[2367379450383978497,[-5.037037037036953,-1.7777777777777717]],[3109091330258982137,[0.0,0.0]],[3918280827204321712,[0.0,0.0]],[5102625335252315850,[0.0,0.0]],[8279051592565434787,[-16.75720164609038,-2.1399176954732297]],[11037018395008586448,[0.0,0.0]],[13932755083907220179,[0.0,0.0]],[14941832641240060361,[0.0,0.0]],[16261506098907231989,[0.0,0.0]],[18299135553255571870,[0.0,0.0]]],"handle_end":[[94092576912261794,[0.0,0.0]],[1639796012074210121,[-19.259259259259352,-3.259259259259238]],[2336956120616260883,[-65.77777777777783,13.333333333333314]],[2367379450383978497,[12.740740740740648,5.037037037037038]],[3109091330258982137,[18.962962962963047,2.074074074074048]],[3918280827204321712,[0.0,0.0]],[5102625335252315850,[-27.12757201646093,2.633744855967052]],[8279051592565434787,[5.037037037036953,1.7777777777777717]],[11037018395008586448,[13.168724279835374,22.12345679012344]],[13932755083907220179,[0.0,0.0]],[14941832641240060361,[7.1111111111111995,1.7777777777778]],[16261506098907231989,[12.1395654462896,1.5502392023748983]],[18299135553255571870,[10.07407407407402,2.7654320987654444]]],"stroke":[[94092576912261794,0],[1639796012074210121,0],[2336956120616260883,0],[2367379450383978497,0],[3109091330258982137,0],[3918280827204321712,0],[5102625335252315850,0],[8279051592565434787,0],[11037018395008586448,0],[13932755083907220179,0],[14941832641240060361,0],[16261506098907231989,0],[18299135553255571870,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":94092576912261794},{"ty":"Primary","segment":18299135553255571870}],[{"ty":"End","segment":3918280827204321712},{"ty":"Primary","segment":13932755083907220179}],[{"ty":"End","segment":8279051592565434787},{"ty":"Primary","segment":2367379450383978497}],[{"ty":"End","segment":13932755083907220179},{"ty":"Primary","segment":14941832641240060361}],[{"ty":"End","segment":16261506098907231989},{"ty":"Primary","segment":8279051592565434787}]],"remove_g1_continuous":[[{"ty":"Primary","segment":16261506098907231989},{"ty":"End","segment":11037018395008586448}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11429506195623419966,{"inputs":[{"Node":{"node_id":11301831865756336526,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12145355397916841389,{"inputs":[{"Node":{"node_id":16759836951269190891,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[68.25755961943753,0.0,0.0,68.25755961943753,875.80018113,243.8743691861964]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12185047359007423618,{"inputs":[{"Node":{"node_id":10080296672372912698,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[481.3353038697805,0.0,0.0,481.3353038697805,4.508582931765269e-6,621.08062448]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12234961922142600898,{"inputs":[{"Node":{"node_id":1627123781166851142,"output_index":0}},{"Node":{"node_id":18351415092709164412,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12276520439585231336,{"inputs":[{"Node":{"node_id":13795432594059356320,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[997.5029638869316,545.7213923090854]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12353675714904258944,{"inputs":[{"Node":{"node_id":13203761224559198689,"output_index":0}},{"Node":{"node_id":17271572793812678706,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12494428953087324640,{"inputs":[{"Node":{"node_id":8511737864852441844,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12709602171929957216,{"inputs":[{"Node":{"node_id":17753909951719808506,"output_index":0}},{"Node":{"node_id":12922148192688274227,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12741076678082295759,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12770183061753030023,{"inputs":[{"Node":{"node_id":17495267820524300686,"output_index":0}},{"Node":{"node_id":1009114585722052052,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12867379765049504290,{"inputs":[{"Node":{"node_id":6445954214067437701,"output_index":0}},{"Node":{"node_id":8863346544623578893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12922148192688274227,{"inputs":[{"Node":{"node_id":18188505856445531484,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13027689870767713939,{"inputs":[{"Node":{"node_id":7201841978411396053,"output_index":0}},{"Node":{"node_id":13340751444307201866,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13203761224559198689,{"inputs":[{"Node":{"node_id":4809200889774783438,"output_index":0}},{"Node":{"node_id":14690269209726153565,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13340751444307201866,{"inputs":[{"Node":{"node_id":9135110142507605216,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[282.7272727300001,0.0,0.0,282.7272727300001,1019.77569116,696.2227208237161]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13353438235848911576,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6379137305818664393,18442321214082298093,18118267825025549699,6351696498298648253,17863574903157697896,4691860614575868200,301778328144628917,10625296323957562985,533731991408535384,13357220652574593654,15992617814592812350],"remove":[],"delta":[[301778328144628917,[493.5149940383244,200.29629629629628]],[533731991408535384,[501.6296296296296,175.40740740740742]],[4691860614575868200,[528.2962962962963,283.8518518518518]],[6351696498298648253,[646.8148148148149,0.0]],[6379137305818664393,[625.4814814814813,0.0]],[10625296323957562985,[473.4814814814815,272.5925925925926]],[13357220652574593654,[574.2222222222222,108.44444444444449]],[15992617814592812350,[621.0370370370368,0.0]],[17863574903157697896,[606.8148151308641,95.19407372365433]],[18118267825025549699,[642.0740740740741,0.0]],[18442321214082298093,[565.6296296296297,122.96296296296298]]]},"segments":{"add":[13662059715350867364,3384102572540409881,12035095010819582754,10146665273368938971,318560030360358929,8462655819889292900,3303411878775644985,8661113083384527971,2035327810332855521,11346538709718766144,3710133387837274291],"remove":[],"start_point":[[318560030360358929,17863574903157697896],[2035327810332855521,533731991408535384],[3303411878775644985,301778328144628917],[3384102572540409881,18442321214082298093],[3710133387837274291,15992617814592812350],[8462655819889292900,4691860614575868200],[8661113083384527971,10625296323957562985],[10146665273368938971,6351696498298648253],[11346538709718766144,13357220652574593654],[12035095010819582754,18118267825025549699],[13662059715350867364,6379137305818664393]],"end_point":[[318560030360358929,4691860614575868200],[2035327810332855521,13357220652574593654],[3303411878775644985,10625296323957562985],[3384102572540409881,18118267825025549699],[3710133387837274291,6379137305818664393],[8462655819889292900,301778328144628917],[8661113083384527971,533731991408535384],[10146665273368938971,17863574903157697896],[11346538709718766144,15992617814592812350],[12035095010819582754,6351696498298648253],[13662059715350867364,18442321214082298093]],"handle_primary":[[318560030360358929,[-46.95465552079859,46.40007297527743]],[2035327810332855521,[42.96296296296293,-41.7777777777778]],[3303411878775644985,[0.0,0.0]],[3384102572540409881,[0.0,0.0]],[3710133387837274291,[0.0,0.0]],[8462655819889292900,[0.0,0.0]],[8661113083384527971,[0.2962962962963047,0.2962962962963047]],[10146665273368938971,[0.0,0.0]],[11346538709718766144,[9.925839724176626,-9.951533978271286]],[12035095010819582754,[0.0,0.0]],[13662059715350867364,[0.0,0.0]]],"handle_end":[[318560030360358929,[-97.48148148148152,-81.18518518518522]],[2035327810332855521,[-8.299214014278164,8.32069754812484]],[3303411878775644985,[-6.2222222222222285,-40.59259259259261]],[3384102572540409881,[0.5807410754567854,77.36888852918523]],[3710133387837274291,[0.0,0.0]],[8462655819889292900,[-21.74426522093495,47.99999999999997]],[8661113083384527971,[-42.34888386913234,41.180638796880466]],[10146665273368938971,[48.16592595101224,-47.597037061827145]],[11346538709718766144,[1.1377781018271662,63.71555518874077]],[12035095010819582754,[0.0,0.0]],[13662059715350867364,[68.68148181185177,-54.8859262904691]]],"stroke":[[318560030360358929,0],[2035327810332855521,0],[3303411878775644985,0],[3384102572540409881,0],[3710133387837274291,0],[8462655819889292900,0],[8661113083384527971,0],[10146665273368938971,0],[11346538709718766144,0],[12035095010819582754,0],[13662059715350867364,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":11346538709718766144},{"ty":"End","segment":2035327810332855521}],[{"ty":"End","segment":8661113083384527971},{"ty":"Primary","segment":2035327810332855521}],[{"ty":"End","segment":10146665273368938971},{"ty":"Primary","segment":318560030360358929}],[{"ty":"End","segment":12035095010819582754},{"ty":"Primary","segment":10146665273368938971}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13446205009526451196,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[607.3671611941124,0.0,0.0,607.3671611941124,491.3420376907663,522.6595364267962]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13588160462734303101,{"inputs":[{"Node":{"node_id":17036604842139972912,"output_index":0}},{"Node":{"node_id":4301099429811409147,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13616602029989984195,{"inputs":[{"Node":{"node_id":3050731459444225191,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FlattenPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13646498613066619660,{"inputs":[{"Node":{"node_id":12741076678082295759,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13670206802546093234,{"inputs":[{"Node":{"node_id":17285637344898461972,"output_index":0}},{"Node":{"node_id":7855094781869605606,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13739729101529293427,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0}},{"Node":{"node_id":14139765080256493579,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13795432594059356320,{"inputs":[{"Node":{"node_id":2871608309888343463,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FlattenPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13838011362258067867,{"inputs":[{"Node":{"node_id":4631655038168471552,"output_index":0}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CentroidNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13916027199283115943,{"inputs":[{"Node":{"node_id":6194305264313730032,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[169.44484144071157,0.0,0.0,169.44484144071157,646.5386761620425,316.2510468037574]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14030142873804552388,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[11163144542703672167,7233902871991446034,9403888920678312544,5714042674660607880,9912917483675332510],"remove":[],"delta":[[5714042674660607880,[1536.0,0.0]],[7233902871991446034,[908.0,134.0]],[9403888920678312544,[1271.0,199.0]],[9912917483675332510,[1536.0,254.00000000000009]],[11163144542703672167,[763.0,0.0]]]},"segments":{"add":[7099980686025805826,11879054056208937348,7804540624589615499,3118709054343469746,12085471811343146506],"remove":[8174738144062904321],"start_point":[[3118709054343469746,9403888920678312544],[7099980686025805826,11163144542703672167],[7804540624589615499,5714042674660607880],[11879054056208937348,7233902871991446034],[12085471811343146506,9912917483675332510]],"end_point":[[3118709054343469746,9912917483675332510],[7099980686025805826,7233902871991446034],[7804540624589615499,11163144542703672167],[11879054056208937348,9403888920678312544],[12085471811343146506,5714042674660607880]],"handle_primary":[[3118709054343469746,[191.0,-106.0]],[7099980686025805826,[0.0,0.0]],[7804540624589615499,[0.0,0.0]],[11879054056208937348,[68.41365603453937,54.51084151791355]],[12085471811343146506,[0.0,0.0]]],"handle_end":[[3118709054343469746,[0.0,0.0]],[7099980686025805826,[-68.41365603453914,-54.51084151791349]],[7804540624589615499,[0.0,0.0]],[11879054056208937348,[-121.83694366711715,67.61631428646292]],[12085471811343146506,[0.0,0.0]]],"stroke":[[3118709054343469746,0],[7099980686025805826,0],[7804540624589615499,0],[11879054056208937348,0],[12085471811343146506,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":7099980686025805826},{"ty":"Primary","segment":11879054056208937348}],[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":3118709054343469746}],[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":8174738144062904321}]],"remove_g1_continuous":[[{"ty":"End","segment":3118709054343469746},{"ty":"Primary","segment":12085471811343146506}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14139129879376457893,{"inputs":[{"Node":{"node_id":11373527190663101881,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[178.66666666666674,0.0,0.0,178.66666666666674,636.7407407407406,203.7533433537596]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14139765080256493579,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3507505346656189771,2904729023031858224,854708012647259796,4175610638601362388,7821224334582795476,2195807584570698921],"remove":[1009888023123207923,16332448509429125699],"delta":[[854708012647259796,[740.0,298.0]],[2195807584570698921,[993.0,767.9999999999999]],[2904729023031858224,[491.3420376907663,506.7530051313737]],[3507505346656189771,[552.0,768.0000000000001]],[4175610638601362388,[957.0,324.0]],[7821224334582795476,[1093.0,600.0]]]},"segments":{"add":[4553965744616493549,13993263006398686359,6577640955869157325,17304574948462342226,8570276641842028192,17183285389582020412],"remove":[546565283439891712,5710832026764395735],"start_point":[[4553965744616493549,3507505346656189771],[6577640955869157325,854708012647259796],[8570276641842028192,2195807584570698921],[13993263006398686359,2904729023031858224],[17183285389582020412,7821224334582795476],[17304574948462342226,4175610638601362388]],"end_point":[[4553965744616493549,2904729023031858224],[6577640955869157325,4175610638601362388],[8570276641842028192,3507505346656189771],[13993263006398686359,854708012647259796],[17183285389582020412,2195807584570698921],[17304574948462342226,7821224334582795476]],"handle_primary":[[4553965744616493549,[0.0,0.0]],[6577640955869157325,[102.0,-45.0]],[8570276641842028192,[0.0,0.0]],[13993263006398686359,[0.0,-84.7537417270637]],[17183285389582020412,[-24.08196064282073,82.4624712920831]],[17304574948462342226,[50.35246044959922,33.38607084805801]]],"handle_end":[[4553965744616493549,[0.0,135.2464055295568]],[6577640955869157325,[-50.35246044959922,-33.38607084805801]],[8570276641842028192,[0.0,0.0]],[13993263006398686359,[-102.0,45.0]],[17183285389582020412,[0.0,0.0]],[17304574948462342226,[33.0,-113.0]]],"stroke":[[4553965744616493549,0],[6577640955869157325,0],[8570276641842028192,0],[13993263006398686359,0],[17183285389582020412,0],[17304574948462342226,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":17183285389582020412}],[{"ty":"End","segment":4553965744616493549},{"ty":"Primary","segment":13993263006398686359}],[{"ty":"End","segment":6577640955869157325},{"ty":"Primary","segment":17304574948462342226}],[{"ty":"End","segment":13993263006398686359},{"ty":"Primary","segment":6577640955869157325}],[{"ty":"End","segment":17304574948462342226},{"ty":"Primary","segment":17183285389582020412}]],"remove_g1_continuous":[[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":546565283439891712}],[{"ty":"End","segment":546565283439891712},{"ty":"Primary","segment":5710832026764395735}],[{"ty":"End","segment":5710832026764395735},{"ty":"Primary","segment":8570276641842028192}],[{"ty":"End","segment":17183285389582020412},{"ty":"Primary","segment":546565283439891712}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14141479077115894852,{"inputs":[{"Node":{"node_id":15433707377961038695,"output_index":0}},{"Node":{"node_id":17285637344898461972,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14228923746783465609,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[2003133867055127539,13758328146055368475],"remove":[],"delta":[[2003133867055127539,[1011.111083984375,786.3993530273438]],[4648964341912884959,[324.66666666666646,0.0]],[13758328146055368475,[1299.3064572949788,786.3993743175897]],[16569120368910754547,[-43.0,0.0]]]},"segments":{"add":[8214025514312603513,7334532063810723038,13431612844608018700],"remove":[3433930674303663828,6602880736207868665],"start_point":[[7334532063810723038,16569120368910754547],[8214025514312603513,2003133867055127539],[13431612844608018700,13758328146055368475]],"end_point":[[7334532063810723038,13758328146055368475],[8214025514312603513,4648964341912884959],[13431612844608018700,2003133867055127539]],"handle_primary":[[7334532063810723038,null],[8214025514312603513,null],[9030015329489789075,[69.08057198853999,-80.19415805947563]],[13431612844608018700,null]],"handle_end":[[2197140374690997530,[-24.333333333333485,-86.99999999999977]],[7334532063810723038,null],[8214025514312603513,null],[9030015329489789075,[0.0,0.0]],[13431612844608018700,null]],"stroke":[[7334532063810723038,0],[8214025514312603513,0],[13431612844608018700,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}],[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14257963317028524134,{"inputs":[{"Node":{"node_id":1001728975241745659,"output_index":0}},{"Node":{"node_id":6503655938154160104,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14496934933990319842,{"inputs":[{"Node":{"node_id":12709602171929957216,"output_index":0}},{"Node":{"node_id":12185047359007423618,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14516211820212764316,{"inputs":[{"Node":{"node_id":2124231869409556689,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,416.7]},"exposed":false}},{"Value":{"tagged_value":{"F64":31.0},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14684142559936015947,{"inputs":[{"Node":{"node_id":15930698052919171086,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[363.2053341412762,0.0,0.0,363.2053341412762,283.33331299,403.05062893883354]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14690269209726153565,{"inputs":[{"Node":{"node_id":7376049709233607419,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[171.283740991434,0.0,0.0,171.283740991434,658.172839506173,134.55825936128966]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14698962747138962125,{"inputs":[{"Node":{"node_id":17562801632450633291,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14808063168960305551,{"inputs":[{"Node":{"node_id":14496934933990319842,"output_index":0}},{"Node":{"node_id":3471746866096043087,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14950060858756810933,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[9346093213164033195,3249248431686392864,9577388580635291078],"remove":[],"delta":[[3249248431686392864,[1536.0,95.0]],[9346093213164033195,[1211.0,0.0]],[9577388580635291078,[1536.0,0.0]]]},"segments":{"add":[9585086796709645600,13980191878100735848,1147165232046305110],"remove":[],"start_point":[[1147165232046305110,9577388580635291078],[9585086796709645600,9346093213164033195],[13980191878100735848,3249248431686392864]],"end_point":[[1147165232046305110,9346093213164033195],[9585086796709645600,3249248431686392864],[13980191878100735848,9577388580635291078]],"handle_primary":[[1147165232046305110,[0.0,0.0]],[9585086796709645600,[0.0,0.0]],[13980191878100735848,[4.547473508864641e-13,2.8421709430404014e-14]]],"handle_end":[[1147165232046305110,[0.0,0.0]],[9585086796709645600,[-281.0,-17.00000000000003]],[13980191878100735848,[0.0,0.0]]],"stroke":[[1147165232046305110,0],[9585086796709645600,0],[13980191878100735848,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13980191878100735848},{"ty":"Primary","segment":1147165232046305110}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15301503532602557206,{"inputs":[{"Node":{"node_id":6728362629909402903,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15354358358546908017,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[325.00000000000045,0.0,0.0,325.00000000000045,1211.0,47.50000000000001]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15433707377961038695,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16723991032614525258,1623125309784127684,7209807874503344461,3123395482103162919,2668496811386192321],"remove":[12344391980636687302],"delta":[[1623125309784127684,[643.9258958566198,633.6997633965701]],[2668496811386192321,[0.0,768.0]],[3123395482103162919,[-2.273736754432321e-13,689.0]],[7209807874503344461,[188.0,694.6666666666669]],[16723991032614525258,[553.0000000000001,768.0]]]},"segments":{"add":[3656277643115996070,6789459806904610761,16287649713110748258,16456150086799119359,1652964032977338610],"remove":[1848051273241122771],"start_point":[[1652964032977338610,7209807874503344461],[3656277643115996070,16723991032614525258],[6789459806904610761,1623125309784127684],[16287649713110748258,3123395482103162919],[16456150086799119359,2668496811386192321]],"end_point":[[1652964032977338610,3123395482103162919],[3656277643115996070,1623125309784127684],[6789459806904610761,7209807874503344461],[16287649713110748258,2668496811386192321],[16456150086799119359,16723991032614525258]],"handle_primary":[[1652964032977338610,[-81.48609837852206,84.6759456460087]],[3656277643115996070,[0.0,0.0]],[6789459806904610761,[-213.92589585661983,-68.82675604113183]],[16287649713110748258,[0.0,0.0]],[16456150086799119359,[0.0,0.0]]],"handle_end":[[1652964032977338610,[56.00000000000023,11.0]],[3656277643115996070,[0.0,0.0]],[6789459806904610761,[187.33333333333343,-194.6666666666667]],[16287649713110748258,[0.0,0.0]],[16456150086799119359,[0.0,0.0]]],"stroke":[[1652964032977338610,0],[3656277643115996070,0],[6789459806904610761,0],[16287649713110748258,0],[16456150086799119359,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":6789459806904610761},{"ty":"Primary","segment":1652964032977338610}],[{"ty":"End","segment":16287649713110748258},{"ty":"Primary","segment":16456150086799119359}]],"remove_g1_continuous":[[{"ty":"End","segment":1652964032977338610},{"ty":"Primary","segment":1848051273241122771}],[{"ty":"End","segment":3656277643115996070},{"ty":"Primary","segment":6789459806904610761}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15692102598187739001,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0}},{"Node":{"node_id":11201759760883367635,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15817956847588799375,{"inputs":[{"Node":{"node_id":11201759760883367635,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[527.1495683106159,0.0,0.0,527.1495683106159,969.0,161.84412997855503]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15877481873925059044,{"inputs":[{"Node":{"node_id":17299978721726771610,"output_index":0}},{"Node":{"node_id":7252918969430566594,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15900830679378240619,{"inputs":[{"Node":{"node_id":2287485748649359627,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15930698052919171086,{"inputs":[{"Node":{"node_id":13739729101529293427,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16177422101884031678,{"inputs":[{"Node":{"node_id":13353438235848911576,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[176.0175600653091,0.0,0.0,176.0175600653091,471.3208393216603,141.9259259259259]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16304636129468583592,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4648964341912884959,10156053545530752213,16569120368910754547],"remove":[],"delta":[[4648964341912884959,[665.0000000000001,768.0]],[10156053545530752213,[1094.162353515625,594.2965698242188]],[16569120368910754547,[1361.0,768.0]]]},"segments":{"add":[9030015329489789075,2197140374690997530,3433930674303663828],"remove":[],"start_point":[[2197140374690997530,10156053545530752213],[3433930674303663828,16569120368910754547],[9030015329489789075,4648964341912884959]],"end_point":[[2197140374690997530,16569120368910754547],[3433930674303663828,4648964341912884959],[9030015329489789075,10156053545530752213]],"handle_primary":[[2197140374690997530,[79.20069951994813,30.807024746222492]],[3433930674303663828,[0.0,0.0]],[9030015329489789075,[32.66666666666663,-95.99999999999989]]],"handle_end":[[2197140374690997530,[-24.333333333333485,-86.99999999999977]],[3433930674303663828,[0.0,0.0]],[9030015329489789075,[-238.88331323750492,-92.9194336284096]]],"stroke":[[2197140374690997530,0],[3433930674303663828,0],[9030015329489789075,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}]],"remove_g1_continuous":[[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}],[{"ty":"End","segment":2197140374690997530},{"ty":"Primary","segment":3433930674303663828}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16306737306999003555,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6082833770141706533,7903705226822768120,17147466439590042359,13341364271767916194],"remove":[],"delta":[[6082833770141706533,[504.0987654320987,184.6255144032922]],[7903705226822768120,[497.3827160493826,248.88888888888889]],[13341364271767916194,[262.22222222222223,364.1481481481481]],[17147466439590042359,[526.0109927536641,282.1042175292969]]]},"segments":{"add":[14649965831690031908,801877719748058643,9659144961849433642,2255088856072565305],"remove":[],"start_point":[[801877719748058643,7903705226822768120],[2255088856072565305,13341364271767916194],[9659144961849433642,17147466439590042359],[14649965831690031908,6082833770141706533]],"end_point":[[801877719748058643,17147466439590042359],[2255088856072565305,6082833770141706533],[9659144961849433642,13341364271767916194],[14649965831690031908,7903705226822768120]],"handle_primary":[[801877719748058643,[13.173601585124231,23.615912208504938]],[2255088856072565305,[0.0,0.0]],[9659144961849433642,[0.0,0.0]],[14649965831690031908,[0.0,0.0]]],"handle_end":[[801877719748058643,[0.0,0.0]],[2255088856072565305,[-112.09876543209862,43.81893004115227]],[9659144961849433642,[195.55555555555569,-16.14814814814804]],[14649965831690031908,[-17.920501046401128,-32.12553353079403]]],"stroke":[[801877719748058643,0],[2255088856072565305,0],[9659144961849433642,0],[14649965831690031908,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":801877719748058643},{"ty":"Primary","segment":9659144961849433642}],[{"ty":"End","segment":14649965831690031908},{"ty":"Primary","segment":801877719748058643}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16322546010403524636,{"inputs":[{"Node":{"node_id":5556372312033787775,"output_index":0}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CentroidNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16609137733952262762,{"inputs":[{"Node":{"node_id":17397123104674848450,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[429.5019320528745,0.0,0.0,429.5019320528745,665.0,667.730301691078]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16671141883125519098,{"inputs":[{"Node":{"node_id":16306737306999003555,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[263.7887705314419,0.0,0.0,263.7887705314419,262.22222222222223,274.38683127572017]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16759836951269190891,{"inputs":[{"Node":{"node_id":11429506195623419966,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16780039553038473906,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":7104088139635280554,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16785043320296790229,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17036604842139972912,{"inputs":[{"Node":{"node_id":1491840484128555837,"output_index":0}},{"Node":{"node_id":11210964267417873667,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17056531964793634106,{"inputs":[{"Node":{"node_id":990192925663920333,"output_index":0}},{"Node":{"node_id":10063704933309776584,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17131529656312051452,{"inputs":[{"Node":{"node_id":13646498613066619660,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[454.33208956300984,0.0,0.0,454.33208956300984,491.34203769,522.6595364265843]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17223836790030950966,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[773.0,0.0,0.0,773.0,763.0,127.00000000000004]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17271572793812678706,{"inputs":[{"Node":{"node_id":15900830679378240619,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[124.4529078498622,0.0,0.0,124.4529078498622,818.975318349616,359.5074323866861]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17285637344898461972,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16608607268690234590,17457877227823502997,13436129231170586617,5992570223148766873],"remove":[],"delta":[[5992570223148766873,[-2.273736754432321e-13,768.0]],[13436129231170586617,[481.3333333333333,768.0]],[16608607268690234590,[0.0,340.0]],[17457877227823502997,[273.0,476.0]]]},"segments":{"add":[13284808974014161135,5472571334856691465,8776124420595946733,4274372337254864190],"remove":[],"start_point":[[4274372337254864190,5992570223148766873],[5472571334856691465,17457877227823502997],[8776124420595946733,13436129231170586617],[13284808974014161135,16608607268690234590]],"end_point":[[4274372337254864190,16608607268690234590],[5472571334856691465,13436129231170586617],[8776124420595946733,5992570223148766873],[13284808974014161135,17457877227823502997]],"handle_primary":[[4274372337254864190,[0.0,0.0]],[5472571334856691465,[146.0,-13.0]],[8776124420595946733,[0.0,0.0]],[13284808974014161135,[161.73791370620617,43.57576470888159]]],"handle_end":[[4274372337254864190,[0.0,0.0]],[5472571334856691465,[0.4078646547782227,-253.307727480567]],[8776124420595946733,[0.0,0.0]],[13284808974014161135,[-165.43581782916667,14.730586519035386]]],"stroke":[[4274372337254864190,0],[5472571334856691465,0],[8776124420595946733,0],[13284808974014161135,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":8776124420595946733},{"ty":"Primary","segment":4274372337254864190}],[{"ty":"End","segment":13284808974014161135},{"ty":"Primary","segment":5472571334856691465}]],"remove_g1_continuous":[[{"ty":"Primary","segment":13284808974014161135},{"ty":"End","segment":4274372337254864190}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17299978721726771610,{"inputs":[{"Node":{"node_id":7029437790788498388,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[459.4,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-8.6},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17351444026127625357,{"inputs":[{"Node":{"node_id":14808063168960305551,"output_index":0}},{"Node":{"node_id":13916027199283115943,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17397123104674848450,{"inputs":[{"Node":{"node_id":1662641269094032596,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17495267820524300686,{"inputs":[{"Node":{"node_id":13616602029989984195,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1248.4973005620557,-153.1867628889006]},"exposed":false}},{"Value":{"tagged_value":{"F64":17.033756191102253},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0000000000000002,1.0000000000000002]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[3.180554681463516e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17562801632450633291,{"inputs":[{"Node":{"node_id":10286817149456341619,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17569892869974995307,{"inputs":[{"Node":{"node_id":3997031659711823213,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17603523494627491590,{"inputs":[{"Node":{"node_id":10995640810984321903,"output_index":0}},{"Node":{"node_id":17740294143355019755,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17696051535511578981,{"inputs":[{"Node":{"node_id":16780039553038473906,"output_index":0}},{"Node":{"node_id":9071802450034150503,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17735408893002232096,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[328.3333333333336,0.0,0.0,328.3333333333336,989.6666666666664,690.3479720709042]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17740294143355019755,{"inputs":[{"Node":{"node_id":15301503532602557206,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[120.71199286137949,0.0,0.0,120.71199286137949,798.6398287125882,458.13992140569405]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17740496701763775226,{"inputs":[{"Node":{"node_id":13027689870767713939,"output_index":0}},{"Node":{"node_id":16609137733952262762,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17753909951719808506,{"inputs":[{"Node":{"node_id":2185437945364824599,"output_index":0}},{"Node":{"node_id":9563008199132558110,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17952673493105230490,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[18003287685830153881,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4475009837548700636,4481635366652149569,1608608093193158603,4765910415851982345],"remove":[1647009925892902058],"delta":[[1608608093193158603,[609.7777777777777,620.0]],[4475009837548700636,[525.7325506063205,282.1042056224195]],[4481635366652149569,[684.8888888888889,395.55555555555554]],[4765910415851982345,[283.33331298828125,354.6666564941406]]]},"segments":{"add":[3045825504718908919,8024777209266880257,3983292299330016176,11103925991989272298],"remove":[13489289770112164650],"start_point":[[3045825504718908919,4475009837548700636],[3983292299330016176,1608608093193158603],[8024777209266880257,4481635366652149569],[11103925991989272298,4765910415851982345]],"end_point":[[3045825504718908919,4481635366652149569],[3983292299330016176,4765910415851982345],[8024777209266880257,1608608093193158603],[11103925991989272298,4475009837548700636]],"handle_primary":[[3045825504718908919,[62.22222222222217,43.111111111111086]],[3983292299330016176,[0.0,0.0]],[8024777209266880257,[11.111111111111086,62.22222222222217]],[11103925991989272298,[0.0,0.0]]],"handle_end":[[3045825504718908919,[-11.111111111111086,-62.22222222222217]],[3983292299330016176,[0.0,0.0]],[8024777209266880257,[34.66666666666674,-85.33333333333337]],[11103925991989272298,[-113.5844024581724,39.08097956276566]]],"stroke":[[3045825504718908919,0],[3983292299330016176,0],[8024777209266880257,0],[11103925991989272298,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3045825504718908919},{"ty":"Primary","segment":8024777209266880257}],[{"ty":"End","segment":3983292299330016176},{"ty":"Primary","segment":11103925991989272298}]],"remove_g1_continuous":[[{"ty":"End","segment":11103925991989272298},{"ty":"Primary","segment":3045825504718908919}],[{"ty":"End","segment":13489289770112164650},{"ty":"Primary","segment":3045825504718908919}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18031616785650843168,{"inputs":[{"Node":{"node_id":17952673493105230490,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[18053728639616073084,{"inputs":[{"Node":{"node_id":6616450276140292763,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[217.04253790616383,0.0,0.0,217.04253790616383,614.8148148148148,91.365310162655]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[18068340617333437755,{"inputs":[{"Node":{"node_id":2880630606834119505,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[73.0306419396,-200.8521460039]},"exposed":false}},{"Value":{"tagged_value":{"F64":24.404620143799995},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18081743490344004315,{"inputs":[{"Node":{"node_id":13588160462734303101,"output_index":0}},{"Node":{"node_id":18068340617333437755,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18095952297474762348,{"inputs":[{"Node":{"node_id":5954536408321808728,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18188505856445531484,{"inputs":[{"Node":{"node_id":8887924609778270360,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[284.97056147795894,0.0,0.0,284.97056147795894,0.000023539722353067782,617.7679237296747]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[18271512507682813443,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10872099980755217048,13049263474526562389,2409359561719399794,9175973472325454282,14263506369487797530,5496457317579994340,7125168137854779179,9658821733796680583,425878374398720476,5252668597335249558],"remove":[],"delta":[[425878374398720476,[898.633744855967,207.99999999999997]],[2409359561719399794,[892.7407407407408,111.70370370370372]],[5252668597335249558,[888.2516734908237,208.88931872324497]],[5496457317579994340,[929.3607681755832,198.40877914951983]],[7125168137854779179,[912.2962962962964,205.6296296296296]],[9175973472325454282,[881.4814814814815,152.5925925925926]],[9658821733796680583,[920.5925925925926,208.0]],[10872099980755217048,[889.0,0.0]],[13049263474526562389,[903.1111111111112,55.70370370370371]],[14263506369487797530,[886.5185185185185,178.66666666666669]]]},"segments":{"add":[16241193756011776206,13961346931609713434,6443321953815072406,13223251807271379465,6545223889678917273,9745298522639115232,8058164935346100149,9187894839116405225,5210886161307886529,11050813873332011119],"remove":[],"start_point":[[5210886161307886529,425878374398720476],[6443321953815072406,2409359561719399794],[6545223889678917273,14263506369487797530],[8058164935346100149,7125168137854779179],[9187894839116405225,9658821733796680583],[9745298522639115232,5496457317579994340],[11050813873332011119,5252668597335249558],[13223251807271379465,9175973472325454282],[13961346931609713434,13049263474526562389],[16241193756011776206,10872099980755217048]],"end_point":[[5210886161307886529,5252668597335249558],[6443321953815072406,9175973472325454282],[6545223889678917273,5496457317579994340],[8058164935346100149,9658821733796680583],[9187894839116405225,425878374398720476],[9745298522639115232,7125168137854779179],[11050813873332011119,10872099980755217048],[13223251807271379465,14263506369487797530],[13961346931609713434,2409359561719399794],[16241193756011776206,13049263474526562389]],"handle_primary":[[5210886161307886529,[-1.1368683772161605e-13,-2.8421709430404014e-14]],[6443321953815072406,[-9.144953020396894,24.145964868041293]],[6545223889678917273,[0.0,0.0]],[8058164935346100149,[0.0,0.0]],[9187894839116405225,[-8.263374485596842,1.880201188843188]],[9745298522639115232,[0.0,0.0]],[11050813873332011119,[-5.947146741852521,-2.1403475298293415]],[13223251807271379465,[3.2812071330587287,8.329218106995853]],[13961346931609713434,[6.522611384544012,17.67970980547415]],[16241193756011776206,[0.0,0.0]]],"handle_end":[[5210886161307886529,[5.947146741852521,2.1403475298293415]],[6443321953815072406,[-3.3276401397055917,-8.447086508484054]],[6545223889678917273,[-25.3424782807499,-1.3461362597164737]],[8058164935346100149,[-5.925925925925867,-2.370370370370381]],[9187894839116405225,[4.974851394604343,2.0557841792410443]],[9745298522639115232,[7.703703703703695,-2.074074074074076]],[11050813873332011119,[-86.26684502769479,250.37037037037035]],[13223251807271379465,[0.7901234567900701,-9.492455418381354]],[13961346931609713434,[10.984910836762538,-29.00411522633746]],[16241193756011776206,[-7.506172839506348,-20.345679012345684]]],"stroke":[[5210886161307886529,0],[6443321953815072406,0],[6545223889678917273,0],[8058164935346100149,0],[9187894839116405225,0],[9745298522639115232,0],[11050813873332011119,0],[13223251807271379465,0],[13961346931609713434,0],[16241193756011776206,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":5210886161307886529},{"ty":"Primary","segment":11050813873332011119}],[{"ty":"End","segment":6443321953815072406},{"ty":"Primary","segment":13223251807271379465}],[{"ty":"End","segment":13961346931609713434},{"ty":"Primary","segment":6443321953815072406}],[{"ty":"End","segment":16241193756011776206},{"ty":"Primary","segment":13961346931609713434}]],"remove_g1_continuous":[[{"ty":"Primary","segment":9187894839116405225},{"ty":"End","segment":8058164935346100149}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18351415092709164412,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[284.0066482893194,0.0,0.0,284.0066482893194,1210.9999999999998,45.97853699003812]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[57390435731316553,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[140396870212231820,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,112]}}},"network_metadata":null}}],[294265135510952894,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,93]}}},"network_metadata":null}}],[392274448837115448,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,12]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,-3]}}},"network_metadata":null}}],[6,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-28,-3]}}},"network_metadata":null}}],[7,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[682567808439406093,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,45]}}},"network_metadata":null}}],[804622576568168609,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,27]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[876963243827503916,{"persistent_metadata":{"display_name":"Top Right Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[990192925663920333,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,99]}}},"network_metadata":null}}],[1001728975241745659,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,45]}}},"network_metadata":null}}],[1009114585722052052,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-48,57]}}},"network_metadata":null}}],[1097494158696050491,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,99]}}},"network_metadata":null}}],[1258994191538244490,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1491840484128555837,{"persistent_metadata":{"display_name":"Face Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1508440849951861669,{"persistent_metadata":{"display_name":"Face Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1627123781166851142,{"persistent_metadata":{"display_name":"Top Right Corner Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1662641269094032596,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,127]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1809704172129195322,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,106]}}},"network_metadata":null}}],[2025899804080897524,{"persistent_metadata":{"display_name":"Face White","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2124231869409556689,{"persistent_metadata":{"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2185437945364824599,{"persistent_metadata":{"display_name":"Bottom Left White","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2287485748649359627,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,27]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2723198387862533596,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,63]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2834866505092039323,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,115]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2871608309888343463,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,130]}}},"network_metadata":null}}],[2880630606834119505,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3050731459444225191,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,45]}}},"network_metadata":null}}],[3079923906392020295,{"persistent_metadata":{"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3109716240255919254,{"persistent_metadata":{"display_name":"Front Eyebrow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3214181946162459584,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3410481056630111806,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,99]}}},"network_metadata":null}}],[3471746866096043087,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3608604157153838227,{"persistent_metadata":{"display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,109]}}},"network_metadata":null}}],[3750439930725791025,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,130]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3997031659711823213,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4102754869474520966,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,63]}}},"network_metadata":null}}],[4261249487994076490,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4301099429811409147,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4328376070224119511,{"persistent_metadata":{"display_name":"Bottom Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4421418468606442725,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4470272391975492611,{"persistent_metadata":{"display_name":"Rose Sliver Silhouette","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4560146526699152877,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,75]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4631655038168471552,{"persistent_metadata":{"display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,103]}}},"network_metadata":null}}],[4771789845668099116,{"persistent_metadata":{"display_name":"Cheek Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4807760870555738383,{"persistent_metadata":{"display_name":"Top Right Main Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4809200889774783438,{"persistent_metadata":{"display_name":"Front Eye","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5014806436727666175,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,84]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5449860184735415958,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,124]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5486211022469996717,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,75]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5488285068107445023,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,39]}}},"network_metadata":null}}],[5534800796196967885,{"persistent_metadata":{"display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,109]}}},"network_metadata":null}}],[5556372312033787775,{"persistent_metadata":{"display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,96]}}},"network_metadata":null}}],[5856350938151339368,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,21]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5877930116725120460,{"persistent_metadata":{"display_name":"Rear Eyelash","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5888633415105234509,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,130]}}},"network_metadata":null}}],[5954536408321808728,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,112]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6194305264313730032,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,75]}}},"network_metadata":null}}],[6445954214067437701,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,81]}}},"network_metadata":null}}],[6484183251661832039,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,93]}}},"network_metadata":null}}],[6503655938154160104,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,47]}}},"network_metadata":null}}],[6616450276140292763,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,36]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6726954210929537972,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,18]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6728362629909402903,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,21]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6787585796949551500,{"persistent_metadata":{"display_name":"Hair Strand 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,15]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6852799892628327372,{"persistent_metadata":{"display_name":"Head Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7018444885869143173,{"persistent_metadata":{"display_name":"Top Right Black - Dots","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7029437790788498388,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,106]}}},"network_metadata":null}}],[7104088139635280554,{"persistent_metadata":{"display_name":"Solidify Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7104261880154687267,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-22,115]}}},"network_metadata":null}}],[7201841978411396053,{"persistent_metadata":{"display_name":"Bottom Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":2}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7252918969430566594,{"persistent_metadata":{"display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,107]}}},"network_metadata":null}}],[7376049709233607419,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,30]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7480253252288032958,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7651693425519490419,{"persistent_metadata":{"display_name":"Top Right Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7667878689218439065,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,39]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7755499790391969923,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,45]}}},"network_metadata":null}}],[7855094781869605606,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,87]}}},"network_metadata":null}}],[7962101329808960965,{"persistent_metadata":{"display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,94]}}},"network_metadata":null}}],[7977952035097419157,{"persistent_metadata":{"display_name":"Ellipse","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius Y","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-62,50]}}},"network_metadata":null}}],[8269257328703012432,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8297015715799006244,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8359580532088731394,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8426490990601560741,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8460565235419043665,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8511737864852441844,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,130]}}},"network_metadata":null}}],[8566844905246185636,{"persistent_metadata":{"display_name":"Mouth Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8863346544623578893,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,90]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8887924609778270360,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,84]}}},"network_metadata":null}}],[9071802450034150503,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9135110142507605216,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-22,130]}}},"network_metadata":null}}],[9338394475379815879,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-55,50]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9563008199132558110,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9808637865669223270,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10063704933309776584,{"persistent_metadata":{"display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,100]}}},"network_metadata":null}}],[10080296672372912698,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,81]}}},"network_metadata":null}}],[10265035897167064154,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10286817149456341619,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,24]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10760002922115563021,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,45]}}},"network_metadata":null}}],[10995640810984321903,{"persistent_metadata":{"display_name":"Lip Bottom","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11095670964487764044,{"persistent_metadata":{"display_name":"Hair Strand 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11196821089257149774,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,130]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11201759760883367635,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-62,64]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11210964267417873667,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11264395591110193456,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,93]}}},"network_metadata":null}}],[11301831865756336526,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,42]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11373527190663101881,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,33]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11429506195623419966,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,42]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12145355397916841389,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12185047359007423618,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12234961922142600898,{"persistent_metadata":{"display_name":"Top Right Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12276520439585231336,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,130]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12353675714904258944,{"persistent_metadata":{"display_name":"Nose Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12494428953087324640,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,130]}}},"network_metadata":null}}],[12709602171929957216,{"persistent_metadata":{"display_name":"Bottom Left Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12741076678082295759,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,118]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12770183061753030023,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,45]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12867379765049504290,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,81]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12922148192688274227,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13027689870767713939,{"persistent_metadata":{"display_name":"Bottom Black - Dots","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13203761224559198689,{"persistent_metadata":{"display_name":"Front Eye Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13340751444307201866,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13353438235848911576,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,15]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13446205009526451196,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13588160462734303101,{"persistent_metadata":{"display_name":"Hair Dots Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13616602029989984195,{"persistent_metadata":{"display_name":"Flatten Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,45]}}},"network_metadata":null}}],[13646498613066619660,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,118]}}},"network_metadata":null}}],[13670206802546093234,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,81]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13739729101529293427,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,72]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13795432594059356320,{"persistent_metadata":{"display_name":"Flatten Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,130]}}},"network_metadata":null}}],[13838011362258067867,{"persistent_metadata":{"display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,103]}}},"network_metadata":null}}],[13916027199283115943,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14030142873804552388,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,66]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14139129879376457893,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14139765080256493579,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,138]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14141479077115894852,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,87]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14228923746783465609,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,135]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14257963317028524134,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-85,45]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14496934933990319842,{"persistent_metadata":{"display_name":"Bottom Left Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14516211820212764316,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14684142559936015947,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14690269209726153565,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14698962747138962125,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,24]}}},"network_metadata":null}}],[14808063168960305551,{"persistent_metadata":{"display_name":"Face Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14950060858756810933,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-62,60]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15301503532602557206,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,21]}}},"network_metadata":null}}],[15354358358546908017,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15433707377961038695,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,87]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15692102598187739001,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-55,57]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15817956847588799375,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15877481873925059044,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15900830679378240619,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,27]}}},"network_metadata":null}}],[15930698052919171086,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,72]}}},"network_metadata":null}}],[16177422101884031678,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16304636129468583592,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,135]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16306737306999003555,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,121]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16322546010403524636,{"persistent_metadata":{"display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,96]}}},"network_metadata":null}}],[16609137733952262762,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16671141883125519098,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16759836951269190891,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,42]}}},"network_metadata":null}}],[16780039553038473906,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16785043320296790229,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17036604842139972912,{"persistent_metadata":{"display_name":"Hair Dots Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":4}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17056531964793634106,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17131529656312051452,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17223836790030950966,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17271572793812678706,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17285637344898461972,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,81]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17299978721726771610,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,106]}}},"network_metadata":null}}],[17351444026127625357,{"persistent_metadata":{"display_name":"Face Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17397123104674848450,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,127]}}},"network_metadata":null}}],[17495267820524300686,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,45]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17562801632450633291,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,24]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17569892869974995307,{"persistent_metadata":{"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17603523494627491590,{"persistent_metadata":{"display_name":"Lip Top","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17696051535511578981,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-41,50]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17735408893002232096,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17740294143355019755,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17740496701763775226,{"persistent_metadata":{"display_name":"Bottom Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17753909951719808506,{"persistent_metadata":{"display_name":"Bottom Left Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17952673493105230490,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,133]}}},"network_metadata":null}}],[18003287685830153881,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,72]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18031616785650843168,{"persistent_metadata":{"display_name":"Solidify Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,133]}}},"network_metadata":null}}],[18053728639616073084,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18068340617333437755,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18081743490344004315,{"persistent_metadata":{"display_name":"Hair Dots Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18095952297474762348,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,112]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18188505856445531484,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18271512507682813443,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,39]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18351415092709164412,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[656.5700198973645,-785.4579096366515],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1647.0,-205.0],"node_graph_width":1981.0},"selection_undo_history":[[294265135510952894],[],[],[],[13340751444307201866],[3765280235392282097],[3765280235392282097],[],[13795432594059356320],[],[2871608309888343463],[2871608309888343463,12494428953087324640],[3765280235392282097,12494428953087324640,2871608309888343463],[8511737864852441844,2871608309888343463,12494428953087324640,3765280235392282097],[],[13795432594059356320],[],[12494428953087324640,2871608309888343463],[2871608309888343463,3765280235392282097,12494428953087324640],[12494428953087324640,2871608309888343463,3765280235392282097,8511737864852441844],[],[3765280235392282097],[],[],[13616602029989984195],[],[],[],[16780039553038473906],[7104088139635280554],[],[],[7104088139635280554],[],[7104088139635280554],[],[],[16785043320296790229],[6503655938154160104],[17696051535511578981],[6503655938154160104],[17696051535511578981],[9071802450034150503],[],[17696051535511578981],[6503655938154160104],[],[18031616785650843168],[17952673493105230490],[],[4328376070224119511],[18031616785650843168,3750439930725791025,13446205009526451196,7201841978411396053,17735408893002232096,11196821089257149774,13027689870767713939,17952673493105230490,14228923746783465609,4328376070224119511],[13027689870767713939,16609137733952262762,12276520439585231336,13795432594059356320,7201841978411396053,17740496701763775226,13340751444307201866,5888633415105234509,17735408893002232096,9135110142507605216,3750439930725791025,11196821089257149774,17397123104674848450,13446205009526451196,4328376070224119511,14228923746783465609,1662641269094032596,18031616785650843168,17952673493105230490],[5888633415105234509,17740496701763775226,14228923746783465609,12276520439585231336,18031616785650843168,16306737306999003555,6852799892628327372,17952673493105230490,3750439930725791025,16671141883125519098,13446205009526451196,11196821089257149774,1662641269094032596,9135110142507605216,17397123104674848450,3214181946162459584,13027689870767713939,16609137733952262762,7201841978411396053,13795432594059356320,17735408893002232096,2871608309888343463,4328376070224119511,2025899804080897524,13340751444307201866],[17952673493105230490,13027689870767713939,13646498613066619660,14139765080256493579,3214181946162459584,13795432594059356320,1662641269094032596,16671141883125519098,17740496701763775226,16306737306999003555,17735408893002232096,14228923746783465609,4328376070224119511,12276520439585231336,9135110142507605216,11196821089257149774,2025899804080897524,17397123104674848450,5888633415105234509,7201841978411396053,16609137733952262762,2871608309888343463,16304636129468583592,13446205009526451196,17131529656312051452,8566844905246185636,5449860184735415958,3750439930725791025,18031616785650843168,12494428953087324640,12741076678082295759,6852799892628327372,13340751444307201866],[3750439930725791025,5888633415105234509,18031616785650843168,12494428953087324640,13340751444307201866,16306737306999003555,17952673493105230490,17397123104674848450,13795432594059356320,12741076678082295759,7201841978411396053,9135110142507605216,3214181946162459584,2871608309888343463,6852799892628327372,13646498613066619660,17740496701763775226,17131529656312051452,16671141883125519098,13446205009526451196,12276520439585231336,14139765080256493579,14228923746783465609,5449860184735415958,4328376070224119511,16609137733952262762,17735408893002232096,16304636129468583592,8566844905246185636,1662641269094032596,2025899804080897524,11196821089257149774,13027689870767713939,8511737864852441844],[13340751444307201866,5888633415105234509,14139765080256493579,8566844905246185636,13795432594059356320,16609137733952262762,5449860184735415958,13027689870767713939,6852799892628327372,3750439930725791025,8511737864852441844,11196821089257149774,12494428953087324640,17131529656312051452,16306737306999003555,2834866505092039323,17735408893002232096,13646498613066619660,18031616785650843168,12276520439585231336,17740496701763775226,3214181946162459584,12741076678082295759,16671141883125519098,9135110142507605216,14228923746783465609,2871608309888343463,16304636129468583592,2025899804080897524,17397123104674848450,17952673493105230490,1662641269094032596,7201841978411396053,13446205009526451196,4328376070224119511],[9135110142507605216,12276520439585231336,2871608309888343463,1508440849951861669,2025899804080897524,7201841978411396053,11196821089257149774,17740496701763775226,13446205009526451196,6852799892628327372,3214181946162459584,1662641269094032596,4328376070224119511,12741076678082295759,13340751444307201866,13795432594059356320,16671141883125519098,14139765080256493579,5888633415105234509,17735408893002232096,18031616785650843168,17131529656312051452,13027689870767713939,8566844905246185636,17952673493105230490,2834866505092039323,5449860184735415958,16304636129468583592,16609137733952262762,16306737306999003555,17397123104674848450,13646498613066619660,14228923746783465609,3750439930725791025,12494428953087324640,8511737864852441844],[17397123104674848450,13340751444307201866,12494428953087324640,13446205009526451196,3214181946162459584,17131529656312051452,16609137733952262762,16306737306999003555,12276520439585231336,2871608309888343463,4328376070224119511,16304636129468583592,17740496701763775226,7201841978411396053,2834866505092039323,9135110142507605216,8511737864852441844,5888633415105234509,13795432594059356320,17952673493105230490,7480253252288032958,11196821089257149774,5449860184735415958,14228923746783465609,3750439930725791025,13027689870767713939,17735408893002232096,1508440849951861669,8566844905246185636,18031616785650843168,13646498613066619660,14139765080256493579,7104261880154687267,2025899804080897524,12741076678082295759,1662641269094032596,6852799892628327372,16671141883125519098],[17952673493105230490,7104261880154687267,18031616785650843168,8566844905246185636,17735408893002232096,7201841978411396053,12741076678082295759,5449860184735415958,16609137733952262762,1662641269094032596,3214181946162459584,11196821089257149774,1508440849951861669,13340751444307201866,13446205009526451196,8511737864852441844,9135110142507605216,6852799892628327372,3750439930725791025,13795432594059356320,4328376070224119511,17131529656312051452,16304636129468583592,16306737306999003555,17740496701763775226,12494428953087324640,17397123104674848450,16671141883125519098,5888633415105234509,12276520439585231336,2834866505092039323,7480253252288032958,18095952297474762348,13646498613066619660,2871608309888343463,2025899804080897524,14228923746783465609,14139765080256493579,13027689870767713939],[1491840484128555837,7104261880154687267,17397123104674848450,8511737864852441844,13446205009526451196,13795432594059356320,14228923746783465609,7480253252288032958,2025899804080897524,17735408893002232096,16306737306999003555,17740496701763775226,12741076678082295759,13646498613066619660,4328376070224119511,12276520439585231336,18031616785650843168,3750439930725791025,3214181946162459584,2871608309888343463,5888633415105234509,16304636129468583592,13340751444307201866,1662641269094032596,11196821089257149774,5449860184735415958,16671141883125519098,13027689870767713939,17952673493105230490,6852799892628327372,17131529656312051452,14139765080256493579,1508440849951861669,18095952297474762348,8566844905246185636,12494428953087324640,16609137733952262762,2834866505092039323,9135110142507605216,7201841978411396053],[13027689870767713939,8511737864852441844,2871608309888343463,3214181946162459584,14228923746783465609,9808637865669223270,1508440849951861669,12494428953087324640,7201841978411396053,16671141883125519098,13340751444307201866,140396870212231820,1491840484128555837,13446205009526451196,14139765080256493579,5888633415105234509,2834866505092039323,7480253252288032958,17397123104674848450,17740496701763775226,1662641269094032596,18095952297474762348,16306737306999003555,16304636129468583592,17735408893002232096,12276520439585231336,16609137733952262762,4328376070224119511,13795432594059356320,7104261880154687267,5449860184735415958,17131529656312051452,13646498613066619660,6852799892628327372,3750439930725791025,2025899804080897524,9135110142507605216,5954536408321808728,11196821089257149774,12741076678082295759,8566844905246185636,17952673493105230490,18031616785650843168],[7252918969430566594,15877481873925059044,4261249487994076490,5534800796196967885,17036604842139972912],[5534800796196967885,11210964267417873667,4261249487994076490,17036604842139972912,2124231869409556689,7252918969430566594,14516211820212764316,15877481873925059044],[17036604842139972912,4261249487994076490,11210964267417873667,3608604157153838227,15877481873925059044,5534800796196967885,2124231869409556689,14516211820212764316,7252918969430566594],[14516211820212764316,4261249487994076490,11210964267417873667,7252918969430566594,15877481873925059044,17036604842139972912,5534800796196967885,3608604157153838227,2124231869409556689,17299978721726771610],[7252918969430566594,11210964267417873667,15877481873925059044,3608604157153838227,4261249487994076490,2124231869409556689,17299978721726771610,7029437790788498388,5534800796196967885,14516211820212764316,17036604842139972912],[4261249487994076490,17036604842139972912,5534800796196967885,17299978721726771610,7252918969430566594,3608604157153838227,14516211820212764316,11210964267417873667,1809704172129195322,2124231869409556689,15877481873925059044,7029437790788498388],[57390435731316553,13838011362258067867,17056531964793634106,4631655038168471552,13588160462734303101,10063704933309776584],[3410481056630111806,13838011362258067867,990192925663920333,57390435731316553,4631655038168471552,8460565235419043665,10063704933309776584,3079923906392020295,13588160462734303101,4301099429811409147,17056531964793634106],[57390435731316553,1097494158696050491,3410481056630111806,990192925663920333,8460565235419043665,13588160462734303101,13838011362258067867,17056531964793634106,4631655038168471552,3079923906392020295,4301099429811409147,10063704933309776584],[13588160462734303101],[4301099429811409147,8460565235419043665,13588160462734303101,57390435731316553],[3079923906392020295,17056531964793634106,4301099429811409147,8460565235419043665,57390435731316553,13588160462734303101],[57390435731316553,13588160462734303101,4301099429811409147,10063704933309776584,3079923906392020295,8460565235419043665,17056531964793634106],[4301099429811409147,990192925663920333,10063704933309776584,57390435731316553,17056531964793634106,3079923906392020295,8460565235419043665,13588160462734303101],[3410481056630111806,57390435731316553,990192925663920333,13588160462734303101,10063704933309776584,8460565235419043665,3079923906392020295,4301099429811409147,17056531964793634106],[3410481056630111806,13588160462734303101,57390435731316553,3079923906392020295,17056531964793634106,10063704933309776584,4301099429811409147,1097494158696050491,990192925663920333,8460565235419043665],[17056531964793634106,4631655038168471552,10063704933309776584,3410481056630111806,8460565235419043665,3079923906392020295,990192925663920333,1097494158696050491,13838011362258067867,13588160462734303101,4301099429811409147,57390435731316553],[11210964267417873667,4261249487994076490,14516211820212764316,17036604842139972912],[14516211820212764316,7252918969430566594,4261249487994076490,15877481873925059044,17036604842139972912,2124231869409556689,11210964267417873667],[7252918969430566594,17299978721726771610,15877481873925059044,4261249487994076490,17036604842139972912,11210964267417873667,14516211820212764316,2124231869409556689],[4261249487994076490,15877481873925059044,14516211820212764316,7252918969430566594,17299978721726771610,11210964267417873667,17036604842139972912,7029437790788498388,2124231869409556689],[15877481873925059044,7252918969430566594,4261249487994076490,17036604842139972912,17299978721726771610,1809704172129195322,7029437790788498388,2124231869409556689,11210964267417873667,14516211820212764316],[2124231869409556689,5534800796196967885,7029437790788498388,7252918969430566594,14516211820212764316,4261249487994076490,11210964267417873667,15877481873925059044,17299978721726771610,3608604157153838227,1809704172129195322,17036604842139972912],[17299978721726771610,4261249487994076490,1809704172129195322,7029437790788498388,14516211820212764316,11210964267417873667,15877481873925059044,17036604842139972912,7252918969430566594,2124231869409556689],[14516211820212764316,15877481873925059044,17299978721726771610,7252918969430566594,17036604842139972912,1809704172129195322,5534800796196967885,7029437790788498388,4261249487994076490,11210964267417873667,2124231869409556689,3608604157153838227],[4328376070224119511],[13340751444307201866,6852799892628327372,14228923746783465609,2871608309888343463,11196821089257149774,9135110142507605216,17740496701763775226,12276520439585231336,2025899804080897524,3750439930725791025,1662641269094032596,5888633415105234509,4328376070224119511,17735408893002232096,7201841978411396053,17397123104674848450,13795432594059356320,18031616785650843168,16609137733952262762,13027689870767713939,17952673493105230490,3214181946162459584,16671141883125519098,16306737306999003555,13446205009526451196],[3750439930725791025,12741076678082295759,7201841978411396053,7480253252288032958,13446205009526451196,3214181946162459584,13340751444307201866,13646498613066619660,14139765080256493579,6852799892628327372,16306737306999003555,4328376070224119511,8566844905246185636,7104261880154687267,12494428953087324640,5449860184735415958,1662641269094032596,17740496701763775226,17952673493105230490,16304636129468583592,2025899804080897524,9135110142507605216,2871608309888343463,18031616785650843168,2834866505092039323,13027689870767713939,13795432594059356320,12276520439585231336,11196821089257149774,17397123104674848450,16609137733952262762,17131529656312051452,14228923746783465609,16671141883125519098,5888633415105234509,8511737864852441844,17735408893002232096,1508440849951861669],[17131529656312051452,16306737306999003555,12276520439585231336,17735408893002232096,18095952297474762348,7201841978411396053,17740496701763775226,14139765080256493579,13795432594059356320,8511737864852441844,4328376070224119511,6852799892628327372,5449860184735415958,140396870212231820,14228923746783465609,13446205009526451196,11196821089257149774,9808637865669223270,1508440849951861669,13027689870767713939,1491840484128555837,5954536408321808728,17397123104674848450,9135110142507605216,2871608309888343463,18031616785650843168,2834866505092039323,3214181946162459584,3750439930725791025,1662641269094032596,13646498613066619660,16304636129468583592,8566844905246185636,7480253252288032958,5888633415105234509,2025899804080897524,12741076678082295759,16671141883125519098,12494428953087324640,17952673493105230490,16609137733952262762,7104261880154687267,13340751444307201866],[17036604842139972912],[13588160462734303101],[18081743490344004315],[12353675714904258944,17562801632450633291,6728362629909402903,17603523494627491590,5856350938151339368,10286817149456341619,10995640810984321903,804622576568168609,2287485748649359627],[15900830679378240619,13353438235848911576,6726954210929537972,11373527190663101881,10286817149456341619,17562801632450633291,18271512507682813443,12770183061753030023,392274448837115448,7667878689218439065,16177422101884031678,14690269209726153565,11429506195623419966,16759836951269190891,17271572793812678706,6503655938154160104,11095670964487764044,5856350938151339368,17603523494627491590,6787585796949551500,8426490990601560741,5877930116725120460,7018444885869143173,13203761224559198689,7376049709233607419,804622576568168609,12145355397916841389,682567808439406093,7755499790391969923,14139129879376457893,2287485748649359627,3050731459444225191,1258994191538244490,3109716240255919254,6616450276140292763,14257963317028524134,14698962747138962125,10760002922115563021,17495267820524300686,11301831865756336526,4470272391975492611,8359580532088731394,5488285068107445023,10265035897167064154,18053728639616073084,10995640810984321903,6728362629909402903,1001728975241745659,17740294143355019755,15301503532602557206,4809200889774783438,13616602029989984195,12353675714904258944],[17271572793812678706,13203761224559198689,14690269209726153565,15301503532602557206,5856350938151339368,18053728639616073084,5877930116725120460,7755499790391969923,10995640810984321903,12770183061753030023,16759836951269190891,4809200889774783438,16177422101884031678,2287485748649359627,3050731459444225191,804622576568168609,13616602029989984195,5488285068107445023,7376049709233607419,11301831865756336526,17562801632450633291,17495267820524300686,6787585796949551500,14257963317028524134,6503655938154160104,10760002922115563021,15900830679378240619,18271512507682813443,8426490990601560741,12353675714904258944,11373527190663101881,12145355397916841389,6616450276140292763,9338394475379815879,682567808439406093,7018444885869143173,7667878689218439065,9071802450034150503,13353438235848911576,14698962747138962125,3109716240255919254,17603523494627491590,6726954210929537972,1001728975241745659,17696051535511578981,6728362629909402903,11429506195623419966,10286817149456341619,11095670964487764044,10265035897167064154,7977952035097419157,1258994191538244490,8359580532088731394,14139129879376457893,4470272391975492611,17740294143355019755,392274448837115448],[18271512507682813443,4809200889774783438,10995640810984321903,11373527190663101881,17495267820524300686,11429506195623419966,1001728975241745659,13203761224559198689,6616450276140292763,17740294143355019755,6726954210929537972,10760002922115563021,13353438235848911576,13616602029989984195,3109716240255919254,14257963317028524134,8359580532088731394,7018444885869143173,11301831865756336526,17271572793812678706,7755499790391969923,5488285068107445023,17562801632450633291,14139129879376457893,4470272391975492611,15301503532602557206,5877930116725120460,17603523494627491590,6728362629909402903,3050731459444225191,18053728639616073084,8426490990601560741,14690269209726153565,16759836951269190891,15900830679378240619,12353675714904258944,2287485748649359627,11095670964487764044,17696051535511578981,682567808439406093,804622576568168609,16780039553038473906,7376049709233607419,6503655938154160104,12145355397916841389,16177422101884031678,5856350938151339368,14698962747138962125,9338394475379815879,10265035897167064154,7667878689218439065,1258994191538244490,7977952035097419157,6787585796949551500,9071802450034150503,10286817149456341619,392274448837115448,12770183061753030023],[3109716240255919254,4809200889774783438,15301503532602557206,13616602029989984195,8359580532088731394,7977952035097419157,6787585796949551500,7755499790391969923,10286817149456341619,14257963317028524134,10265035897167064154,17271572793812678706,5856350938151339368,17696051535511578981,6726954210929537972,11373527190663101881,11301831865756336526,14698962747138962125,6728362629909402903,14690269209726153565,10760002922115563021,13353438235848911576,7104088139635280554,9338394475379815879,17495267820524300686,7018444885869143173,7667878689218439065,5877930116725120460,1258994191538244490,804622576568168609,18053728639616073084,12353675714904258944,16177422101884031678,10995640810984321903,17562801632450633291,13203761224559198689,7376049709233607419,6616450276140292763,6503655938154160104,4470272391975492611,392274448837115448,11095670964487764044,18271512507682813443,682567808439406093,15900830679378240619,17603523494627491590,16759836951269190891,12770183061753030023,5488285068107445023,3050731459444225191,8426490990601560741,11429506195623419966,16785043320296790229,9071802450034150503,12145355397916841389,17740294143355019755,1001728975241745659,2287485748649359627,14139129879376457893,16780039553038473906],[]],"selection_redo_history":[]}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"3a591dac6a53454813c8df6ceed5b44b91d1e816","document_ptz":{"pan":[-768.2748744089959,-384.56142660725646],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":392274448837115448,"output_index":0}}],"nodes":[[57390435731316553,{"inputs":[{"Node":{"node_id":8460565235419043665,"output_index":0}},{"Node":{"node_id":13838011362258067867,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[140396870212231820,{"inputs":[{"Node":{"node_id":18095952297474762348,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[294265135510952894,{"inputs":[{"Node":{"node_id":11264395591110193456,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[20.0,0.0,0.0,20.0,-10.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[392274448837115448,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}},"exposed":true}},{"Node":{"node_id":6787585796949551500,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1536.0,768.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"Generic":"T"}]},"import_index":1}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":2}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":3}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":4}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[682567808439406093,{"inputs":[{"Node":{"node_id":7755499790391969923,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":15},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[804622576568168609,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[13654185056786459919,6952183320761642858,2802617302192982616,7639287212006638253,15117515618866904690,15750781936547583892,7025422618543191491,3831533579307185652,16937470333767479918,10412162547161259027,5269777039739103358],"remove":[],"delta":[[2802617302192982616,[911.7777777777776,334.88888888888886]],[3831533579307185652,[880.4444444444443,357.3333333333333]],[5269777039739103358,[902.2222222222222,394.66666666666663]],[6952183320761642858,[933.9259259259262,324.3456790123457]],[7025422618543191491,[911.5555555555554,345.3333333333333]],[7639287212006638253,[862.8888888888888,349.3333333333333]],[10412162547161259027,[887.3333333333333,376.0]],[13654185056786459919,[946.1728395061732,330.8641975308642]],[15117515618866904690,[819.1111111111109,354.44444444444434]],[15750781936547583892,[840.6666666666665,368.66666666666663]],[16937470333767479918,[876.6666666666665,359.55555555555554]]]},"segments":{"add":[10498175376126066982,10426255560432238561,11214998966879437330,1241631398419524272,15286139376878919277,15838384105575178137,12854270992100552972,379744301215040936,4069217348643062888,10438163357339042361,9330486019469919863],"remove":[],"start_point":[[379744301215040936,3831533579307185652],[1241631398419524272,7639287212006638253],[4069217348643062888,16937470333767479918],[9330486019469919863,5269777039739103358],[10426255560432238561,6952183320761642858],[10438163357339042361,10412162547161259027],[10498175376126066982,13654185056786459919],[11214998966879437330,2802617302192982616],[12854270992100552972,7025422618543191491],[15286139376878919277,15117515618866904690],[15838384105575178137,15750781936547583892]],"end_point":[[379744301215040936,16937470333767479918],[1241631398419524272,15117515618866904690],[4069217348643062888,10412162547161259027],[9330486019469919863,13654185056786459919],[10426255560432238561,2802617302192982616],[10438163357339042361,5269777039739103358],[10498175376126066982,6952183320761642858],[11214998966879437330,7639287212006638253],[12854270992100552972,3831533579307185652],[15286139376878919277,15750781936547583892],[15838384105575178137,7025422618543191491]],"handle_primary":[[379744301215040936,[-0.2222222222221717,0.0]],[1241631398419524272,[-17.111111111111086,12.888888888888856]],[4069217348643062888,[0.0,0.0]],[9330486019469919863,[5.555555555555429,-0.2222222222221717]],[10426255560432238561,[-0.39506172839503506,-0.19753086419757435]],[10438163357339042361,[1.3333333333332575,10.888888888888856]],[10498175376126066982,[0.0,0.0]],[11214998966879437330,[-16.666666666666515,-3.777777777777771]],[12854270992100552972,[-0.4444444444443434,0.0]],[15286139376878919277,[-0.5188510642573192,0.6084707935380038]],[15838384105575178137,[22.222222222222285,5.555555555555543]]],"handle_end":[[379744301215040936,[0.0,0.0]],[1241631398419524272,[0.5951379226228255,-0.6979344728938486]],[4069217348643062888,[-1.3333333333332575,-10.888888888888856]],[9330486019469919863,[0.0,0.0]],[10426255560432238561,[16.666666666666515,3.777777777777771]],[10438163357339042361,[-5.555555555555429,0.2222222222221717]],[10498175376126066982,[4.9382716049382225,0.19753086419757435]],[11214998966879437330,[17.111111111111086,-12.888888888888856]],[12854270992100552972,[33.77777777777783,2.2222222222222285]],[15286139376878919277,[-22.222222222222285,-5.555555555555543]],[15838384105575178137,[-20.0,2.0]]],"stroke":[[379744301215040936,0],[1241631398419524272,0],[4069217348643062888,0],[9330486019469919863,0],[10426255560432238561,0],[10438163357339042361,0],[10498175376126066982,0],[11214998966879437330,0],[12854270992100552972,0],[15286139376878919277,0],[15838384105575178137,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":379744301215040936},{"ty":"Primary","segment":4069217348643062888}],[{"ty":"End","segment":1241631398419524272},{"ty":"Primary","segment":15286139376878919277}],[{"ty":"End","segment":4069217348643062888},{"ty":"Primary","segment":10438163357339042361}],[{"ty":"End","segment":10426255560432238561},{"ty":"Primary","segment":11214998966879437330}],[{"ty":"End","segment":10438163357339042361},{"ty":"Primary","segment":9330486019469919863}],[{"ty":"End","segment":11214998966879437330},{"ty":"Primary","segment":1241631398419524272}],[{"ty":"End","segment":15286139376878919277},{"ty":"Primary","segment":15838384105575178137}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[876963243827503916,{"inputs":[{"Node":{"node_id":7651693425519490419,"output_index":0}},{"Node":{"node_id":17223836790030950966,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[990192925663920333,{"inputs":[{"Node":{"node_id":3410481056630111806,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[466.8,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.9},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1001728975241745659,{"inputs":[{"Node":{"node_id":12770183061753030023,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1009114585722052052,{"inputs":[{"Node":{"node_id":15692102598187739001,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1097494158696050491,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":15.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1258994191538244490,{"inputs":[{"Node":{"node_id":5488285068107445023,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[60.587565195411344,0.0,0.0,60.587565195411344,868.7732029845887,104.82722889376552]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1491840484128555837,{"inputs":[{"Node":{"node_id":1508440849951861669,"output_index":0}},{"Node":{"node_id":9808637865669223270,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1508440849951861669,{"inputs":[{"Node":{"node_id":8566844905246185636,"output_index":0}},{"Node":{"node_id":7480253252288032958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1627123781166851142,{"inputs":[{"Node":{"node_id":4807760870555738383,"output_index":0}},{"Node":{"node_id":15354358358546908017,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1662641269094032596,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0}},{"Node":{"node_id":14139765080256493579,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1809704172129195322,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2025899804080897524,{"inputs":[{"Node":{"node_id":17740496701763775226,"output_index":0}},{"Node":{"node_id":3214181946162459584,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2124231869409556689,{"inputs":[{"Node":{"node_id":15877481873925059044,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2185437945364824599,{"inputs":[{"Node":{"node_id":18081743490344004315,"output_index":0}},{"Node":{"node_id":4421418468606442725,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2287485748649359627,{"inputs":[{"Node":{"node_id":804622576568168609,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2723198387862533596,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0}},{"Node":{"node_id":11201759760883367635,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2834866505092039323,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0}},{"Node":{"node_id":14139765080256493579,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2871608309888343463,{"inputs":[{"Node":{"node_id":12494428953087324640,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2880630606834119505,{"inputs":[{"Node":{"node_id":8297015715799006244,"output_index":0}},{"Node":{"node_id":16322546010403524636,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3050731459444225191,{"inputs":[{"Node":{"node_id":682567808439406093,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3079923906392020295,{"inputs":[{"Node":{"node_id":17056531964793634106,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3109716240255919254,{"inputs":[{"Node":{"node_id":5877930116725120460,"output_index":0}},{"Node":{"node_id":18053728639616073084,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3214181946162459584,{"inputs":[{"Node":{"node_id":5449860184735415958,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[945.6888871136836,0.0,0.0,945.6888871136836,0.0,384.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3410481056630111806,{"inputs":[{"Node":{"node_id":1097494158696050491,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[30.0,0.0,0.0,30.0,-15.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3471746866096043087,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[354.1044977315747,0.0,0.0,354.1044977315747,525.6902462010306,232.6091521617111]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3608604157153838227,{"inputs":[{"Node":{"node_id":17299978721726771610,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3750439930725791025,{"inputs":[{"Node":{"node_id":12276520439585231336,"output_index":0}},{"Node":{"node_id":14228923746783465609,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3967133208342732399,{"inputs":[{"Node":{"node_id":3608604157153838227,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CombinePathsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3997031659711823213,{"inputs":[{"Node":{"node_id":6484183251661832039,"output_index":0}},{"Node":{"node_id":7962101329808960965,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4102754869474520966,{"inputs":[{"Node":{"node_id":2723198387862533596,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4148170217181291816,{"inputs":[{"Node":{"node_id":4631655038168471552,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CombinePathsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4261249487994076490,{"inputs":[{"Node":{"node_id":14516211820212764316,"output_index":0}},{"Node":{"node_id":5534800796196967885,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4301099429811409147,{"inputs":[{"Node":{"node_id":57390435731316553,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[81.3755165062,-154.9064700048801]},"exposed":false}},{"Value":{"tagged_value":{"F64":23.8615898276},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4328376070224119511,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":13446205009526451196,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4421418468606442725,{"inputs":[{"Node":{"node_id":8863346544623578893,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[364.0000000000002,0.0,0.0,364.0000000000002,-2.273736754432321e-13,635.1243141489638]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4470272391975492611,{"inputs":[{"Node":{"node_id":7018444885869143173,"output_index":0}},{"Node":{"node_id":12145355397916841389,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4560146526699152877,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0}},{"Node":{"node_id":13646498613066619660,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4631655038168471552,{"inputs":[{"Node":{"node_id":990192925663920333,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4771789845668099116,{"inputs":[{"Node":{"node_id":17351444026127625357,"output_index":0}},{"Node":{"node_id":14684142559936015947,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4807760870555738383,{"inputs":[{"Node":{"node_id":876963243827503916,"output_index":0}},{"Node":{"node_id":8269257328703012432,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4809200889774783438,{"inputs":[{"Node":{"node_id":3109716240255919254,"output_index":0}},{"Node":{"node_id":14139129879376457893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4873612610885266664,{"inputs":[{"Node":{"node_id":5556372312033787775,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CombinePathsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5014806436727666175,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0}},{"Node":{"node_id":8863346544623578893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5449860184735415958,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[17520941196305861319,6029995238423674441,16590926169549948521,12817219955590128894,4723170318056755559,12317789037775437786,17339925811006567497,4659274885664969740,1541401134848201833,17321098837874422287,11084016020553554647,9729762716079513741,13279221198527484331,7727030009292816503,15701538241214188894],"remove":[],"delta":[[1541401134848201833,[886.0,572.0]],[4659274885664969740,[896.0,523.0]],[4723170318056755559,[923.0,349.0]],[6029995238423674441,[898.0,46.0]],[7727030009292816503,[0.0,768.0]],[9729762716079513741,[585.0,666.0]],[11084016020553554647,[655.0,636.0]],[12317789037775437786,[902.0,394.0]],[12817219955590128894,[933.0,273.0]],[13279221198527484331,[564.0,768.0]],[15701538241214188894,[0.0,0.0]],[16590926169549948521,[869.0,147.0]],[17321098837874422287,[802.6666666666667,656.4444444444445]],[17339925811006567497,[898.0,468.0]],[17520941196305861319,[889.0,0.0]]]},"segments":{"add":[862900208337901235,4806484166818510930,11569179934425192262,9808624553037921371,9730229894941201870,1248401493076165062,8832757535144158913,15056691877609602335,8919277736361106420,16631919016540861133,9314952320711038398,10137845066833192587,14740183693208469558,3307452201570141575,3876401232874291775],"remove":[],"start_point":[[862900208337901235,17520941196305861319],[1248401493076165062,12317789037775437786],[3307452201570141575,7727030009292816503],[3876401232874291775,15701538241214188894],[4806484166818510930,6029995238423674441],[8832757535144158913,17339925811006567497],[8919277736361106420,1541401134848201833],[9314952320711038398,11084016020553554647],[9730229894941201870,4723170318056755559],[9808624553037921371,12817219955590128894],[10137845066833192587,9729762716079513741],[11569179934425192262,16590926169549948521],[14740183693208469558,13279221198527484331],[15056691877609602335,4659274885664969740],[16631919016540861133,17321098837874422287]],"end_point":[[862900208337901235,6029995238423674441],[1248401493076165062,17339925811006567497],[3307452201570141575,15701538241214188894],[3876401232874291775,17520941196305861319],[4806484166818510930,16590926169549948521],[8832757535144158913,4659274885664969740],[8919277736361106420,17321098837874422287],[9314952320711038398,9729762716079513741],[9730229894941201870,12317789037775437786],[9808624553037921371,4723170318056755559],[10137845066833192587,13279221198527484331],[11569179934425192262,12817219955590128894],[14740183693208469558,7727030009292816503],[15056691877609602335,1541401134848201833],[16631919016540861133,11084016020553554647]],"handle_primary":[[862900208337901235,[0.0,0.0]],[1248401493076165062,[21.0,27.0]],[3307452201570141575,[0.0,0.0]],[3876401232874291775,[0.0,0.0]],[4806484166818510930,[11.595886737767424,32.210796493798]],[8832757535144158913,[14.888888888888914,4.8888888888888005]],[8919277736361106420,[10.458809984597837,40.44073194044492]],[9314952320711038398,[-34.0,-7.0]],[9730229894941201870,[-24.00371914417652,11.366922485048674]],[9808624553037921371,[18.0,36.0]],[10137845066833192587,[-19.0,43.0]],[11569179934425192262,[-4.0,51.0]],[14740183693208469558,[0.0,0.0]],[15056691877609602335,[0.0,0.0]],[16631919016540861133,[-63.996421719362885,-1.2074796550824587]]],"handle_end":[[862900208337901235,[-9.000000000000114,-25.0]],[1248401493076165062,[30.59259259259261,-36.59259259259255]],[3307452201570141575,[0.0,0.0]],[3876401232874291775,[0.0,0.0]],[4806484166818510930,[3.365858386031487,-42.91469442190146]],[8832757535144158913,[33.33333333333326,-9.666666666666742]],[8919277736361106420,[70.66666666666652,1.333333333333485]],[9314952320711038398,[19.0,-43.0]],[9730229894941201870,[-21.0,-27.0]],[9808624553037921371,[28.703703703703695,-13.592592592592496]],[10137845066833192587,[0.0,0.0]],[11569179934425192262,[-18.0,-36.0]],[14740183693208469558,[0.0,0.0]],[15056691877609602335,[-10.0,-38.66666666666663]],[16631919016540861133,[34.0,7.0]]],"stroke":[[862900208337901235,0],[1248401493076165062,0],[3307452201570141575,0],[3876401232874291775,0],[4806484166818510930,0],[8832757535144158913,0],[8919277736361106420,0],[9314952320711038398,0],[9730229894941201870,0],[9808624553037921371,0],[10137845066833192587,0],[11569179934425192262,0],[14740183693208469558,0],[15056691877609602335,0],[16631919016540861133,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":862900208337901235},{"ty":"Primary","segment":4806484166818510930}],[{"ty":"End","segment":3307452201570141575},{"ty":"Primary","segment":3876401232874291775}],[{"ty":"End","segment":4806484166818510930},{"ty":"Primary","segment":11569179934425192262}],[{"ty":"End","segment":8919277736361106420},{"ty":"Primary","segment":16631919016540861133}],[{"ty":"End","segment":9314952320711038398},{"ty":"Primary","segment":10137845066833192587}],[{"ty":"End","segment":9730229894941201870},{"ty":"Primary","segment":1248401493076165062}],[{"ty":"End","segment":9808624553037921371},{"ty":"Primary","segment":9730229894941201870}],[{"ty":"End","segment":10137845066833192587},{"ty":"Primary","segment":14740183693208469558}],[{"ty":"End","segment":11569179934425192262},{"ty":"Primary","segment":9808624553037921371}],[{"ty":"End","segment":14740183693208469558},{"ty":"Primary","segment":3307452201570141575}],[{"ty":"End","segment":15056691877609602335},{"ty":"Primary","segment":8919277736361106420}],[{"ty":"End","segment":16631919016540861133},{"ty":"Primary","segment":9314952320711038398}]],"remove_g1_continuous":[[{"ty":"Primary","segment":8832757535144158913},{"ty":"End","segment":1248401493076165062}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5486211022469996717,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[266134622800431246,12075466065090700811,7115673652122600762,9852238672814254137],"remove":[134095410253559933],"delta":[[266134622800431246,[525.7325506063205,282.1042056224195]],[7115673652122600762,[646.5386352539062,343.99395751953125]],[9852238672814254137,[879.7947439326053,110.54094004739208]],[12075466065090700811,[877.0370370370372,136.5925925925926]]]},"segments":{"add":[17255728395700231433,3166693019207180063,10242199012993595528,2159953159628520134],"remove":[3769008694104161528,10196443086284452827,13980530488817762548],"start_point":[[2159953159628520134,9852238672814254137],[3166693019207180063,7115673652122600762],[10242199012993595528,266134622800431246],[17255728395700231433,12075466065090700811]],"end_point":[[2159953159628520134,12075466065090700811],[3166693019207180063,266134622800431246],[10242199012993595528,9852238672814254137],[17255728395700231433,7115673652122600762]],"handle_primary":[[2159953159628520134,[0.0,0.0]],[3166693019207180063,[-126.67994767097883,-51.72627287889763]],[10242199012993595528,[137.37856050479058,-43.88198340019727]],[17255728395700231433,[0.0010773420832492775,-0.01370555995902123]]],"handle_end":[[2159953159628520134,[0.0,0.0]],[3166693019207180063,[0.0,0.0]],[10242199012993595528,[-15.794743932605344,36.71831921186718]],[17255728395700231433,[165.46136474609386,67.5615980360243]]],"stroke":[[2159953159628520134,0],[3166693019207180063,0],[10242199012993595528,0],[17255728395700231433,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":3166693019207180063},{"ty":"End","segment":17255728395700231433}]],"remove_g1_continuous":[[{"ty":"Primary","segment":3769008694104161528},{"ty":"End","segment":10196443086284452827}],[{"ty":"Primary","segment":10242199012993595528},{"ty":"End","segment":3166693019207180063}],[{"ty":"End","segment":3166693019207180063},{"ty":"Primary","segment":13980530488817762548}],[{"ty":"End","segment":10242199012993595528},{"ty":"Primary","segment":2159953159628520134}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5488285068107445023,{"inputs":[{"Node":{"node_id":7667878689218439065,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5534800796196967885,{"inputs":[{"Node":{"node_id":3967133208342732399,"output_index":0}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CentroidNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5556372312033787775,{"inputs":[{"Node":{"node_id":6484183251661832039,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5856350938151339368,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5138872293174440313,14935583009751134816,9014079831396927156,7008812441195504980,9603704700847490044,7238075805746621699,2355002738045707979,5021902985892894619,17629528758352690600,5995306636877552],"remove":[10768931421586254879],"delta":[[5995306636877552,[912.8888888888888,479.7037037037037]],[2355002738045707979,[826.2057613168724,485.0041152263375]],[5021902985892894619,[857.679012345679,478.2880658436215]],[5138872293174440313,[922.9629629629628,422.22222222222223]],[7008812441195504980,[888.8888888888887,421.3333333333333]],[7238075805746621699,[798.6831275720165,497.9094650205762]],[9014079831396927156,[908.4444444444443,429.9259259259259]],[9603704700847490044,[821.037037037037,464.2962962962963]],[14935583009751134816,[914.9629629629628,418.3703703703703]],[17629528758352690600,[892.148148148148,480.2962962962963]]]},"segments":{"add":[7250062683967197158,14131440324578863745,4499620435559196394,14571502160667941876,7203043366367198812,239843798079287870,7655921914272804429,12687760936062936386,7117413478945421556,9071432674597727163],"remove":[3746587001535987651],"start_point":[[239843798079287870,2355002738045707979],[4499620435559196394,9014079831396927156],[7117413478945421556,5995306636877552],[7203043366367198812,9603704700847490044],[7250062683967197158,5138872293174440313],[7655921914272804429,5021902985892894619],[9071432674597727163,7238075805746621699],[12687760936062936386,17629528758352690600],[14131440324578863745,14935583009751134816],[14571502160667941876,7008812441195504980]],"end_point":[[239843798079287870,5021902985892894619],[4499620435559196394,7008812441195504980],[7117413478945421556,5138872293174440313],[7203043366367198812,7238075805746621699],[7250062683967197158,14935583009751134816],[7655921914272804429,17629528758352690600],[9071432674597727163,2355002738045707979],[12687760936062936386,5995306636877552],[14131440324578863745,9014079831396927156],[14571502160667941876,9603704700847490044]],"handle_primary":[[239843798079287870,[9.61316872427983,-1.843621399176982]],[4499620435559196394,[-0.2962962962963047,-0.2962962962963047]],[7117413478945421556,[0.0,0.0]],[7203043366367198812,[0.0,0.2962962962963047]],[7250062683967197158,[0.0,0.0]],[7655921914272804429,[18.172839506172863,-1.9753086419753456]],[9071432674597727163,[4.345679012345499,-3.555555555555543]],[12687760936062936386,[10.666666666666742,3.555555555555543]],[14131440324578863745,[0.0,0.0]],[14571502160667941876,[-0.5925925925926094,0.0]]],"handle_end":[[239843798079287870,[-21.502976534539364,2.3372800581021456]],[4499620435559196394,[8.59259259259261,5.629629629629619]],[7117413478945421556,[15.703703703703695,33.48148148148147]],[7203043366367198812,[-1.1851851851852189,-25.18518518518516]],[7250062683967197158,[0.0,0.0]],[7655921914272804429,[-10.666666666666742,-3.555555555555543]],[9071432674597727163,[-9.913826570592164,1.9012818080587977]],[12687760936062936386,[0.0,0.0]],[14131440324578863745,[2.962962962963047,-3.259259259259238]],[14571502160667941876,[24.395061728395035,-0.36213991769540144]]],"stroke":[[239843798079287870,0],[4499620435559196394,0],[7117413478945421556,0],[7203043366367198812,0],[7250062683967197158,0],[7655921914272804429,0],[9071432674597727163,0],[12687760936062936386,0],[14131440324578863745,0],[14571502160667941876,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":239843798079287870},{"ty":"End","segment":9071432674597727163}],[{"ty":"End","segment":239843798079287870},{"ty":"Primary","segment":7655921914272804429}],[{"ty":"End","segment":7250062683967197158},{"ty":"Primary","segment":14131440324578863745}],[{"ty":"End","segment":7655921914272804429},{"ty":"Primary","segment":12687760936062936386}],[{"ty":"End","segment":12687760936062936386},{"ty":"Primary","segment":7117413478945421556}]],"remove_g1_continuous":[[{"ty":"End","segment":3746587001535987651},{"ty":"Primary","segment":239843798079287870}],[{"ty":"End","segment":9071432674597727163},{"ty":"Primary","segment":3746587001535987651}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5877930116725120460,{"inputs":[{"Node":{"node_id":4470272391975492611,"output_index":0}},{"Node":{"node_id":1258994191538244490,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5888633415105234509,{"inputs":[{"Node":{"node_id":3750439930725791025,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5954536408321808728,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8323145223085840944,87630150944518163,8212340198835025146,6057321578372831916,16788403743390653241,16686047298905200065,15635903913637220842,8652457572576966876,3124531241960914803,18307826411292029066,9969822516610975381,16995054111951247369,16808246968731723098],"remove":[],"delta":[[87630150944518163,[879.1111111111111,595.8518518518517]],[3124531241960914803,[589.9588477366256,64.65843621399176]],[6057321578372831916,[708.148148148148,616.2962962962962]],[8212340198835025146,[830.8148148148148,633.7777777777776]],[8323145223085840944,[891.5555555555554,569.3827160493826]],[8652457572576966876,[514.4523315429688,146.72100830078125]],[9969822516610975381,[0.0,0.0]],[15635903913637220842,[468.4799499511719,219.78570556640625]],[16686047298905200065,[283.3333333333333,354.66666666666663]],[16788403743390653241,[467.99999999999994,487.3333333333333]],[16808246968731723098,[891.5555555555554,768.0]],[16995054111951247369,[0.0,768.0]],[18307826411292029066,[601.1756940654021,0.0]]]},"segments":{"add":[14879480148926424885,5227512358023446442,17410347049685436697,9544743211426701912,14715945740984195653,515539069333222772,9242150930423817167,8823161072525575433,15885450050057549950,1662692131856898001,178608879920007638,12162371359208565273,16224358815792062223],"remove":[],"start_point":[[178608879920007638,9969822516610975381],[515539069333222772,16686047298905200065],[1662692131856898001,18307826411292029066],[5227512358023446442,87630150944518163],[8823161072525575433,8652457572576966876],[9242150930423817167,15635903913637220842],[9544743211426701912,6057321578372831916],[12162371359208565273,16995054111951247369],[14715945740984195653,16788403743390653241],[14879480148926424885,8323145223085840944],[15885450050057549950,3124531241960914803],[16224358815792062223,16808246968731723098],[17410347049685436697,8212340198835025146]],"end_point":[[178608879920007638,16995054111951247369],[515539069333222772,15635903913637220842],[1662692131856898001,9969822516610975381],[5227512358023446442,8212340198835025146],[8823161072525575433,3124531241960914803],[9242150930423817167,8652457572576966876],[9544743211426701912,16788403743390653241],[12162371359208565273,16808246968731723098],[14715945740984195653,16686047298905200065],[14879480148926424885,87630150944518163],[15885450050057549950,18307826411292029066],[16224358815792062223,8323145223085840944],[17410347049685436697,6057321578372831916]],"handle_primary":[[178608879920007638,[0.0,0.0]],[515539069333222772,[48.66666666666663,-23.999999999999943]],[1662692131856898001,[0.0,0.0]],[5227512358023446442,[-4.444444444444457,18.074074074074133]],[8823161072525575433,[11.259252477575274,-22.666663275824646]],[9242150930423817167,[27.25925925925918,-22.518518518518533]],[9544743211426701912,[-57.48148148148141,-21.629629629629676]],[12162371359208565273,[0.0,0.0]],[14715945740984195653,[-92.66666666666656,-80.66666666666669]],[14879480148926424885,[0.0,0.0]],[15885450050057549950,[11.193415637860312,-27.25925925925926]],[16224358815792062223,[0.0,0.0]],[17410347049685436697,[-26.37037037037044,2.3703703703704377]]],"handle_end":[[178608879920007638,[0.0,0.0]],[515539069333222772,[-95.07216232621772,78.5378732260062]],[1662692131856898001,[0.0,0.0]],[5227512358023446442,[26.37037037037044,-2.3703703703704377]],[8823161072525575433,[-12.439135136214697,30.29295262583988]],[9242150930423817167,[-9.36826657882972,18.859808361471693]],[9544743211426701912,[92.66666666666656,80.66666666666669]],[12162371359208565273,[0.0,0.0]],[14715945740984195653,[0.0,0.0]],[14879480148926424885,[4.444444444444457,-18.074074074074133]],[15885450050057549950,[0.0,0.0]],[16224358815792062223,[0.0,0.0]],[17410347049685436697,[57.48148148148141,21.629629629629676]]],"stroke":[[178608879920007638,0],[515539069333222772,0],[1662692131856898001,0],[5227512358023446442,0],[8823161072525575433,0],[9242150930423817167,0],[9544743211426701912,0],[12162371359208565273,0],[14715945740984195653,0],[14879480148926424885,0],[15885450050057549950,0],[16224358815792062223,0],[17410347049685436697,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":178608879920007638},{"ty":"Primary","segment":12162371359208565273}],[{"ty":"End","segment":515539069333222772},{"ty":"Primary","segment":9242150930423817167}],[{"ty":"End","segment":1662692131856898001},{"ty":"Primary","segment":178608879920007638}],[{"ty":"End","segment":5227512358023446442},{"ty":"Primary","segment":17410347049685436697}],[{"ty":"End","segment":8823161072525575433},{"ty":"Primary","segment":15885450050057549950}],[{"ty":"End","segment":9242150930423817167},{"ty":"Primary","segment":8823161072525575433}],[{"ty":"End","segment":9544743211426701912},{"ty":"Primary","segment":14715945740984195653}],[{"ty":"End","segment":12162371359208565273},{"ty":"Primary","segment":16224358815792062223}],[{"ty":"End","segment":14879480148926424885},{"ty":"Primary","segment":5227512358023446442}],[{"ty":"End","segment":15885450050057549950},{"ty":"Primary","segment":1662692131856898001}],[{"ty":"End","segment":17410347049685436697},{"ty":"Primary","segment":9544743211426701912}]],"remove_g1_continuous":[[{"ty":"End","segment":14715945740984195653},{"ty":"Primary","segment":515539069333222772}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6194305264313730032,{"inputs":[{"Node":{"node_id":4560146526699152877,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6445954214067437701,{"inputs":[{"Node":{"node_id":13670206802546093234,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6484183251661832039,{"inputs":[{"Node":{"node_id":294265135510952894,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[474.2,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.2},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6503655938154160104,{"inputs":[{"Node":{"node_id":17696051535511578981,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6616450276140292763,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[14760110820354327749,9465415708990918986,13517856880347849115,12398030966924498647,2930103517622848405,9496337687212684441],"remove":[],"delta":[[2930103517622848405,[819.2592592592591,69.33333333333334]],[9465415708990918986,[706.3703703703703,86.51851851851853]],[9496337687212684441,[732.148148148148,57.18518518518518]],[12398030966924498647,[823.4074074074074,97.4814814814815]],[13517856880347849115,[777.1851851851851,92.44444444444446]],[14760110820354327749,[614.8148148148148,129.1851851851852]]]},"segments":{"add":[18226408581696793441,16628058317667581864,3809009367670994230,13496648265229692336,10686631697241750410,11696351847604335156],"remove":[],"start_point":[[3809009367670994230,13517856880347849115],[10686631697241750410,2930103517622848405],[11696351847604335156,9496337687212684441],[13496648265229692336,12398030966924498647],[16628058317667581864,9465415708990918986],[18226408581696793441,14760110820354327749]],"end_point":[[3809009367670994230,12398030966924498647],[10686631697241750410,9496337687212684441],[11696351847604335156,14760110820354327749],[13496648265229692336,2930103517622848405],[16628058317667581864,13517856880347849115],[18226408581696793441,9465415708990918986]],"handle_primary":[[3809009367670994230,[21.33333333333337,4.740740740740733]],[10686631697241750410,[-13.037037037036953,-4.444444444444457]],[11696351847604335156,[-29.333333333333258,11.55555555555555]],[13496648265229692336,[14.222222222222172,-0.8888888888888857]],[16628058317667581864,[41.185185185185105,-9.7777777777778]],[18226408581696793441,[0.0,0.0]]],"handle_end":[[3809009367670994230,[-14.222222222222172,0.8888888888888857]],[10686631697241750410,[29.333333333333258,-11.55555555555555]],[11696351847604335156,[54.81481481481478,-42.37037037037035]],[13496648265229692336,[13.037037037036953,4.444444444444457]],[16628058317667581864,[-21.33333333333337,-4.740740740740733]],[18226408581696793441,[-41.185185185185105,9.7777777777778]]],"stroke":[[3809009367670994230,0],[10686631697241750410,0],[11696351847604335156,0],[13496648265229692336,0],[16628058317667581864,0],[18226408581696793441,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3809009367670994230},{"ty":"Primary","segment":13496648265229692336}],[{"ty":"End","segment":10686631697241750410},{"ty":"Primary","segment":11696351847604335156}],[{"ty":"End","segment":13496648265229692336},{"ty":"Primary","segment":10686631697241750410}],[{"ty":"End","segment":16628058317667581864},{"ty":"Primary","segment":3809009367670994230}],[{"ty":"End","segment":18226408581696793441},{"ty":"Primary","segment":16628058317667581864}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6726954210929537972,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[177515045030371783,4609870404630548899,1458337690478625792,16230687409600568539,8055802412900565217,12390708657704154619,12909592102393222573,6873550371723398444,13416153271806375161,2492294980235986276,12448133448335459077,7624137673235413199],"remove":[],"delta":[[177515045030371783,[604.2883706752018,0.0]],[1458337690478625792,[473.1851851851851,213.62962962962965]],[2492294980235986276,[604.4434936307387,42.970116997735616]],[4609870404630548899,[589.432098765432,64.79012345679011]],[6873550371723398444,[538.6666666666667,136.0]],[7624137673235413199,[617.8765432098766,2.465190328815662e-32]],[8055802412900565217,[480.4444444444445,219.7777777777778]],[12390708657704154619,[596.6748971193416,72.42798353909465]],[12448133448335459077,[610.3703703703706,2.4308653429145085e-63]],[12909592102393222573,[607.8024691358027,0.0]],[13416153271806375161,[531.8518518518517,131.2592592592593]],[16230687409600568539,[491.55555555555554,311.55555555555566]]]},"segments":{"add":[12529947318087068663,5578827639764758986,1705877195608053135,2463526518527501592,9361245670457788924,921651403153242564,9825559201153691780,15749222431214672690,14294722277069184337,4341232355541306629,3818841110886669992],"remove":[5057709998225566481,11060716078587457450,16939098306153440303,17799038492181728804,17843645051722826880],"start_point":[[921651403153242564,4609870404630548899],[1705877195608053135,16230687409600568539],[2463526518527501592,8055802412900565217],[3818841110886669992,7624137673235413199],[4341232355541306629,12390708657704154619],[5578827639764758986,1458337690478625792],[9361245670457788924,6873550371723398444],[9825559201153691780,13416153271806375161],[12529947318087068663,177515045030371783],[14294722277069184337,12448133448335459077],[15749222431214672690,2492294980235986276]],"end_point":[[921651403153242564,13416153271806375161],[1705877195608053135,8055802412900565217],[2463526518527501592,6873550371723398444],[3818841110886669992,12448133448335459077],[4341232355541306629,7624137673235413199],[5578827639764758986,16230687409600568539],[9361245670457788924,12390708657704154619],[9825559201153691780,1458337690478625792],[12529947318087068663,4609870404630548899],[14294722277069184337,2492294980235986276],[15749222431214672690,12909592102393222573]],"handle_primary":[[921651403153242564,[-7.513106110924076,12.956274823940417]],[1705877195608053135,[0.0,0.0]],[2463526518527501592,[9.74414620103056,-24.528368023283747]],[3818841110886669992,[0.0,0.0]],[4341232355541306629,[19.753086419753117,-26.73251028806584]],[5578827639764758986,[-19.25925925925924,60.44444444444443]],[9361245670457788924,[22.844654233974516,-21.876660410500975]],[9825559201153691780,[-30.00610951685011,28.39287782239575]],[12529947318087068663,[0.0,0.0]],[14294722277069184337,[-0.2633744855968416,28.576131687242796]],[15749222431214672690,[3.877242131088792,-22.333682252383095]]],"handle_end":[[921651403153242564,[27.555555555555657,-26.07407407407412]],[1705877195608053135,[-19.33333333333331,48.66666666666666]],[2463526518527501592,[-34.96296296296305,33.481481481481495]],[3818841110886669992,[0.0,0.0]],[4341232355541306629,[0.0,0.0]],[5578827639764758986,[0.0,0.0]],[9361245670457788924,[-16.14969885498249,21.855925783742933]],[9825559201153691780,[6.194184133897295,-19.440208666385132]],[12529947318087068663,[12.90534979423876,-22.255144032921805]],[14294722277069184337,[0.0,0.0]],[15749222431214672690,[0.0,0.0]]],"stroke":[[921651403153242564,0],[1705877195608053135,0],[2463526518527501592,0],[3818841110886669992,0],[4341232355541306629,0],[5578827639764758986,0],[9361245670457788924,0],[9825559201153691780,0],[12529947318087068663,0],[14294722277069184337,0],[15749222431214672690,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":5578827639764758986},{"ty":"End","segment":9825559201153691780}],[{"ty":"Primary","segment":16939098306153440303},{"ty":"End","segment":9361245670457788924}],[{"ty":"End","segment":921651403153242564},{"ty":"Primary","segment":9825559201153691780}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":2463526518527501592}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":17799038492181728804}],[{"ty":"End","segment":2463526518527501592},{"ty":"Primary","segment":9361245670457788924}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":4341232355541306629}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":5057709998225566481}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":17843645051722826880}],[{"ty":"End","segment":11060716078587457450},{"ty":"Primary","segment":5578827639764758986}],[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":921651403153242564}],[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":11060716078587457450}],[{"ty":"End","segment":17799038492181728804},{"ty":"Primary","segment":16939098306153440303}],[{"ty":"End","segment":17843645051722826880},{"ty":"Primary","segment":15749222431214672690}]],"remove_g1_continuous":[[{"ty":"Primary","segment":14294722277069184337},{"ty":"End","segment":3818841110886669992}],[{"ty":"Primary","segment":15749222431214672690},{"ty":"End","segment":14294722277069184337}],[{"ty":"End","segment":4341232355541306629},{"ty":"Primary","segment":3818841110886669992}],[{"ty":"End","segment":5057709998225566481},{"ty":"Primary","segment":14294722277069184337}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6728362629909402903,{"inputs":[{"Node":{"node_id":5856350938151339368,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6787585796949551500,{"inputs":[{"Node":{"node_id":11095670964487764044,"output_index":0}},{"Node":{"node_id":16177422101884031678,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6852799892628327372,{"inputs":[{"Node":{"node_id":2025899804080897524,"output_index":0}},{"Node":{"node_id":16671141883125519098,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7018444885869143173,{"inputs":[{"Node":{"node_id":12234961922142600898,"output_index":0}},{"Node":{"node_id":8426490990601560741,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7029437790788498388,{"inputs":[{"Node":{"node_id":1809704172129195322,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[40.0,0.0,0.0,40.0,-20.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7104088139635280554,{"inputs":[{"Node":{"node_id":16785043320296790229,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7104261880154687267,{"inputs":[{"Node":{"node_id":2834866505092039323,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7201841978411396053,{"inputs":[{"Node":{"node_id":4328376070224119511,"output_index":0}},{"Node":{"node_id":17735408893002232096,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7252918969430566594,{"inputs":[{"Node":{"node_id":5534800796196967885,"output_index":0}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7376049709233607419,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16958489363675356032,7347160684180114694,4322398537034510509,3438797896265725901,16005438712872589849,1674257131044231065,10491326691824745018,9374180853656949931,13358295350421759755,15245407364463454564],"remove":[],"delta":[[1674257131044231065,[829.4320987654323,121.67901234567904]],[3438797896265725901,[795.4567901234569,94.41975308641976]],[4322398537034510509,[776.888888888889,117.53086419753087]],[7347160684180114694,[772.1481481481483,138.66666666666669]],[9374180853656949931,[784.0000000000002,176.98765432098767]],[10491326691824745018,[811.851851851852,148.54320987654322]],[13358295350421759755,[778.4691358024693,177.1851851851852]],[15245407364463454564,[773.530864197531,141.4320987654321]],[16005438712872589849,[817.1851851851852,94.61728395061728]],[16958489363675356032,[658.172839506173,169.08641975308643]]]},"segments":{"add":[11663644781855838202,198953627342130434,8327087349631976772,13015157349146777770,8528911024810728168,3235570761188242773,16847383896493391194,16846650637386857857,3784798568712268630,12873317883441611394],"remove":[],"start_point":[[198953627342130434,7347160684180114694],[3235570761188242773,1674257131044231065],[3784798568712268630,13358295350421759755],[8327087349631976772,4322398537034510509],[8528911024810728168,16005438712872589849],[11663644781855838202,16958489363675356032],[12873317883441611394,15245407364463454564],[13015157349146777770,3438797896265725901],[16846650637386857857,9374180853656949931],[16847383896493391194,10491326691824745018]],"end_point":[[198953627342130434,4322398537034510509],[3235570761188242773,10491326691824745018],[3784798568712268630,15245407364463454564],[8327087349631976772,3438797896265725901],[8528911024810728168,1674257131044231065],[11663644781855838202,7347160684180114694],[12873317883441611394,16958489363675356032],[13015157349146777770,16005438712872589849],[16846650637386857857,13358295350421759755],[16847383896493391194,9374180853656949931]],"handle_primary":[[198953627342130434,[0.0,0.3950617283950635]],[3235570761188242773,[0.1975308641974607,7.703703703703709]],[3784798568712268630,[-2.962962962963161,-10.864197530864232]],[8327087349631976772,[-0.19753086419757435,-13.82716049382715]],[8528911024810728168,[5.530864197530946,5.925925925925924]],[11663644781855838202,[0.0,0.0]],[12873317883441611394,[-19.75308641975323,2.172839506172835]],[13015157349146777770,[0.0,0.0]],[16846650637386857857,[0.0,0.0]],[16847383896493391194,[-17.185185185185105,13.234567901234584]]],"handle_end":[[198953627342130434,[0.19753086419757435,13.82716049382715]],[3235570761188242773,[17.185185185185105,-13.234567901234584]],[3784798568712268630,[2.9629629629629335,5.135802469135797]],[8327087349631976772,[0.0,0.0]],[8528911024810728168,[-0.1975308641974607,-7.703703703703709]],[11663644781855838202,[-74.27160493827171,29.03703703703698]],[12873317883441611394,[33.382716049382566,14.222222222222172]],[13015157349146777770,[-5.530864197530946,-5.925925925925924]],[16846650637386857857,[0.0,0.0]],[16847383896493391194,[0.0,0.0]]],"stroke":[[198953627342130434,0],[3235570761188242773,0],[3784798568712268630,0],[8327087349631976772,0],[8528911024810728168,0],[11663644781855838202,0],[12873317883441611394,0],[13015157349146777770,0],[16846650637386857857,0],[16847383896493391194,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":198953627342130434},{"ty":"Primary","segment":8327087349631976772}],[{"ty":"End","segment":3235570761188242773},{"ty":"Primary","segment":16847383896493391194}],[{"ty":"End","segment":8327087349631976772},{"ty":"Primary","segment":13015157349146777770}],[{"ty":"End","segment":8528911024810728168},{"ty":"Primary","segment":3235570761188242773}],[{"ty":"End","segment":13015157349146777770},{"ty":"Primary","segment":8528911024810728168}],[{"ty":"End","segment":16847383896493391194},{"ty":"Primary","segment":16846650637386857857}]],"remove_g1_continuous":[[{"ty":"End","segment":3784798568712268630},{"ty":"Primary","segment":12873317883441611394}],[{"ty":"End","segment":16846650637386857857},{"ty":"Primary","segment":3784798568712268630}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7480253252288032958,{"inputs":[{"Node":{"node_id":7104261880154687267,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[195.0851086560816,0.0,0.0,195.0851086560816,491.34203769,481.9969791731038]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7651693425519490419,{"inputs":[{"Node":{"node_id":4771789845668099116,"output_index":0}},{"Node":{"node_id":15817956847588799375,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7667878689218439065,{"inputs":[{"Node":{"node_id":18271512507682813443,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7755499790391969923,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7855094781869605606,{"inputs":[{"Node":{"node_id":14141479077115894852,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractBack"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7962101329808960965,{"inputs":[{"Node":{"node_id":16322546010403524636,"output_index":0}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7977952035097419157,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::EllipseNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8269257328703012432,{"inputs":[{"Node":{"node_id":4102754869474520966,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[527.149568302942,0.0,0.0,527.149568302942,969.0,112.62232452533392]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8297015715799006244,{"inputs":[{"Node":{"node_id":17569892869974995307,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,407.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":24.2},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8359580532088731394,{"inputs":[{"Node":{"node_id":6726954210929537972,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[150.17799756170405,0.0,0.0,150.17799756170405,467.6985456481726,155.77777777777783]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8426490990601560741,{"inputs":[{"Node":{"node_id":10760002922115563021,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[234.710547513527,0.0,0.0,234.710547513527,1240.7725840169994,39.84647303257805]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8460565235419043665,{"inputs":[{"Node":{"node_id":3079923906392020295,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,412.1]},"exposed":false}},{"Value":{"tagged_value":{"F64":27.6},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8511737864852441844,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8566844905246185636,{"inputs":[{"Node":{"node_id":6852799892628327372,"output_index":0}},{"Node":{"node_id":17131529656312051452,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8863346544623578893,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5480246971175127548,949359986970918930,6461719056721357962,6265491311473200676],"remove":[947514826240006203],"delta":[[949359986970918930,[0.0,608.0]],[5480246971175127548,[364.0,767.9999999999999]],[6265491311473200676,[-2.273736754432321e-13,768.0000000000001]],[6461719056721357962,[173.33333333333331,506.66666666666674]]]},"segments":{"add":[8951068186878308228,9717584104793611782,15710828508798332384,12480300844056666979],"remove":[6561081452252813685,11231973846952426191,15926511461198813522],"start_point":[[8951068186878308228,6461719056721357962],[9717584104793611782,949359986970918930],[12480300844056666979,6265491311473200676],[15710828508798332384,5480246971175127548]],"end_point":[[8951068186878308228,5480246971175127548],[9717584104793611782,6461719056721357962],[12480300844056666979,949359986970918930],[15710828508798332384,6265491311473200676]],"handle_primary":[[8951068186878308228,[121.00000000000006,-37.99999999999994]],[9717584104793611782,[0.0,0.0]],[12480300844056666979,null],[15710828508798332384,null]],"handle_end":[[8951068186878308228,[-92.0,-81.99999999999989]],[9717584104793611782,[-63.1770926995265,19.84073985604961]],[12480300844056666979,null],[15710828508798332384,null]],"stroke":[[8951068186878308228,0],[9717584104793611782,0],[12480300844056666979,0],[15710828508798332384,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":8951068186878308228},{"ty":"End","segment":9717584104793611782}],[{"ty":"Primary","segment":9717584104793611782},{"ty":"End","segment":12480300844056666979}],[{"ty":"End","segment":6561081452252813685},{"ty":"Primary","segment":9717584104793611782}]],"remove_g1_continuous":[[{"ty":"Primary","segment":11231973846952426191},{"ty":"End","segment":9717584104793611782}],[{"ty":"End","segment":15926511461198813522},{"ty":"Primary","segment":8951068186878308228}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8887924609778270360,{"inputs":[{"Node":{"node_id":5014806436727666175,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9071802450034150503,{"inputs":[{"Node":{"node_id":9338394475379815879,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,-0.5,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9135110142507605216,{"inputs":[{"Node":{"node_id":11196821089257149774,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9338394475379815879,{"inputs":[{"Node":{"node_id":7977952035097419157,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1327.0278641242007,11.102707365920756]},"exposed":false}},{"Value":{"tagged_value":{"F64":13.64801326231709},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[230.36030209674013,67.6958526826066]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2.2090991564182537e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9563008199132558110,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[458.37025643097087,0.0,0.0,458.37025643097087,0.0,536.6436095791163]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9808637865669223270,{"inputs":[{"Node":{"node_id":140396870212231820,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[888.3925221020878,0.0,0.0,888.3925221020878,0.0,384.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10063704933309776584,{"inputs":[{"Node":{"node_id":13838011362258067867,"output_index":0}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10080296672372912698,{"inputs":[{"Node":{"node_id":12867379765049504290,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10265035897167064154,{"inputs":[{"Node":{"node_id":14698962747138962125,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[89.4784572749088,0.0,0.0,89.4784572749088,825.6747934624586,531.907924925352]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10286817149456341619,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10786213048155734586,12599396287665855262,6164201091766276213,6781153531246981076,15695128662656633322,8241402276734357681,10333377922713208038,3749627916562964805,2535476870476707501],"remove":[],"delta":[[2535476870476707501,[887.5061728395062,568.6913580246915]],[3749627916562964805,[866.172839506173,558.2222222222224]],[6164201091766276213,[902.9135802469136,506.8641975308643]],[6781153531246981076,[872.6913580246915,513.7777777777779]],[8241402276734357681,[853.3333333333336,529.1851851851854]],[10333377922713208038,[843.4567901234569,550.1234567901236]],[10786213048155734586,[917.7283950617284,502.91358024691374]],[12599396287665855262,[902.5185185185188,498.56790123456807]],[15695128662656633322,[825.6790123456792,509.4320987654323]]]},"segments":{"add":[15700595221504820396,6369399239389505343,17761347836385237495,3021925106447084698,14489254209548096966,3461110970422306113,14847678502054094837,14515109677644612103,264894972572137143],"remove":[],"start_point":[[264894972572137143,2535476870476707501],[3021925106447084698,6781153531246981076],[3461110970422306113,8241402276734357681],[6369399239389505343,12599396287665855262],[14489254209548096966,15695128662656633322],[14515109677644612103,3749627916562964805],[14847678502054094837,10333377922713208038],[15700595221504820396,10786213048155734586],[17761347836385237495,6164201091766276213]],"end_point":[[264894972572137143,10786213048155734586],[3021925106447084698,15695128662656633322],[3461110970422306113,10333377922713208038],[6369399239389505343,6164201091766276213],[14489254209548096966,8241402276734357681],[14515109677644612103,2535476870476707501],[14847678502054094837,3749627916562964805],[15700595221504820396,12599396287665855262],[17761347836385237495,6781153531246981076]],"handle_primary":[[264894972572137143,[0.0,0.0]],[3021925106447084698,[-16.59259259259261,2.370370370370324]],[3461110970422306113,[0.38915905346209456,1.493515242756871]],[6369399239389505343,[-7.1111111111111995,-5.530864197530889]],[14489254209548096966,[-0.3950434518873181,1.0617032941893854]],[14515109677644612103,[8.888888888888914,0.0]],[14847678502054094837,[0.7901234567900701,2.765432098765473]],[15700595221504820396,[0.0,0.0]],[17761347836385237495,[0.0,0.0]]],"handle_end":[[264894972572137143,[3.753086419753003,37.1358024691358]],[3021925106447084698,[0.5488119028742631,-1.474965354794051]],[3461110970422306113,[-0.7901234567900701,-2.765432098765473]],[6369399239389505343,[0.0,0.0]],[14489254209548096966,[-0.5712718875797691,-2.192428171126153]],[14515109677644612103,[0.0,0.0]],[14847678502054094837,[-8.888888888888914,0.0]],[15700595221504820396,[7.1111111111111995,5.530864197530889]],[17761347836385237495,[16.59259259259261,-2.370370370370324]]],"stroke":[[264894972572137143,0],[3021925106447084698,0],[3461110970422306113,0],[6369399239389505343,0],[14489254209548096966,0],[14515109677644612103,0],[14847678502054094837,0],[15700595221504820396,0],[17761347836385237495,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3021925106447084698},{"ty":"Primary","segment":14489254209548096966}],[{"ty":"End","segment":3461110970422306113},{"ty":"Primary","segment":14847678502054094837}],[{"ty":"End","segment":6369399239389505343},{"ty":"Primary","segment":17761347836385237495}],[{"ty":"End","segment":14489254209548096966},{"ty":"Primary","segment":3461110970422306113}],[{"ty":"End","segment":14515109677644612103},{"ty":"Primary","segment":264894972572137143}],[{"ty":"End","segment":14847678502054094837},{"ty":"Primary","segment":14515109677644612103}],[{"ty":"End","segment":15700595221504820396},{"ty":"Primary","segment":6369399239389505343}],[{"ty":"End","segment":17761347836385237495},{"ty":"Primary","segment":3021925106447084698}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10760002922115563021,{"inputs":[{"Node":{"node_id":14257963317028524134,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10995640810984321903,{"inputs":[{"Node":{"node_id":12353675714904258944,"output_index":0}},{"Node":{"node_id":10265035897167064154,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11095670964487764044,{"inputs":[{"Node":{"node_id":17603523494627491590,"output_index":0}},{"Node":{"node_id":8359580532088731394,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11196821089257149774,{"inputs":[{"Node":{"node_id":5888633415105234509,"output_index":0}},{"Node":{"node_id":18031616785650843168,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11201759760883367635,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5173348374891662425,12314285668680405002,7388288026322342161,12796056970187696453],"remove":[],"delta":[[5173348374891662425,[969.0,0.0]],[7388288026322342161,[1277.0,319.0]],[12314285668680405002,[1085.0,181.0]],[12796056970187696453,[1418.0,0.0]]]},"segments":{"add":[10860608091363771974,9177623211202289793,18091265337503274797,9065140293539496953],"remove":[],"start_point":[[9065140293539496953,12796056970187696453],[9177623211202289793,12314285668680405002],[10860608091363771974,5173348374891662425],[18091265337503274797,7388288026322342161]],"end_point":[[9065140293539496953,5173348374891662425],[9177623211202289793,7388288026322342161],[10860608091363771974,12314285668680405002],[18091265337503274797,12796056970187696453]],"handle_primary":[[9065140293539496953,[0.0,0.0]],[9177623211202289793,[-33.0,137.0]],[10860608091363771974,[0.0,0.0]],[18091265337503274797,[178.0,-35.0]]],"handle_end":[[9065140293539496953,[0.0,0.0]],[9177623211202289793,[-77.81941867085992,15.301571086966838]],[10860608091363771974,[25.066898104916696,-104.0656072840481]],[18091265337503274797,[168.99998492988766,81.0]]],"stroke":[[9065140293539496953,0],[9177623211202289793,0],[10860608091363771974,0],[18091265337503274797,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9177623211202289793},{"ty":"Primary","segment":18091265337503274797}],[{"ty":"End","segment":10860608091363771974},{"ty":"Primary","segment":9177623211202289793}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11210964267417873667,{"inputs":[{"Node":{"node_id":4261249487994076490,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[91.7203910728,-99.9607940061]},"exposed":false}},{"Value":{"tagged_value":{"F64":23.318559511400004},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11264395591110193456,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11301831865756336526,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3251241957527197760,11100418327549747778,8048619563638005414,1078998931754662073],"remove":[],"delta":[[1078998931754662073,[942.0246913580248,264.2962962962963]],[3251241957527197760,[875.8001811251517,185.6784024477276]],[8048619563638005414,[944.0577392578124,302.0703430175781]],[11100418327549747778,[910.880658436214,243.0946502057613]]]},"segments":{"add":[6165219920202055745,10795897848378052161,3439025775805007707,12551435438068218604],"remove":[],"start_point":[[3439025775805007707,8048619563638005414],[6165219920202055745,3251241957527197760],[10795897848378052161,11100418327549747778],[12551435438068218604,1078998931754662073]],"end_point":[[3439025775805007707,1078998931754662073],[6165219920202055745,11100418327549747778],[10795897848378052161,8048619563638005414],[12551435438068218604,3251241957527197760]],"handle_primary":[[3439025775805007707,[-2.629814161991817e-6,5.151861046215345e-6]],[6165219920202055745,[0.0,0.0]],[10795897848378052161,[11.46027223334628,13.82427457744465]],[12551435438068218604,[-14.61728395061732,-27.456790123456813]]],"handle_end":[[3439025775805007707,[14.61728395061732,27.456790123456813]],[6165219920202055745,[-29.36625514403283,-35.42386831275718]],[10795897848378052161,[-4.732636377154108,-19.33783272951229]],[12551435438068218604,[23.33217876876199,5.204454965879364]]],"stroke":[[3439025775805007707,0],[6165219920202055745,0],[10795897848378052161,0],[12551435438068218604,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3439025775805007707},{"ty":"Primary","segment":12551435438068218604}],[{"ty":"End","segment":6165219920202055745},{"ty":"Primary","segment":10795897848378052161}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11373527190663101881,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[12058665768506126331,6802441093413090533,4854280308383915721,17729943149159368459,7436032950540776377,2189722519288419244,15817054697695831753,15744271344233846756,13877679667762731651,13567509413382199058,5664077098702810122,14178520291283306679,15575201098426093294],"remove":[],"delta":[[2189722519288419244,[796.0493827160494,202.2716049382716]],[4854280308383915721,[813.9259259259259,200.2962962962963]],[5664077098702810122,[686.5185185185185,191.1111111111111]],[6802441093413090533,[783.4074074074074,172.74074074074073]],[7436032950540776377,[815.4074074074074,203.25925925925927]],[12058665768506126331,[693.7283950617283,174.35390946502056]],[13567509413382199058,[702.6831275720166,195.95061728395063]],[13877679667762731651,[743.4074074074074,234.66666666666669]],[14178520291283306679,[668.4444444444443,183.1111111111111]],[15575201098426093294,[636.7407407407406,173.33333333333331]],[15744271344233846756,[785.7777777777777,205.62962962962965]],[15817054697695831753,[806.716049382716,206.22222222222223]],[17729943149159368459,[801.1851851851852,199.90123456790124]]]},"segments":{"add":[2336956120616260883,1639796012074210121,3918280827204321712,13932755083907220179,14941832641240060361,94092576912261794,18299135553255571870,3109091330258982137,11037018395008586448,16261506098907231989,8279051592565434787,2367379450383978497,5102625335252315850],"remove":[],"start_point":[[94092576912261794,2189722519288419244],[1639796012074210121,6802441093413090533],[2336956120616260883,12058665768506126331],[2367379450383978497,14178520291283306679],[3109091330258982137,15744271344233846756],[3918280827204321712,4854280308383915721],[5102625335252315850,15575201098426093294],[8279051592565434787,5664077098702810122],[11037018395008586448,13877679667762731651],[13932755083907220179,17729943149159368459],[14941832641240060361,7436032950540776377],[16261506098907231989,13567509413382199058],[18299135553255571870,15817054697695831753]],"end_point":[[94092576912261794,15817054697695831753],[1639796012074210121,4854280308383915721],[2336956120616260883,6802441093413090533],[2367379450383978497,15575201098426093294],[3109091330258982137,13877679667762731651],[3918280827204321712,17729943149159368459],[5102625335252315850,12058665768506126331],[8279051592565434787,14178520291283306679],[11037018395008586448,13567509413382199058],[13932755083907220179,7436032950540776377],[14941832641240060361,2189722519288419244],[16261506098907231989,5664077098702810122],[18299135553255571870,15744271344233846756]],"handle_primary":[[94092576912261794,[0.0,0.0]],[1639796012074210121,[0.0,0.0]],[2336956120616260883,[0.0,0.0]],[2367379450383978497,[-5.037037037036953,-1.7777777777777717]],[3109091330258982137,[0.0,0.0]],[3918280827204321712,[0.0,0.0]],[5102625335252315850,[0.0,0.0]],[8279051592565434787,[-16.75720164609038,-2.1399176954732297]],[11037018395008586448,[0.0,0.0]],[13932755083907220179,[0.0,0.0]],[14941832641240060361,[0.0,0.0]],[16261506098907231989,[0.0,0.0]],[18299135553255571870,[0.0,0.0]]],"handle_end":[[94092576912261794,[0.0,0.0]],[1639796012074210121,[-19.259259259259352,-3.259259259259238]],[2336956120616260883,[-65.77777777777783,13.333333333333314]],[2367379450383978497,[12.740740740740648,5.037037037037038]],[3109091330258982137,[18.962962962963047,2.074074074074048]],[3918280827204321712,[0.0,0.0]],[5102625335252315850,[-27.12757201646093,2.633744855967052]],[8279051592565434787,[5.037037037036953,1.7777777777777717]],[11037018395008586448,[13.168724279835374,22.12345679012344]],[13932755083907220179,[0.0,0.0]],[14941832641240060361,[7.1111111111111995,1.7777777777778]],[16261506098907231989,[12.1395654462896,1.5502392023748983]],[18299135553255571870,[10.07407407407402,2.7654320987654444]]],"stroke":[[94092576912261794,0],[1639796012074210121,0],[2336956120616260883,0],[2367379450383978497,0],[3109091330258982137,0],[3918280827204321712,0],[5102625335252315850,0],[8279051592565434787,0],[11037018395008586448,0],[13932755083907220179,0],[14941832641240060361,0],[16261506098907231989,0],[18299135553255571870,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":94092576912261794},{"ty":"Primary","segment":18299135553255571870}],[{"ty":"End","segment":3918280827204321712},{"ty":"Primary","segment":13932755083907220179}],[{"ty":"End","segment":8279051592565434787},{"ty":"Primary","segment":2367379450383978497}],[{"ty":"End","segment":13932755083907220179},{"ty":"Primary","segment":14941832641240060361}],[{"ty":"End","segment":16261506098907231989},{"ty":"Primary","segment":8279051592565434787}]],"remove_g1_continuous":[[{"ty":"Primary","segment":16261506098907231989},{"ty":"End","segment":11037018395008586448}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11429506195623419966,{"inputs":[{"Node":{"node_id":11301831865756336526,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12145355397916841389,{"inputs":[{"Node":{"node_id":16759836951269190891,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[68.25755961943753,0.0,0.0,68.25755961943753,875.80018113,243.8743691861964]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12185047359007423618,{"inputs":[{"Node":{"node_id":10080296672372912698,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[481.3353038697805,0.0,0.0,481.3353038697805,4.508582931765269e-6,621.08062448]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12234961922142600898,{"inputs":[{"Node":{"node_id":1627123781166851142,"output_index":0}},{"Node":{"node_id":18351415092709164412,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12276520439585231336,{"inputs":[{"Node":{"node_id":13795432594059356320,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[997.5029638869316,545.7213923090854]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12353675714904258944,{"inputs":[{"Node":{"node_id":13203761224559198689,"output_index":0}},{"Node":{"node_id":17271572793812678706,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12494428953087324640,{"inputs":[{"Node":{"node_id":8511737864852441844,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12709602171929957216,{"inputs":[{"Node":{"node_id":17753909951719808506,"output_index":0}},{"Node":{"node_id":12922148192688274227,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12741076678082295759,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12770183061753030023,{"inputs":[{"Node":{"node_id":17495267820524300686,"output_index":0}},{"Node":{"node_id":1009114585722052052,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12867379765049504290,{"inputs":[{"Node":{"node_id":6445954214067437701,"output_index":0}},{"Node":{"node_id":8863346544623578893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12922148192688274227,{"inputs":[{"Node":{"node_id":18188505856445531484,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13027689870767713939,{"inputs":[{"Node":{"node_id":7201841978411396053,"output_index":0}},{"Node":{"node_id":13340751444307201866,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13203761224559198689,{"inputs":[{"Node":{"node_id":4809200889774783438,"output_index":0}},{"Node":{"node_id":14690269209726153565,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13340751444307201866,{"inputs":[{"Node":{"node_id":9135110142507605216,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[282.7272727300001,0.0,0.0,282.7272727300001,1019.77569116,696.2227208237161]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13353438235848911576,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6379137305818664393,18442321214082298093,18118267825025549699,6351696498298648253,17863574903157697896,4691860614575868200,301778328144628917,10625296323957562985,533731991408535384,13357220652574593654,15992617814592812350],"remove":[],"delta":[[301778328144628917,[493.5149940383244,200.29629629629628]],[533731991408535384,[501.6296296296296,175.40740740740742]],[4691860614575868200,[528.2962962962963,283.8518518518518]],[6351696498298648253,[646.8148148148149,0.0]],[6379137305818664393,[625.4814814814813,0.0]],[10625296323957562985,[473.4814814814815,272.5925925925926]],[13357220652574593654,[574.2222222222222,108.44444444444449]],[15992617814592812350,[621.0370370370368,0.0]],[17863574903157697896,[606.8148151308641,95.19407372365433]],[18118267825025549699,[642.0740740740741,0.0]],[18442321214082298093,[565.6296296296297,122.96296296296298]]]},"segments":{"add":[13662059715350867364,3384102572540409881,12035095010819582754,10146665273368938971,318560030360358929,8462655819889292900,3303411878775644985,8661113083384527971,2035327810332855521,11346538709718766144,3710133387837274291],"remove":[],"start_point":[[318560030360358929,17863574903157697896],[2035327810332855521,533731991408535384],[3303411878775644985,301778328144628917],[3384102572540409881,18442321214082298093],[3710133387837274291,15992617814592812350],[8462655819889292900,4691860614575868200],[8661113083384527971,10625296323957562985],[10146665273368938971,6351696498298648253],[11346538709718766144,13357220652574593654],[12035095010819582754,18118267825025549699],[13662059715350867364,6379137305818664393]],"end_point":[[318560030360358929,4691860614575868200],[2035327810332855521,13357220652574593654],[3303411878775644985,10625296323957562985],[3384102572540409881,18118267825025549699],[3710133387837274291,6379137305818664393],[8462655819889292900,301778328144628917],[8661113083384527971,533731991408535384],[10146665273368938971,17863574903157697896],[11346538709718766144,15992617814592812350],[12035095010819582754,6351696498298648253],[13662059715350867364,18442321214082298093]],"handle_primary":[[318560030360358929,[-46.95465552079859,46.40007297527743]],[2035327810332855521,[42.96296296296293,-41.7777777777778]],[3303411878775644985,[0.0,0.0]],[3384102572540409881,[0.0,0.0]],[3710133387837274291,[0.0,0.0]],[8462655819889292900,[0.0,0.0]],[8661113083384527971,[0.2962962962963047,0.2962962962963047]],[10146665273368938971,[0.0,0.0]],[11346538709718766144,[9.925839724176626,-9.951533978271286]],[12035095010819582754,[0.0,0.0]],[13662059715350867364,[0.0,0.0]]],"handle_end":[[318560030360358929,[-97.48148148148152,-81.18518518518522]],[2035327810332855521,[-8.299214014278164,8.32069754812484]],[3303411878775644985,[-6.2222222222222285,-40.59259259259261]],[3384102572540409881,[0.5807410754567854,77.36888852918523]],[3710133387837274291,[0.0,0.0]],[8462655819889292900,[-21.74426522093495,47.99999999999997]],[8661113083384527971,[-42.34888386913234,41.180638796880466]],[10146665273368938971,[48.16592595101224,-47.597037061827145]],[11346538709718766144,[1.1377781018271662,63.71555518874077]],[12035095010819582754,[0.0,0.0]],[13662059715350867364,[68.68148181185177,-54.8859262904691]]],"stroke":[[318560030360358929,0],[2035327810332855521,0],[3303411878775644985,0],[3384102572540409881,0],[3710133387837274291,0],[8462655819889292900,0],[8661113083384527971,0],[10146665273368938971,0],[11346538709718766144,0],[12035095010819582754,0],[13662059715350867364,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":11346538709718766144},{"ty":"End","segment":2035327810332855521}],[{"ty":"End","segment":8661113083384527971},{"ty":"Primary","segment":2035327810332855521}],[{"ty":"End","segment":10146665273368938971},{"ty":"Primary","segment":318560030360358929}],[{"ty":"End","segment":12035095010819582754},{"ty":"Primary","segment":10146665273368938971}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13446205009526451196,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[607.3671611941124,0.0,0.0,607.3671611941124,491.3420376907663,522.6595364267962]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13588160462734303101,{"inputs":[{"Node":{"node_id":17036604842139972912,"output_index":0}},{"Node":{"node_id":4301099429811409147,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13616602029989984195,{"inputs":[{"Node":{"node_id":3050731459444225191,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CombinePathsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13646498613066619660,{"inputs":[{"Node":{"node_id":12741076678082295759,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13670206802546093234,{"inputs":[{"Node":{"node_id":17285637344898461972,"output_index":0}},{"Node":{"node_id":7855094781869605606,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13739729101529293427,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0}},{"Node":{"node_id":14139765080256493579,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13795432594059356320,{"inputs":[{"Node":{"node_id":2871608309888343463,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CombinePathsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13838011362258067867,{"inputs":[{"Node":{"node_id":4148170217181291816,"output_index":0}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CentroidNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13916027199283115943,{"inputs":[{"Node":{"node_id":6194305264313730032,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[169.44484144071157,0.0,0.0,169.44484144071157,646.5386761620425,316.2510468037574]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14030142873804552388,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[11163144542703672167,7233902871991446034,9403888920678312544,5714042674660607880,9912917483675332510],"remove":[],"delta":[[5714042674660607880,[1536.0,0.0]],[7233902871991446034,[908.0,134.0]],[9403888920678312544,[1271.0,199.0]],[9912917483675332510,[1536.0,254.00000000000009]],[11163144542703672167,[763.0,0.0]]]},"segments":{"add":[7099980686025805826,11879054056208937348,7804540624589615499,3118709054343469746,12085471811343146506],"remove":[8174738144062904321],"start_point":[[3118709054343469746,9403888920678312544],[7099980686025805826,11163144542703672167],[7804540624589615499,5714042674660607880],[11879054056208937348,7233902871991446034],[12085471811343146506,9912917483675332510]],"end_point":[[3118709054343469746,9912917483675332510],[7099980686025805826,7233902871991446034],[7804540624589615499,11163144542703672167],[11879054056208937348,9403888920678312544],[12085471811343146506,5714042674660607880]],"handle_primary":[[3118709054343469746,[191.0,-106.0]],[7099980686025805826,[0.0,0.0]],[7804540624589615499,[0.0,0.0]],[11879054056208937348,[68.41365603453937,54.51084151791355]],[12085471811343146506,[0.0,0.0]]],"handle_end":[[3118709054343469746,[0.0,0.0]],[7099980686025805826,[-68.41365603453914,-54.51084151791349]],[7804540624589615499,[0.0,0.0]],[11879054056208937348,[-121.83694366711715,67.61631428646292]],[12085471811343146506,[0.0,0.0]]],"stroke":[[3118709054343469746,0],[7099980686025805826,0],[7804540624589615499,0],[11879054056208937348,0],[12085471811343146506,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":7099980686025805826},{"ty":"Primary","segment":11879054056208937348}],[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":3118709054343469746}],[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":8174738144062904321}]],"remove_g1_continuous":[[{"ty":"End","segment":3118709054343469746},{"ty":"Primary","segment":12085471811343146506}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14139129879376457893,{"inputs":[{"Node":{"node_id":11373527190663101881,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[178.66666666666674,0.0,0.0,178.66666666666674,636.7407407407406,203.7533433537596]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14139765080256493579,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3507505346656189771,2904729023031858224,854708012647259796,4175610638601362388,7821224334582795476,2195807584570698921],"remove":[1009888023123207923,16332448509429125699],"delta":[[854708012647259796,[740.0,298.0]],[2195807584570698921,[993.0,767.9999999999999]],[2904729023031858224,[491.3420376907663,506.7530051313737]],[3507505346656189771,[552.0,768.0000000000001]],[4175610638601362388,[957.0,324.0]],[7821224334582795476,[1093.0,600.0]]]},"segments":{"add":[4553965744616493549,13993263006398686359,6577640955869157325,17304574948462342226,8570276641842028192,17183285389582020412],"remove":[546565283439891712,5710832026764395735],"start_point":[[4553965744616493549,3507505346656189771],[6577640955869157325,854708012647259796],[8570276641842028192,2195807584570698921],[13993263006398686359,2904729023031858224],[17183285389582020412,7821224334582795476],[17304574948462342226,4175610638601362388]],"end_point":[[4553965744616493549,2904729023031858224],[6577640955869157325,4175610638601362388],[8570276641842028192,3507505346656189771],[13993263006398686359,854708012647259796],[17183285389582020412,2195807584570698921],[17304574948462342226,7821224334582795476]],"handle_primary":[[4553965744616493549,[0.0,0.0]],[6577640955869157325,[102.0,-45.0]],[8570276641842028192,[0.0,0.0]],[13993263006398686359,[0.0,-84.7537417270637]],[17183285389582020412,[-24.08196064282073,82.4624712920831]],[17304574948462342226,[50.35246044959922,33.38607084805801]]],"handle_end":[[4553965744616493549,[0.0,135.2464055295568]],[6577640955869157325,[-50.35246044959922,-33.38607084805801]],[8570276641842028192,[0.0,0.0]],[13993263006398686359,[-102.0,45.0]],[17183285389582020412,[0.0,0.0]],[17304574948462342226,[33.0,-113.0]]],"stroke":[[4553965744616493549,0],[6577640955869157325,0],[8570276641842028192,0],[13993263006398686359,0],[17183285389582020412,0],[17304574948462342226,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":17183285389582020412}],[{"ty":"End","segment":4553965744616493549},{"ty":"Primary","segment":13993263006398686359}],[{"ty":"End","segment":6577640955869157325},{"ty":"Primary","segment":17304574948462342226}],[{"ty":"End","segment":13993263006398686359},{"ty":"Primary","segment":6577640955869157325}],[{"ty":"End","segment":17304574948462342226},{"ty":"Primary","segment":17183285389582020412}]],"remove_g1_continuous":[[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":546565283439891712}],[{"ty":"End","segment":546565283439891712},{"ty":"Primary","segment":5710832026764395735}],[{"ty":"End","segment":5710832026764395735},{"ty":"Primary","segment":8570276641842028192}],[{"ty":"End","segment":17183285389582020412},{"ty":"Primary","segment":546565283439891712}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14141479077115894852,{"inputs":[{"Node":{"node_id":15433707377961038695,"output_index":0}},{"Node":{"node_id":17285637344898461972,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14228923746783465609,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[2003133867055127539,13758328146055368475],"remove":[],"delta":[[2003133867055127539,[1011.111083984375,786.3993530273438]],[4648964341912884959,[324.66666666666646,0.0]],[13758328146055368475,[1299.3064572949788,786.3993743175897]],[16569120368910754547,[-43.0,0.0]]]},"segments":{"add":[8214025514312603513,7334532063810723038,13431612844608018700],"remove":[3433930674303663828,6602880736207868665],"start_point":[[7334532063810723038,16569120368910754547],[8214025514312603513,2003133867055127539],[13431612844608018700,13758328146055368475]],"end_point":[[7334532063810723038,13758328146055368475],[8214025514312603513,4648964341912884959],[13431612844608018700,2003133867055127539]],"handle_primary":[[7334532063810723038,null],[8214025514312603513,null],[9030015329489789075,[69.08057198853999,-80.19415805947563]],[13431612844608018700,null]],"handle_end":[[2197140374690997530,[-24.333333333333485,-86.99999999999977]],[7334532063810723038,null],[8214025514312603513,null],[9030015329489789075,[0.0,0.0]],[13431612844608018700,null]],"stroke":[[7334532063810723038,0],[8214025514312603513,0],[13431612844608018700,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}],[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14257963317028524134,{"inputs":[{"Node":{"node_id":1001728975241745659,"output_index":0}},{"Node":{"node_id":6503655938154160104,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14496934933990319842,{"inputs":[{"Node":{"node_id":12709602171929957216,"output_index":0}},{"Node":{"node_id":12185047359007423618,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14516211820212764316,{"inputs":[{"Node":{"node_id":2124231869409556689,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,416.7]},"exposed":false}},{"Value":{"tagged_value":{"F64":31.0},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14684142559936015947,{"inputs":[{"Node":{"node_id":15930698052919171086,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[363.2053341412762,0.0,0.0,363.2053341412762,283.33331299,403.05062893883354]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14690269209726153565,{"inputs":[{"Node":{"node_id":7376049709233607419,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[171.283740991434,0.0,0.0,171.283740991434,658.172839506173,134.55825936128966]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14698962747138962125,{"inputs":[{"Node":{"node_id":17562801632450633291,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14808063168960305551,{"inputs":[{"Node":{"node_id":14496934933990319842,"output_index":0}},{"Node":{"node_id":3471746866096043087,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14950060858756810933,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[9346093213164033195,3249248431686392864,9577388580635291078],"remove":[],"delta":[[3249248431686392864,[1536.0,95.0]],[9346093213164033195,[1211.0,0.0]],[9577388580635291078,[1536.0,0.0]]]},"segments":{"add":[9585086796709645600,13980191878100735848,1147165232046305110],"remove":[],"start_point":[[1147165232046305110,9577388580635291078],[9585086796709645600,9346093213164033195],[13980191878100735848,3249248431686392864]],"end_point":[[1147165232046305110,9346093213164033195],[9585086796709645600,3249248431686392864],[13980191878100735848,9577388580635291078]],"handle_primary":[[1147165232046305110,[0.0,0.0]],[9585086796709645600,[0.0,0.0]],[13980191878100735848,[4.547473508864641e-13,2.8421709430404014e-14]]],"handle_end":[[1147165232046305110,[0.0,0.0]],[9585086796709645600,[-281.0,-17.00000000000003]],[13980191878100735848,[0.0,0.0]]],"stroke":[[1147165232046305110,0],[9585086796709645600,0],[13980191878100735848,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13980191878100735848},{"ty":"Primary","segment":1147165232046305110}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15301503532602557206,{"inputs":[{"Node":{"node_id":6728362629909402903,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15354358358546908017,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.8549927,"green":0.71569365,"blue":0.48514998,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[325.00000000000045,0.0,0.0,325.00000000000045,1211.0,47.50000000000001]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15433707377961038695,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16723991032614525258,1623125309784127684,7209807874503344461,3123395482103162919,2668496811386192321],"remove":[12344391980636687302],"delta":[[1623125309784127684,[643.9258958566198,633.6997633965701]],[2668496811386192321,[0.0,768.0]],[3123395482103162919,[-2.273736754432321e-13,689.0]],[7209807874503344461,[188.0,694.6666666666669]],[16723991032614525258,[553.0000000000001,768.0]]]},"segments":{"add":[3656277643115996070,6789459806904610761,16287649713110748258,16456150086799119359,1652964032977338610],"remove":[1848051273241122771],"start_point":[[1652964032977338610,7209807874503344461],[3656277643115996070,16723991032614525258],[6789459806904610761,1623125309784127684],[16287649713110748258,3123395482103162919],[16456150086799119359,2668496811386192321]],"end_point":[[1652964032977338610,3123395482103162919],[3656277643115996070,1623125309784127684],[6789459806904610761,7209807874503344461],[16287649713110748258,2668496811386192321],[16456150086799119359,16723991032614525258]],"handle_primary":[[1652964032977338610,[-81.48609837852206,84.6759456460087]],[3656277643115996070,[0.0,0.0]],[6789459806904610761,[-213.92589585661983,-68.82675604113183]],[16287649713110748258,[0.0,0.0]],[16456150086799119359,[0.0,0.0]]],"handle_end":[[1652964032977338610,[56.00000000000023,11.0]],[3656277643115996070,[0.0,0.0]],[6789459806904610761,[187.33333333333343,-194.6666666666667]],[16287649713110748258,[0.0,0.0]],[16456150086799119359,[0.0,0.0]]],"stroke":[[1652964032977338610,0],[3656277643115996070,0],[6789459806904610761,0],[16287649713110748258,0],[16456150086799119359,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":6789459806904610761},{"ty":"Primary","segment":1652964032977338610}],[{"ty":"End","segment":16287649713110748258},{"ty":"Primary","segment":16456150086799119359}]],"remove_g1_continuous":[[{"ty":"End","segment":1652964032977338610},{"ty":"Primary","segment":1848051273241122771}],[{"ty":"End","segment":3656277643115996070},{"ty":"Primary","segment":6789459806904610761}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15692102598187739001,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0}},{"Node":{"node_id":11201759760883367635,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15817956847588799375,{"inputs":[{"Node":{"node_id":11201759760883367635,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[527.1495683106159,0.0,0.0,527.1495683106159,969.0,161.84412997855503]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15877481873925059044,{"inputs":[{"Node":{"node_id":17299978721726771610,"output_index":0}},{"Node":{"node_id":7252918969430566594,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15900830679378240619,{"inputs":[{"Node":{"node_id":2287485748649359627,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15930698052919171086,{"inputs":[{"Node":{"node_id":13739729101529293427,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16177422101884031678,{"inputs":[{"Node":{"node_id":13353438235848911576,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[176.0175600653091,0.0,0.0,176.0175600653091,471.3208393216603,141.9259259259259]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16304636129468583592,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4648964341912884959,10156053545530752213,16569120368910754547],"remove":[],"delta":[[4648964341912884959,[665.0000000000001,768.0]],[10156053545530752213,[1094.162353515625,594.2965698242188]],[16569120368910754547,[1361.0,768.0]]]},"segments":{"add":[9030015329489789075,2197140374690997530,3433930674303663828],"remove":[],"start_point":[[2197140374690997530,10156053545530752213],[3433930674303663828,16569120368910754547],[9030015329489789075,4648964341912884959]],"end_point":[[2197140374690997530,16569120368910754547],[3433930674303663828,4648964341912884959],[9030015329489789075,10156053545530752213]],"handle_primary":[[2197140374690997530,[79.20069951994813,30.807024746222492]],[3433930674303663828,[0.0,0.0]],[9030015329489789075,[32.66666666666663,-95.99999999999989]]],"handle_end":[[2197140374690997530,[-24.333333333333485,-86.99999999999977]],[3433930674303663828,[0.0,0.0]],[9030015329489789075,[-238.88331323750492,-92.9194336284096]]],"stroke":[[2197140374690997530,0],[3433930674303663828,0],[9030015329489789075,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}]],"remove_g1_continuous":[[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}],[{"ty":"End","segment":2197140374690997530},{"ty":"Primary","segment":3433930674303663828}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16306737306999003555,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6082833770141706533,7903705226822768120,17147466439590042359,13341364271767916194],"remove":[],"delta":[[6082833770141706533,[504.0987654320987,184.6255144032922]],[7903705226822768120,[497.3827160493826,248.88888888888889]],[13341364271767916194,[262.22222222222223,364.1481481481481]],[17147466439590042359,[526.0109927536641,282.1042175292969]]]},"segments":{"add":[14649965831690031908,801877719748058643,9659144961849433642,2255088856072565305],"remove":[],"start_point":[[801877719748058643,7903705226822768120],[2255088856072565305,13341364271767916194],[9659144961849433642,17147466439590042359],[14649965831690031908,6082833770141706533]],"end_point":[[801877719748058643,17147466439590042359],[2255088856072565305,6082833770141706533],[9659144961849433642,13341364271767916194],[14649965831690031908,7903705226822768120]],"handle_primary":[[801877719748058643,[13.173601585124231,23.615912208504938]],[2255088856072565305,[0.0,0.0]],[9659144961849433642,[0.0,0.0]],[14649965831690031908,[0.0,0.0]]],"handle_end":[[801877719748058643,[0.0,0.0]],[2255088856072565305,[-112.09876543209862,43.81893004115227]],[9659144961849433642,[195.55555555555569,-16.14814814814804]],[14649965831690031908,[-17.920501046401128,-32.12553353079403]]],"stroke":[[801877719748058643,0],[2255088856072565305,0],[9659144961849433642,0],[14649965831690031908,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":801877719748058643},{"ty":"Primary","segment":9659144961849433642}],[{"ty":"End","segment":14649965831690031908},{"ty":"Primary","segment":801877719748058643}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16322546010403524636,{"inputs":[{"Node":{"node_id":4873612610885266664,"output_index":0}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CentroidNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16609137733952262762,{"inputs":[{"Node":{"node_id":17397123104674848450,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[429.5019320528745,0.0,0.0,429.5019320528745,665.0,667.730301691078]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16671141883125519098,{"inputs":[{"Node":{"node_id":16306737306999003555,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[263.7887705314419,0.0,0.0,263.7887705314419,262.22222222222223,274.38683127572017]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16759836951269190891,{"inputs":[{"Node":{"node_id":11429506195623419966,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16780039553038473906,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":7104088139635280554,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16785043320296790229,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17036604842139972912,{"inputs":[{"Node":{"node_id":1491840484128555837,"output_index":0}},{"Node":{"node_id":11210964267417873667,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17056531964793634106,{"inputs":[{"Node":{"node_id":990192925663920333,"output_index":0}},{"Node":{"node_id":10063704933309776584,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17131529656312051452,{"inputs":[{"Node":{"node_id":13646498613066619660,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[454.33208956300984,0.0,0.0,454.33208956300984,491.34203769,522.6595364265843]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17223836790030950966,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6938719,"green":0.048171822,"blue":0.028426038,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[773.0,0.0,0.0,773.0,763.0,127.00000000000004]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17271572793812678706,{"inputs":[{"Node":{"node_id":15900830679378240619,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[124.4529078498622,0.0,0.0,124.4529078498622,818.975318349616,359.5074323866861]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17285637344898461972,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16608607268690234590,17457877227823502997,13436129231170586617,5992570223148766873],"remove":[],"delta":[[5992570223148766873,[-2.273736754432321e-13,768.0]],[13436129231170586617,[481.3333333333333,768.0]],[16608607268690234590,[0.0,340.0]],[17457877227823502997,[273.0,476.0]]]},"segments":{"add":[13284808974014161135,5472571334856691465,8776124420595946733,4274372337254864190],"remove":[],"start_point":[[4274372337254864190,5992570223148766873],[5472571334856691465,17457877227823502997],[8776124420595946733,13436129231170586617],[13284808974014161135,16608607268690234590]],"end_point":[[4274372337254864190,16608607268690234590],[5472571334856691465,13436129231170586617],[8776124420595946733,5992570223148766873],[13284808974014161135,17457877227823502997]],"handle_primary":[[4274372337254864190,[0.0,0.0]],[5472571334856691465,[146.0,-13.0]],[8776124420595946733,[0.0,0.0]],[13284808974014161135,[161.73791370620617,43.57576470888159]]],"handle_end":[[4274372337254864190,[0.0,0.0]],[5472571334856691465,[0.4078646547782227,-253.307727480567]],[8776124420595946733,[0.0,0.0]],[13284808974014161135,[-165.43581782916667,14.730586519035386]]],"stroke":[[4274372337254864190,0],[5472571334856691465,0],[8776124420595946733,0],[13284808974014161135,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":8776124420595946733},{"ty":"Primary","segment":4274372337254864190}],[{"ty":"End","segment":13284808974014161135},{"ty":"Primary","segment":5472571334856691465}]],"remove_g1_continuous":[[{"ty":"Primary","segment":13284808974014161135},{"ty":"End","segment":4274372337254864190}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17299978721726771610,{"inputs":[{"Node":{"node_id":7029437790788498388,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[459.4,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-8.6},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatArrayNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17351444026127625357,{"inputs":[{"Node":{"node_id":14808063168960305551,"output_index":0}},{"Node":{"node_id":13916027199283115943,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17397123104674848450,{"inputs":[{"Node":{"node_id":1662641269094032596,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"path_bool_nodes::BooleanOperationNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17495267820524300686,{"inputs":[{"Node":{"node_id":13616602029989984195,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1248.4973005620557,-153.1867628889006]},"exposed":false}},{"Value":{"tagged_value":{"F64":17.033756191102253},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0000000000000002,1.0000000000000002]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[3.180554681463516e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17562801632450633291,{"inputs":[{"Node":{"node_id":10286817149456341619,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17569892869974995307,{"inputs":[{"Node":{"node_id":3997031659711823213,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17603523494627491590,{"inputs":[{"Node":{"node_id":10995640810984321903,"output_index":0}},{"Node":{"node_id":17740294143355019755,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17696051535511578981,{"inputs":[{"Node":{"node_id":16780039553038473906,"output_index":0}},{"Node":{"node_id":9071802450034150503,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17735408893002232096,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[328.3333333333336,0.0,0.0,328.3333333333336,989.6666666666664,690.3479720709042]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17740294143355019755,{"inputs":[{"Node":{"node_id":15301503532602557206,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[120.71199286137949,0.0,0.0,120.71199286137949,798.6398287125882,458.13992140569405]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17740496701763775226,{"inputs":[{"Node":{"node_id":13027689870767713939,"output_index":0}},{"Node":{"node_id":16609137733952262762,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17753909951719808506,{"inputs":[{"Node":{"node_id":2185437945364824599,"output_index":0}},{"Node":{"node_id":9563008199132558110,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17952673493105230490,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18003287685830153881,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4475009837548700636,4481635366652149569,1608608093193158603,4765910415851982345],"remove":[1647009925892902058],"delta":[[1608608093193158603,[609.7777777777777,620.0]],[4475009837548700636,[525.7325506063205,282.1042056224195]],[4481635366652149569,[684.8888888888889,395.55555555555554]],[4765910415851982345,[283.33331298828125,354.6666564941406]]]},"segments":{"add":[3045825504718908919,8024777209266880257,3983292299330016176,11103925991989272298],"remove":[13489289770112164650],"start_point":[[3045825504718908919,4475009837548700636],[3983292299330016176,1608608093193158603],[8024777209266880257,4481635366652149569],[11103925991989272298,4765910415851982345]],"end_point":[[3045825504718908919,4481635366652149569],[3983292299330016176,4765910415851982345],[8024777209266880257,1608608093193158603],[11103925991989272298,4475009837548700636]],"handle_primary":[[3045825504718908919,[62.22222222222217,43.111111111111086]],[3983292299330016176,[0.0,0.0]],[8024777209266880257,[11.111111111111086,62.22222222222217]],[11103925991989272298,[0.0,0.0]]],"handle_end":[[3045825504718908919,[-11.111111111111086,-62.22222222222217]],[3983292299330016176,[0.0,0.0]],[8024777209266880257,[34.66666666666674,-85.33333333333337]],[11103925991989272298,[-113.5844024581724,39.08097956276566]]],"stroke":[[3045825504718908919,0],[3983292299330016176,0],[8024777209266880257,0],[11103925991989272298,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3045825504718908919},{"ty":"Primary","segment":8024777209266880257}],[{"ty":"End","segment":3983292299330016176},{"ty":"Primary","segment":11103925991989272298}]],"remove_g1_continuous":[[{"ty":"End","segment":11103925991989272298},{"ty":"Primary","segment":3045825504718908919}],[{"ty":"End","segment":13489289770112164650},{"ty":"Primary","segment":3045825504718908919}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18031616785650843168,{"inputs":[{"Node":{"node_id":17952673493105230490,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18053728639616073084,{"inputs":[{"Node":{"node_id":6616450276140292763,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[217.04253790616383,0.0,0.0,217.04253790616383,614.8148148148148,91.365310162655]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18068340617333437755,{"inputs":[{"Node":{"node_id":2880630606834119505,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[73.0306419396,-200.8521460039]},"exposed":false}},{"Value":{"tagged_value":{"F64":24.404620143799995},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18081743490344004315,{"inputs":[{"Node":{"node_id":13588160462734303101,"output_index":0}},{"Node":{"node_id":18068340617333437755,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18095952297474762348,{"inputs":[{"Node":{"node_id":5954536408321808728,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18188505856445531484,{"inputs":[{"Node":{"node_id":8887924609778270360,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.83076996,"green":0.32314324,"blue":0.027320892,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[284.97056147795894,0.0,0.0,284.97056147795894,0.000023539722353067782,617.7679237296747]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18271512507682813443,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10872099980755217048,13049263474526562389,2409359561719399794,9175973472325454282,14263506369487797530,5496457317579994340,7125168137854779179,9658821733796680583,425878374398720476,5252668597335249558],"remove":[],"delta":[[425878374398720476,[898.633744855967,207.99999999999997]],[2409359561719399794,[892.7407407407408,111.70370370370372]],[5252668597335249558,[888.2516734908237,208.88931872324497]],[5496457317579994340,[929.3607681755832,198.40877914951983]],[7125168137854779179,[912.2962962962964,205.6296296296296]],[9175973472325454282,[881.4814814814815,152.5925925925926]],[9658821733796680583,[920.5925925925926,208.0]],[10872099980755217048,[889.0,0.0]],[13049263474526562389,[903.1111111111112,55.70370370370371]],[14263506369487797530,[886.5185185185185,178.66666666666669]]]},"segments":{"add":[16241193756011776206,13961346931609713434,6443321953815072406,13223251807271379465,6545223889678917273,9745298522639115232,8058164935346100149,9187894839116405225,5210886161307886529,11050813873332011119],"remove":[],"start_point":[[5210886161307886529,425878374398720476],[6443321953815072406,2409359561719399794],[6545223889678917273,14263506369487797530],[8058164935346100149,7125168137854779179],[9187894839116405225,9658821733796680583],[9745298522639115232,5496457317579994340],[11050813873332011119,5252668597335249558],[13223251807271379465,9175973472325454282],[13961346931609713434,13049263474526562389],[16241193756011776206,10872099980755217048]],"end_point":[[5210886161307886529,5252668597335249558],[6443321953815072406,9175973472325454282],[6545223889678917273,5496457317579994340],[8058164935346100149,9658821733796680583],[9187894839116405225,425878374398720476],[9745298522639115232,7125168137854779179],[11050813873332011119,10872099980755217048],[13223251807271379465,14263506369487797530],[13961346931609713434,2409359561719399794],[16241193756011776206,13049263474526562389]],"handle_primary":[[5210886161307886529,[-1.1368683772161605e-13,-2.8421709430404014e-14]],[6443321953815072406,[-9.144953020396894,24.145964868041293]],[6545223889678917273,[0.0,0.0]],[8058164935346100149,[0.0,0.0]],[9187894839116405225,[-8.263374485596842,1.880201188843188]],[9745298522639115232,[0.0,0.0]],[11050813873332011119,[-5.947146741852521,-2.1403475298293415]],[13223251807271379465,[3.2812071330587287,8.329218106995853]],[13961346931609713434,[6.522611384544012,17.67970980547415]],[16241193756011776206,[0.0,0.0]]],"handle_end":[[5210886161307886529,[5.947146741852521,2.1403475298293415]],[6443321953815072406,[-3.3276401397055917,-8.447086508484054]],[6545223889678917273,[-25.3424782807499,-1.3461362597164737]],[8058164935346100149,[-5.925925925925867,-2.370370370370381]],[9187894839116405225,[4.974851394604343,2.0557841792410443]],[9745298522639115232,[7.703703703703695,-2.074074074074076]],[11050813873332011119,[-86.26684502769479,250.37037037037035]],[13223251807271379465,[0.7901234567900701,-9.492455418381354]],[13961346931609713434,[10.984910836762538,-29.00411522633746]],[16241193756011776206,[-7.506172839506348,-20.345679012345684]]],"stroke":[[5210886161307886529,0],[6443321953815072406,0],[6545223889678917273,0],[8058164935346100149,0],[9187894839116405225,0],[9745298522639115232,0],[11050813873332011119,0],[13223251807271379465,0],[13961346931609713434,0],[16241193756011776206,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":5210886161307886529},{"ty":"Primary","segment":11050813873332011119}],[{"ty":"End","segment":6443321953815072406},{"ty":"Primary","segment":13223251807271379465}],[{"ty":"End","segment":13961346931609713434},{"ty":"Primary","segment":6443321953815072406}],[{"ty":"End","segment":16241193756011776206},{"ty":"Primary","segment":13961346931609713434}]],"remove_g1_continuous":[[{"ty":"Primary","segment":9187894839116405225},{"ty":"End","segment":8058164935346100149}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18351415092709164412,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.010329823,"green":0.015996292,"blue":0.016807374,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.08021983,"green":0.1682694,"blue":0.17464739,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[284.0066482893194,0.0,0.0,284.0066482893194,1210.9999999999998,45.97853699003812]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[57390435731316553,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[140396870212231820,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[294265135510952894,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,93]}}},"network_metadata":null}}],[392274448837115448,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,12]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[682567808439406093,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[804622576568168609,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[876963243827503916,{"persistent_metadata":{"display_name":"Top Right Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[990192925663920333,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,99]}}},"network_metadata":null}}],[1001728975241745659,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1009114585722052052,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,57]}}},"network_metadata":null}}],[1097494158696050491,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,99]}}},"network_metadata":null}}],[1258994191538244490,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1491840484128555837,{"persistent_metadata":{"display_name":"Face Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1508440849951861669,{"persistent_metadata":{"display_name":"Face Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1627123781166851142,{"persistent_metadata":{"display_name":"Top Right Corner Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1662641269094032596,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1809704172129195322,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,106]}}},"network_metadata":null}}],[2025899804080897524,{"persistent_metadata":{"display_name":"Face White","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2124231869409556689,{"persistent_metadata":{"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2185437945364824599,{"persistent_metadata":{"display_name":"Bottom Left White","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2287485748649359627,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2723198387862533596,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2834866505092039323,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2871608309888343463,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2880630606834119505,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3050731459444225191,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3079923906392020295,{"persistent_metadata":{"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3109716240255919254,{"persistent_metadata":{"display_name":"Front Eyebrow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3214181946162459584,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3410481056630111806,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,99]}}},"network_metadata":null}}],[3471746866096043087,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3608604157153838227,{"persistent_metadata":{"display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,109]}}},"network_metadata":null}}],[3750439930725791025,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3967133208342732399,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,109]}}},"network_metadata":null}}],[3997031659711823213,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4102754869474520966,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4148170217181291816,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,102]}}},"network_metadata":null}}],[4261249487994076490,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4301099429811409147,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4328376070224119511,{"persistent_metadata":{"display_name":"Bottom Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4421418468606442725,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4470272391975492611,{"persistent_metadata":{"display_name":"Rose Sliver Silhouette","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4560146526699152877,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4631655038168471552,{"persistent_metadata":{"display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,102]}}},"network_metadata":null}}],[4771789845668099116,{"persistent_metadata":{"display_name":"Cheek Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4807760870555738383,{"persistent_metadata":{"display_name":"Top Right Main Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4809200889774783438,{"persistent_metadata":{"display_name":"Front Eye","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4873612610885266664,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,96]}}},"network_metadata":null}}],[5014806436727666175,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,84]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5449860184735415958,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,124]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5486211022469996717,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,78]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5488285068107445023,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5534800796196967885,{"persistent_metadata":{"display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,109]}}},"network_metadata":null}}],[5556372312033787775,{"persistent_metadata":{"display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,96]}}},"network_metadata":null}}],[5856350938151339368,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5877930116725120460,{"persistent_metadata":{"display_name":"Rear Eyelash","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5888633415105234509,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5954536408321808728,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6194305264313730032,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6445954214067437701,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6484183251661832039,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,93]}}},"network_metadata":null}}],[6503655938154160104,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,47]}}},"network_metadata":null}}],[6616450276140292763,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6726954210929537972,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6728362629909402903,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6787585796949551500,{"persistent_metadata":{"display_name":"Hair Strand 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,15]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6852799892628327372,{"persistent_metadata":{"display_name":"Head Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7018444885869143173,{"persistent_metadata":{"display_name":"Top Right Black - Dots","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7029437790788498388,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,106]}}},"network_metadata":null}}],[7104088139635280554,{"persistent_metadata":{"display_name":"Solidify Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7104261880154687267,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7201841978411396053,{"persistent_metadata":{"display_name":"Bottom Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":2}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7252918969430566594,{"persistent_metadata":{"display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,107]}}},"network_metadata":null}}],[7376049709233607419,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7480253252288032958,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7651693425519490419,{"persistent_metadata":{"display_name":"Top Right Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7667878689218439065,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7755499790391969923,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7855094781869605606,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,87]}}},"network_metadata":null}}],[7962101329808960965,{"persistent_metadata":{"display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,94]}}},"network_metadata":null}}],[7977952035097419157,{"persistent_metadata":{"display_name":"Ellipse","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius Y","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8269257328703012432,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8297015715799006244,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8359580532088731394,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8426490990601560741,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8460565235419043665,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8511737864852441844,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8566844905246185636,{"persistent_metadata":{"display_name":"Mouth Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8863346544623578893,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,90]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8887924609778270360,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9071802450034150503,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9135110142507605216,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9338394475379815879,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9563008199132558110,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9808637865669223270,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10063704933309776584,{"persistent_metadata":{"display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,100]}}},"network_metadata":null}}],[10080296672372912698,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10265035897167064154,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10286817149456341619,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10760002922115563021,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10995640810984321903,{"persistent_metadata":{"display_name":"Lip Bottom","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11095670964487764044,{"persistent_metadata":{"display_name":"Hair Strand 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11196821089257149774,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11201759760883367635,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,69]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11210964267417873667,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11264395591110193456,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,93]}}},"network_metadata":null}}],[11301831865756336526,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11373527190663101881,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11429506195623419966,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12145355397916841389,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12185047359007423618,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12234961922142600898,{"persistent_metadata":{"display_name":"Top Right Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12276520439585231336,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12353675714904258944,{"persistent_metadata":{"display_name":"Nose Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12494428953087324640,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12709602171929957216,{"persistent_metadata":{"display_name":"Bottom Left Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12741076678082295759,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,118]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12770183061753030023,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12867379765049504290,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12922148192688274227,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13027689870767713939,{"persistent_metadata":{"display_name":"Bottom Black - Dots","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13203761224559198689,{"persistent_metadata":{"display_name":"Front Eye Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13340751444307201866,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13353438235848911576,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13446205009526451196,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13588160462734303101,{"persistent_metadata":{"display_name":"Hair Dots Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13616602029989984195,{"persistent_metadata":{"display_name":"Flatten Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13646498613066619660,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-22,118]}}},"network_metadata":null}}],[13670206802546093234,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13739729101529293427,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13795432594059356320,{"persistent_metadata":{"display_name":"Flatten Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13838011362258067867,{"persistent_metadata":{"display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,102]}}},"network_metadata":null}}],[13916027199283115943,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14030142873804552388,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,66]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14139129879376457893,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14139765080256493579,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,138]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14141479077115894852,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,87]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14228923746783465609,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,135]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14257963317028524134,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14496934933990319842,{"persistent_metadata":{"display_name":"Bottom Left Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14516211820212764316,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14684142559936015947,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14690269209726153565,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14698962747138962125,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14808063168960305551,{"persistent_metadata":{"display_name":"Face Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14950060858756810933,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,60]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15301503532602557206,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15354358358546908017,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15433707377961038695,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,87]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15692102598187739001,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,57]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15817956847588799375,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15877481873925059044,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15900830679378240619,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15930698052919171086,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16177422101884031678,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16304636129468583592,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,135]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16306737306999003555,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,121]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16322546010403524636,{"persistent_metadata":{"display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,96]}}},"network_metadata":null}}],[16609137733952262762,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16671141883125519098,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16759836951269190891,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16780039553038473906,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16785043320296790229,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17036604842139972912,{"persistent_metadata":{"display_name":"Hair Dots Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":4}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17056531964793634106,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17131529656312051452,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17223836790030950966,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17271572793812678706,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17285637344898461972,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,81]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17299978721726771610,{"persistent_metadata":{"display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,106]}}},"network_metadata":null}}],[17351444026127625357,{"persistent_metadata":{"display_name":"Face Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17397123104674848450,{"persistent_metadata":{"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The `Table` of vector paths to perform the boolean operation on. Nested `Table`s are automatically flattened.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"Which boolean operation to perform on the paths.\n\nUnion combines all paths while cutting out overlapping areas (even the interiors of a single path).\nSubtraction cuts overlapping areas out from the last (Subtract Front) or first (Subtract Back) path.\nIntersection cuts away all but the overlapping areas shared by every path.\nDifference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17495267820524300686,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17562801632450633291,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17569892869974995307,{"persistent_metadata":{"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17603523494627491590,{"persistent_metadata":{"display_name":"Lip Top","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17696051535511578981,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-43,50]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17735408893002232096,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17740294143355019755,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17740496701763775226,{"persistent_metadata":{"display_name":"Bottom Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17753909951719808506,{"persistent_metadata":{"display_name":"Bottom Left Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17952673493105230490,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,133]}}},"network_metadata":null}}],[18003287685830153881,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-22,72]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18031616785650843168,{"persistent_metadata":{"display_name":"Solidify Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,133]}}},"network_metadata":null}}],[18053728639616073084,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18068340617333437755,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18081743490344004315,{"persistent_metadata":{"display_name":"Hair Dots Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18095952297474762348,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18188505856445531484,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18271512507682813443,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18351415092709164412,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[597.5700198973645,-654.9579096366515],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1588.0,-75.0],"node_graph_width":1980.0}}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"","document_ptz":{"pan":[-767.7146681215183,-384.1847354546324],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/parametric-dunescape.graphite b/demo-artwork/parametric-dunescape.graphite index 5e9b74abca..c1fbcc825f 100644 --- a/demo-artwork/parametric-dunescape.graphite +++ b/demo-artwork/parametric-dunescape.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":4445985685181725042,"output_index":0}}],"nodes":[[239716716021064150,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":7711570794020903773,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1801066723091712434,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.036889445,"green":0.038204364,"blue":0.043735027,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1744.31393592},"exposed":false}},{"Value":{"tagged_value":{"F64":63.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":14514477720912258595,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14514477720912258595,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":18341697272814101120,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18341697272814101120,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2128810469968776913,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":12416569579970107543,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2163528024003768644,{"inputs":[{"Node":{"node_id":12110920487474373676,"output_index":0}},{"Node":{"node_id":7128559142392931896,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3683309254695891012,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.42326772,"green":0.25015837,"blue":0.18116423,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1485.34393334},"exposed":false}},{"Value":{"tagged_value":{"F64":225.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3916070947050514908,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10720574559271598132,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3916070947050514908,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":10720574559271598132,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3726756269632080543,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.23839766,"green":0.17788841,"blue":0.14412849,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1465.6573046},"exposed":false}},{"Value":{"tagged_value":{"F64":230.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5294703684886212416,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7419291594083587754,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":5294703684886212416,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7419291594083587754,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3934928477288442109,{"inputs":[{"Node":{"node_id":239716716021064150,"output_index":0}},{"Node":{"node_id":17589660903986237301,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4037968351431607570,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.72305524,"green":0.44520125,"blue":0.27467737,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1442.36628417},"exposed":false}},{"Value":{"tagged_value":{"F64":318.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7807438675023750219,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":11874141024063691837,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11874141024063691837,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7807438675023750219,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4390668436091073484,{"inputs":[{"Node":{"node_id":13676600738025998635,"output_index":0}},{"Node":{"node_id":12122314434656187176,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4445985685181725042,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":13132104524813958174,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.7379105,"blue":0.45078585,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Node":{"node_id":6,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":4}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":7,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},{"Concrete":{"name":"core_types::list::List"}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6,{"inputs":[{"Node":{"node_id":5,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::TranslateFootprintNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7,{"inputs":[{"Node":{"node_id":2,"output_index":0}},{"Value":{"tagged_value":{"U32":1},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5883606306991910210,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.20155624,"green":0.15592647,"blue":0.13013649,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1524.31304726},"exposed":false}},{"Value":{"tagged_value":{"F64":175.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6686718746443793247,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16598825029377599083,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16598825029377599083,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":6686718746443793247,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6097807941755042226,{"inputs":[{"Node":{"node_id":15385259560644295534,"output_index":0}},{"Node":{"node_id":5883606306991910210,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6523786079462141312,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.70837593,"green":0.2874409,"blue":0.15896086,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1491.01593158},"exposed":false}},{"Value":{"tagged_value":{"F64":173.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7783268010546120518,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16009834030113172488,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16009834030113172488,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7783268010546120518,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7128559142392931896,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.02121901,"green":0.02415763,"blue":0.029556833,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1803.43646796},"exposed":false}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10094915787292727725,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":10094915787292727725,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":18443039976647938912,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18443039976647938912,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7711570794020903773,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.74540436,"green":0.20507872,"blue":0.111932434,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1513.3360814},"exposed":false}},{"Value":{"tagged_value":{"F64":22.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1126802566044359983,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3025883099767376126,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3025883099767376126,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":1126802566044359983,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8804763001225416124,{"inputs":[{"Node":{"node_id":3934928477288442109,"output_index":0}},{"Node":{"node_id":17154757625902243313,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9069881382900058607,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":4037968351431607570,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10686861494573327243,{"inputs":[{"Node":{"node_id":11386926595254122633,"output_index":0}},{"Node":{"node_id":10806978668166337270,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10806978668166337270,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.036889445,"green":0.038204364,"blue":0.043735027,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1579.30304164},"exposed":false}},{"Value":{"tagged_value":{"F64":142.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3765311973789472189,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9133354469966676056,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3765311973789472189,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":9133354469966676056,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11386926595254122633,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":6523786079462141312,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12110920487474373676,{"inputs":[{"Node":{"node_id":12639486733043466090,"output_index":0}},{"Node":{"node_id":13323241418027154136,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12122314434656187176,{"inputs":[{"Node":{"node_id":10686861494573327243,"output_index":0}},{"Node":{"node_id":16611856724057842399,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12317719117993811200,{"inputs":[{"Node":{"node_id":9069881382900058607,"output_index":0}},{"Node":{"node_id":17239043462037837834,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12416569579970107543,{"inputs":[{"Node":{"node_id":13644002059194136823,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12639486733043466090,{"inputs":[{"Node":{"node_id":8804763001225416124,"output_index":0}},{"Node":{"node_id":1801066723091712434,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13132104524813958174,{"inputs":[{"Node":{"node_id":4390668436091073484,"output_index":0}},{"Node":{"node_id":2163528024003768644,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13323241418027154136,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.027320892,"green":0.03071344,"blue":0.039546236,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1733.30579952},"exposed":false}},{"Value":{"tagged_value":{"F64":77.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3434804841107735149,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16504069171520924548,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16504069171520924548,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":3434804841107735149,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13644002059194136823,{"inputs":[{"Node":{"node_id":17437077810654043142,"output_index":0}},{"Value":{"tagged_value":{"F64":5.599999999999968},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13676600738025998635,{"inputs":[{"Node":{"node_id":2128810469968776913,"output_index":0}},{"Node":{"node_id":6097807941755042226,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15002088321732485705,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1343.63187023},"exposed":false}},{"Value":{"tagged_value":{"F64":349.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8591396027454826376,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":15212962088799153943,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15212962088799153943,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":8591396027454826376,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15385259560644295534,{"inputs":[{"Node":{"node_id":17327221498641745184,"output_index":0}},{"Node":{"node_id":3726756269632080543,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16611856724057842399,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.045186203,"green":0.045186203,"blue":0.048171822,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1554.40785539},"exposed":false}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9065988052616974602,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":17232801702996970986,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":9065988052616974602,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17232801702996970986,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17154757625902243313,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.045186203,"green":0.045186203,"blue":0.048171822,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1670.79570439},"exposed":false}},{"Value":{"tagged_value":{"F64":24.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[757876048866560520,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1357621220363171879,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":757876048866560520,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":1357621220363171879,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17239043462037837834,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.6104956,"green":0.3967553,"blue":0.23455065,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1447.11050605},"exposed":false}},{"Value":{"tagged_value":{"F64":309.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7260397085903590160,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":7260397085903590160,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15937218612227302315,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":15937218612227302315,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17327221498641745184,{"inputs":[{"Node":{"node_id":12317719117993811200,"output_index":0}},{"Node":{"node_id":3683309254695891012,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17437077810654043142,{"inputs":[{"Node":{"node_id":15002088321732485705,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"U32":40},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17589660903986237301,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.89626944,"green":0.37123775,"blue":0.1499598,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1614.38741737},"exposed":false}},{"Value":{"tagged_value":{"F64":17.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":null},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3289411516263327806,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3289411516263327806,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12029121808718862100,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":12029121808718862100,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[239716716021064150,{"persistent_metadata":{"display_name":"Dune 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1801066723091712434,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14514477720912258595,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[18341697272814101120,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[17.0,-79.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1008.0,502.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[2128810469968776913,{"persistent_metadata":{"display_name":"Far Mountains","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":16}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2163528024003768644,{"persistent_metadata":{"display_name":"Dune in Shadow 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,6]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3683309254695891012,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[3916070947050514908,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[10720574559271598132,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[3726756269632080543,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[5294703684886212416,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7419291594083587754,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[3934928477288442109,{"persistent_metadata":{"display_name":"Dune 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4037968351431607570,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7807438675023750219,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[11874141024063691837,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[4390668436091073484,{"persistent_metadata":{"display_name":"Midground in Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":18}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4445985685181725042,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[3,0]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,-3]}}},"network_metadata":null}}],[6,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-28,-3]}}},"network_metadata":null}}],[7,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5883606306991910210,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[6686718746443793247,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16598825029377599083,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[6097807941755042226,{"persistent_metadata":{"display_name":"Dune 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,40]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6523786079462141312,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7783268010546120518,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16009834030113172488,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[7128559142392931896,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[10094915787292727725,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[18443039976647938912,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.33333333333328596,-0.3333333333333428],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,580.0],"node_graph_width":0.0},"selection_undo_history":[[10094915787292727725]],"selection_redo_history":[]}}}}],[7711570794020903773,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1126802566044359983,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[3025883099767376126,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[8804763001225416124,{"persistent_metadata":{"display_name":"Dune in Shadow 4","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9069881382900058607,{"persistent_metadata":{"display_name":"Dune 5","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10686861494573327243,{"persistent_metadata":{"display_name":"Dune in Shadow 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10806978668166337270,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[3765311973789472189,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[9133354469966676056,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[11386926595254122633,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12110920487474373676,{"persistent_metadata":{"display_name":"Dune in Shadow 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12122314434656187176,{"persistent_metadata":{"display_name":"Dune in Shadow 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,27]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12317719117993811200,{"persistent_metadata":{"display_name":"Dune 4","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12416569579970107543,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12639486733043466090,{"persistent_metadata":{"display_name":"Dune in Shadow 3","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13132104524813958174,{"persistent_metadata":{"display_name":"Foreground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,3]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13323241418027154136,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[3434804841107735149,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16504069171520924548,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[26.0,-82.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1017.0,499.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[13644002059194136823,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13676600738025998635,{"persistent_metadata":{"display_name":"Background","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":10}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15002088321732485705,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-32,56]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[8591396027454826376,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[15212962088799153943,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[15385259560644295534,{"persistent_metadata":{"display_name":"Dune 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16611856724057842399,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[9065988052616974602,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[17232801702996970986,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[17154757625902243313,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[757876048866560520,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[1357621220363171879,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[17239043462037837834,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7260397085903590160,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[15937218612227302315,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[17327221498641745184,{"persistent_metadata":{"display_name":"Dune 3","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17437077810654043142,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-25,56]}}},"network_metadata":null}}],[17589660903986237301,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[3289411516263327806,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[12029121808718862100,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0},"selection_undo_history":[[]],"selection_redo_history":[]}}}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[393.8840949272409,-703.048313613491],"tilt":0.0,"zoom":0.7533811475409836,"flip":false},"node_graph_to_viewport":[0.7533811475409836,0.0,0.0,0.7533811475409836,1287.0,51.0],"node_graph_width":1981.0},"selection_undo_history":[[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[17327221498641745184],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[6097807941755042226,5883606306991910210,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[2128810469968776913],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[15385259560644295534],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[13676600738025998635],[2128810469968776913],[11435147660766496741],[15726496377243608372],[4390668436091073484],[11386926595254122633],[11435147660766496741],[15726496377243608372],[15726496377243608372,11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741,15726496377243608372,4390668436091073484,11386926595254122633,13676600738025998635,2128810469968776913],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[4390668436091073484,11386926595254122633,13676600738025998635,2128810469968776913],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741,2163528024003768644,7128559142392931896,12110920487474373676,13323241418027154136,12639486733043466090,1801066723091712434,8804763001225416124,17154757625902243313,4390668436091073484,12122314434656187176,16611856724057842399,10686861494573327243,10806978668166337270,11386926595254122633,6523786079462141312,13676600738025998635,6097807941755042226,5883606306991910210,15385259560644295534,3726756269632080543,17327221498641745184,3683309254695891012,12317719117993811200,17239043462037837834,9069881382900058607,4037968351431607570,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[4390668436091073484,11386926595254122633,13676600738025998635,2128810469968776913],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[15726496377243608372],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[4390668436091073484,12122314434656187176,16611856724057842399,10686861494573327243,10806978668166337270,11386926595254122633,6523786079462141312,13676600738025998635,6097807941755042226,5883606306991910210,15385259560644295534,3726756269632080543,17327221498641745184,3683309254695891012,12317719117993811200,17239043462037837834,9069881382900058607,4037968351431607570,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[13132104524813958174],[11435147660766496741],[2163528024003768644],[12110920487474373676],[12639486733043466090],[8804763001225416124],[11435147660766496741],[15726496377243608372],[3934928477288442109],[239716716021064150],[15726496377243608372],[15726496377243608372,11435147660766496741],[239716716021064150],[239716716021064150,7711570794020903773],[239716716021064150,3934928477288442109],[4390668436091073484],[12122314434656187176],[10686861494573327243],[11386926595254122633],[4390668436091073484],[13676600738025998635,2128810469968776913],[13676600738025998635,6097807941755042226,5883606306991910210,15385259560644295534,3726756269632080543,17327221498641745184,3683309254695891012,12317719117993811200,17239043462037837834,9069881382900058607,4037968351431607570,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[11386926595254122633],[13676600738025998635],[6097807941755042226],[15385259560644295534],[17327221498641745184],[12317719117993811200],[9069881382900058607],[2128810469968776913],[13132104524813958174],[2128810469968776913],[13132104524813958174],[2163528024003768644],[239716716021064150],[3934928477288442109],[8804763001225416124],[12639486733043466090],[12110920487474373676],[2163528024003768644],[4390668436091073484],[13676600738025998635],[2128810469968776913],[2163528024003768644],[9069881382900058607],[12317719117993811200,9069881382900058607],[17327221498641745184,12317719117993811200,9069881382900058607],[15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[12317719117993811200,15385259560644295534,9069881382900058607,17327221498641745184,6097807941755042226],[17327221498641745184,12317719117993811200,11386926595254122633,6097807941755042226,9069881382900058607,15385259560644295534],[9069881382900058607,6097807941755042226,10686861494573327243,15385259560644295534,11386926595254122633,12317719117993811200,17327221498641745184],[10686861494573327243,15385259560644295534,12122314434656187176,11386926595254122633,9069881382900058607,6097807941755042226,12317719117993811200,17327221498641745184],[12122314434656187176,6097807941755042226,11386926595254122633,12317719117993811200,17327221498641745184,10686861494573327243,239716716021064150,15385259560644295534,9069881382900058607],[9069881382900058607,239716716021064150,6097807941755042226,12122314434656187176,12317719117993811200,10686861494573327243,15385259560644295534,17327221498641745184,11386926595254122633,3934928477288442109],[9069881382900058607,13676600738025998635,3934928477288442109,12122314434656187176,6097807941755042226,15385259560644295534,4390668436091073484,10686861494573327243,17327221498641745184,11386926595254122633,12317719117993811200,239716716021064150],[6097807941755042226,3934928477288442109,4390668436091073484,9069881382900058607,13676600738025998635,11386926595254122633,15385259560644295534,12122314434656187176,8804763001225416124,10686861494573327243,239716716021064150,12317719117993811200,17327221498641745184],[9069881382900058607,12122314434656187176,13676600738025998635,10686861494573327243,12317719117993811200,6097807941755042226,15385259560644295534,239716716021064150,17327221498641745184,11386926595254122633,3934928477288442109,8804763001225416124,12639486733043466090,4390668436091073484],[10686861494573327243,15385259560644295534,17327221498641745184,239716716021064150,8804763001225416124,6097807941755042226,11386926595254122633,12317719117993811200,12122314434656187176,9069881382900058607,3934928477288442109,12639486733043466090],[10686861494573327243,17327221498641745184,12317719117993811200,11386926595254122633,12639486733043466090,12122314434656187176,9069881382900058607,6097807941755042226,12110920487474373676,3934928477288442109,15385259560644295534,8804763001225416124,239716716021064150],[12110920487474373676,10686861494573327243,11386926595254122633,12317719117993811200,8804763001225416124,3934928477288442109,9069881382900058607,15385259560644295534,2163528024003768644,17327221498641745184,239716716021064150,12639486733043466090,12122314434656187176,6097807941755042226],[2128810469968776913],[17327221498641745184],[]],"selection_redo_history":[]}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"c4e16e1aac642bbcde72f41f86deed79e6e38006","document_ptz":{"pan":[-999.515765085624,-500.18277881031514],"tilt":0.0,"zoom":0.940975,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":false,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":4445985685181725042,"output_index":0}}],"nodes":[[239716716021064150,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":7711570794020903773,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1801066723091712434,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.036889445,"green":0.038204364,"blue":0.043735027,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1744.31393592},"exposed":false}},{"Value":{"tagged_value":{"F64":63.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":14514477720912258595,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14514477720912258595,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":18341697272814101120,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18341697272814101120,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2128810469968776913,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":12416569579970107543,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2163528024003768644,{"inputs":[{"Node":{"node_id":12110920487474373676,"output_index":0}},{"Node":{"node_id":7128559142392931896,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3683309254695891012,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.42326772,"green":0.25015837,"blue":0.18116423,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1485.34393334},"exposed":false}},{"Value":{"tagged_value":{"F64":225.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3916070947050514908,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10720574559271598132,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3916070947050514908,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":10720574559271598132,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3726756269632080543,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.23839766,"green":0.17788841,"blue":0.14412849,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1465.6573046},"exposed":false}},{"Value":{"tagged_value":{"F64":230.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5294703684886212416,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7419291594083587754,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":5294703684886212416,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7419291594083587754,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3934928477288442109,{"inputs":[{"Node":{"node_id":239716716021064150,"output_index":0}},{"Node":{"node_id":17589660903986237301,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4037968351431607570,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.72305524,"green":0.44520125,"blue":0.27467737,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1442.36628417},"exposed":false}},{"Value":{"tagged_value":{"F64":318.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7807438675023750219,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":11874141024063691837,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11874141024063691837,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7807438675023750219,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4390668436091073484,{"inputs":[{"Node":{"node_id":13676600738025998635,"output_index":0}},{"Node":{"node_id":12122314434656187176,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4445985685181725042,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}},"exposed":true}},{"Node":{"node_id":13132104524813958174,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.7379105,"blue":0.45078585,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"Generic":"T"}]},"import_index":1}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":2}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":3}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":4}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5883606306991910210,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.20155624,"green":0.15592647,"blue":0.13013649,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1524.31304726},"exposed":false}},{"Value":{"tagged_value":{"F64":175.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6686718746443793247,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16598825029377599083,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16598825029377599083,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":6686718746443793247,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6097807941755042226,{"inputs":[{"Node":{"node_id":15385259560644295534,"output_index":0}},{"Node":{"node_id":5883606306991910210,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6523786079462141312,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.70837593,"green":0.2874409,"blue":0.15896086,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1491.01593158},"exposed":false}},{"Value":{"tagged_value":{"F64":173.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7783268010546120518,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16009834030113172488,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16009834030113172488,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7783268010546120518,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7128559142392931896,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.02121901,"green":0.02415763,"blue":0.029556833,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1803.43646796},"exposed":false}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10094915787292727725,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":10094915787292727725,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":18443039976647938912,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18443039976647938912,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7711570794020903773,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.74540436,"green":0.20507872,"blue":0.111932434,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1513.3360814},"exposed":false}},{"Value":{"tagged_value":{"F64":22.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1126802566044359983,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3025883099767376126,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3025883099767376126,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":1126802566044359983,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8804763001225416124,{"inputs":[{"Node":{"node_id":3934928477288442109,"output_index":0}},{"Node":{"node_id":17154757625902243313,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9069881382900058607,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":4037968351431607570,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10686861494573327243,{"inputs":[{"Node":{"node_id":11386926595254122633,"output_index":0}},{"Node":{"node_id":10806978668166337270,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10806978668166337270,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.036889445,"green":0.038204364,"blue":0.043735027,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1579.30304164},"exposed":false}},{"Value":{"tagged_value":{"F64":142.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3765311973789472189,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9133354469966676056,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3765311973789472189,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":9133354469966676056,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11386926595254122633,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":6523786079462141312,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12110920487474373676,{"inputs":[{"Node":{"node_id":12639486733043466090,"output_index":0}},{"Node":{"node_id":13323241418027154136,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12122314434656187176,{"inputs":[{"Node":{"node_id":10686861494573327243,"output_index":0}},{"Node":{"node_id":16611856724057842399,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12317719117993811200,{"inputs":[{"Node":{"node_id":9069881382900058607,"output_index":0}},{"Node":{"node_id":17239043462037837834,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12416569579970107543,{"inputs":[{"Node":{"node_id":13644002059194136823,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12639486733043466090,{"inputs":[{"Node":{"node_id":8804763001225416124,"output_index":0}},{"Node":{"node_id":1801066723091712434,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13132104524813958174,{"inputs":[{"Node":{"node_id":4390668436091073484,"output_index":0}},{"Node":{"node_id":2163528024003768644,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13323241418027154136,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.027320892,"green":0.03071344,"blue":0.039546236,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1733.30579952},"exposed":false}},{"Value":{"tagged_value":{"F64":77.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3434804841107735149,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16504069171520924548,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16504069171520924548,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":3434804841107735149,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13644002059194136823,{"inputs":[{"Node":{"node_id":17437077810654043142,"output_index":0}},{"Value":{"tagged_value":{"F64":5.599999999999968},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13676600738025998635,{"inputs":[{"Node":{"node_id":2128810469968776913,"output_index":0}},{"Node":{"node_id":6097807941755042226,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15002088321732485705,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1343.63187023},"exposed":false}},{"Value":{"tagged_value":{"F64":349.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8591396027454826376,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":15212962088799153943,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15212962088799153943,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":8591396027454826376,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15385259560644295534,{"inputs":[{"Node":{"node_id":17327221498641745184,"output_index":0}},{"Node":{"node_id":3726756269632080543,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16611856724057842399,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.045186203,"green":0.045186203,"blue":0.048171822,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1554.40785539},"exposed":false}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9065988052616974602,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":17232801702996970986,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":9065988052616974602,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17232801702996970986,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17154757625902243313,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.045186203,"green":0.045186203,"blue":0.048171822,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1670.79570439},"exposed":false}},{"Value":{"tagged_value":{"F64":24.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[757876048866560520,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1357621220363171879,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":757876048866560520,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":1357621220363171879,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17239043462037837834,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.6104956,"green":0.3967553,"blue":0.23455065,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1447.11050605},"exposed":false}},{"Value":{"tagged_value":{"F64":309.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7260397085903590160,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":7260397085903590160,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15937218612227302315,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":15937218612227302315,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17327221498641745184,{"inputs":[{"Node":{"node_id":12317719117993811200,"output_index":0}},{"Node":{"node_id":3683309254695891012,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17437077810654043142,{"inputs":[{"Node":{"node_id":15002088321732485705,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"U32":40},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17589660903986237301,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"red":0.89626944,"green":0.37123775,"blue":0.1499598,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":1614.38741737},"exposed":false}},{"Value":{"tagged_value":{"F64":17.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Import":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"red":0.9911022,"green":0.6514057,"blue":0.39157256,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3289411516263327806,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7828034197076821310,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::AsU32Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3289411516263327806,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12029121808718862100,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Import":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"math_nodes::CombineVec2Node"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16943732999059587742,{"inputs":[{"Node":{"node_id":12029121808718862100,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[239716716021064150,{"persistent_metadata":{"display_name":"Dune 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1801066723091712434,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14514477720912258595,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[18341697272814101120,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[17.0,-79.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1008.0,502.0],"node_graph_width":0.0}}}}}],[2128810469968776913,{"persistent_metadata":{"display_name":"Far Mountains","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":16}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2163528024003768644,{"persistent_metadata":{"display_name":"Dune in Shadow 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,6]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3683309254695891012,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[3916070947050514908,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[10720574559271598132,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}],[3726756269632080543,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[5294703684886212416,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7419291594083587754,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}],[3934928477288442109,{"persistent_metadata":{"display_name":"Dune 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4037968351431607570,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7807438675023750219,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[11874141024063691837,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}],[4390668436091073484,{"persistent_metadata":{"display_name":"Midground in Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":18}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4445985685181725042,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[3,0]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5883606306991910210,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[6686718746443793247,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16598825029377599083,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}],[6097807941755042226,{"persistent_metadata":{"display_name":"Dune 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,40]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6523786079462141312,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7783268010546120518,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16009834030113172488,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}],[7128559142392931896,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[10094915787292727725,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[18443039976647938912,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.33333333333328596,-0.3333333333333428],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,990.0,580.0],"node_graph_width":1980.0}}}}}],[7711570794020903773,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1126802566044359983,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[3025883099767376126,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}],[8804763001225416124,{"persistent_metadata":{"display_name":"Dune in Shadow 4","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9069881382900058607,{"persistent_metadata":{"display_name":"Dune 5","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10686861494573327243,{"persistent_metadata":{"display_name":"Dune in Shadow 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10806978668166337270,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[3765311973789472189,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[9133354469966676056,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}],[11386926595254122633,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12110920487474373676,{"persistent_metadata":{"display_name":"Dune in Shadow 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12122314434656187176,{"persistent_metadata":{"display_name":"Dune in Shadow 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,27]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12317719117993811200,{"persistent_metadata":{"display_name":"Dune 4","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12416569579970107543,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12639486733043466090,{"persistent_metadata":{"display_name":"Dune in Shadow 3","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13132104524813958174,{"persistent_metadata":{"display_name":"Foreground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,3]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13323241418027154136,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[3434804841107735149,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16504069171520924548,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[26.0,-82.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1017.0,499.0],"node_graph_width":0.0}}}}}],[13644002059194136823,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13676600738025998635,{"persistent_metadata":{"display_name":"Background","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":10}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15002088321732485705,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[8591396027454826376,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[15212962088799153943,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}],[15385259560644295534,{"persistent_metadata":{"display_name":"Dune 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16611856724057842399,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[9065988052616974602,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[17232801702996970986,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}],[17154757625902243313,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[757876048866560520,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[1357621220363171879,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}],[17239043462037837834,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7260397085903590160,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[15937218612227302315,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}],[17327221498641745184,{"persistent_metadata":{"display_name":"Dune 3","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17437077810654043142,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17589660903986237301,{"persistent_metadata":{"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[640915213983348287,{"persistent_metadata":{"display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[3289411516263327806,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[12029121808718862100,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14577956936089455769,{"persistent_metadata":{"display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":"The X component of the vec2.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":"The Y component of the vec2.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The vector geometry with points to be jittered.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":"The maximum extent of the random distance each point can be offset.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"Seed used to determine unique variations on all randomized offsets.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Along Normals","input_description":"Whether to offset anchor points along their normal direction (perpendicular to the path) or in a random direction. Free-floating and branching points have no normal direction, so they receive a random-angled offset regardless of this setting.\n"}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_width":0.0}}}}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[251.6613287093704,-695.5531415748673],"tilt":0.0,"zoom":0.7916666666666666,"flip":false},"node_graph_to_viewport":[0.7916666666666666,0.0,0.0,0.7916666666666666,1189.0,29.0],"node_graph_width":1980.0}}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"","document_ptz":{"pan":[-999.4891968983712,-499.6381309716371],"tilt":0.0,"zoom":0.9405,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":false,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/procedural-string-lights.graphite b/demo-artwork/procedural-string-lights.graphite index e0b6cbff8a..2b7501f5ee 100644 --- a/demo-artwork/procedural-string-lights.graphite +++ b/demo-artwork/procedural-string-lights.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":14972365039974885000,"output_index":0}}],"nodes":[[169695252050218443,{"inputs":[{"Node":{"node_id":6559102076450693000,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.75,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.01,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.7734375,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.01,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[31.55635094002563,-2.7755575615628914e-17,2.7755575615628914e-17,31.55635094002563,-0.225779263556106,34.981204988590605]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[183562335973647870,{"inputs":[{"Node":{"node_id":4248875763694880300,"output_index":0}},{"Node":{"node_id":2181148486404191200,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[655907162126315400,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[416.0,270.9999999999999]],[2,[587.0,291.9999999999999]],[3,[373.0,372.9999999999999]],[4,[484.0,446.9999999999999]],[5,[639.0,438.9999999999999]],[6,[495.0,533.9999999999999]],[7,[304.0,611.9999999999999]],[8,[475.0,671.9999999999999]],[9,[750.0,703.9999999999999]],[10,[455.0,824.9999999999999]],[11,[186.0,824.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[665049002420596400,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"remove":[],"delta":[[1,[-103.55555555555554,126.66666666666664]],[2,[-67.55555555555554,158.22222222222217]],[3,[45.77777777777777,145.33333333333331]],[4,[18.66666666666663,157.77777777777771]],[5,[66.22222222222223,152.88888888888886]],[6,[123.99999999999994,148.4444444444444]],[7,[229.33333333333331,152.4444444444444]],[8,[252.4444444444444,124.88888888888886]],[9,[156.4444444444444,97.33333333333331]],[10,[216.4444444444444,72.4444444444444]],[11,[136.88888888888886,39.111111111111086]],[12,[199.5555555555555,10.666666666666629]],[13,[153.77777777777777,-1.3333333333333712]],[14,[183.11111111111103,-19.111111111111143]],[15,[111.11111111111114,-60.888888888888914]],[16,[159.5555555555555,-75.55555555555557]],[17,[123.99999999999994,-84.00000000000003]],[18,[145.77777777777777,-97.7777777777778]],[19,[90.66666666666664,-129.33333333333334]],[20,[128.4444444444444,-142.22222222222223]],[21,[76.0,-202.22222222222223]],[22,[71.11111111111109,-201.7777777777778]],[23,[19.555555555555543,-139.55555555555557]],[24,[57.77777777777777,-129.33333333333334]],[25,[0.8888888888888573,-94.66666666666669]],[26,[22.66666666666663,-81.33333333333337]],[27,[-11.111111111111144,-72.00000000000003]],[28,[39.111111111111086,-58.22222222222226]],[29,[-32.888888888888914,-14.666666666666686]],[30,[-9.333333333333371,0.0]],[31,[-53.33333333333337,13.777777777777771]],[32,[9.333333333333314,38.66666666666663]],[33,[-78.22222222222223,75.55555555555554]],[34,[-5.333333333333371,99.11111111111109]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29],[30,30],[31,31],[32,32],[33,33],[34,34]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,1]],"handle_primary":[[1,[0.0,0.0]],[2,[30.66666666666663,2.6666666666666856]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[24.88888888888891,-15.111111111111086]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[0.0,0.0]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[0.0,0.0]],[20,[0.0,0.0]],[21,[0.0,0.0]],[22,[0.0,0.0]],[23,[0.0,0.0]],[24,[0.0,0.0]],[25,[0.0,0.0]],[26,[0.0,0.0]],[27,[0.0,0.0]],[28,[0.0,0.0]],[29,[0.0,0.0]],[30,[0.0,0.0]],[31,[0.0,0.0]],[32,[0.0,0.0]],[33,[0.0,0.0]],[34,[0.0,0.0]]],"handle_end":[[1,[-30.666666666666615,-2.6666666666666856]],[2,[-51.111111111111086,14.666666666666686]],[3,[8.4444444444444,-0.8888888888889142]],[4,[-31.555555555555543,18.22222222222223]],[5,[-13.333333333333384,14.222222222222229]],[6,[-24.88888888888891,15.111111111111086]],[7,[0.0,0.0]],[8,[36.0,41.77777777777777]],[9,[-34.222222222222285,36.0]],[10,[26.66666666666663,44.44444444444446]],[11,[-24.0,31.555555555555543]],[12,[18.66666666666663,16.0]],[13,[-13.333333333333371,14.222222222222229]],[14,[29.33333333333337,57.77777777777777]],[15,[-12.444444444444455,28.444444444444457]],[16,[6.666666666666629,13.333333333333314]],[17,[-10.222222222222172,12.444444444444455]],[18,[13.3333333333333,41.33333333333334]],[19,[-9.777777777777844,23.55555555555557]],[20,[13.333333333333371,70.22222222222223]],[21,[0.0,0.0]],[22,[38.22222222222223,4.888888888888886]],[23,[-35.55555555555554,11.1111111111111]],[24,[47.55555555555554,4.888888888888886]],[25,[-11.111111111111144,-1.7777777777778]],[26,[26.22222222222223,2.666666666666657]],[27,[-39.55555555555554,12.444444444444429]],[28,[54.66666666666663,6.666666666666686]],[29,[-17.77777777777777,-3.555555555555543]],[30,[35.111111111111086,1.333333333333373]],[31,[-42.22222222222223,5.333333333333314]],[32,[55.111111111111086,9.777777777777771]],[33,[-64.44444444444446,3.111111111111157]],[34,[65.7777777777778,12.444444444444445]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0],[27,0],[28,0],[29,0],[30,0],[31,0],[32,0],[33,0],[34,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":34}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2181148486404191200,{"inputs":[{"Node":{"node_id":4331062027851128000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[353.5143520436918,551.6238777493922]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.9777789484064812,1.9777789484064812]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2866788868013687300,{"inputs":[{"Node":{"node_id":8496292024993914696,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2908374490615384600,{"inputs":[{"Node":{"node_id":17339085479159577000,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.00699541,"green":0.019382361,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.00699541,"green":0.019382361,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[95.25925925925924,0.0,0.0,95.25925925925924,28.296296296296305,173.1111111111111]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3471929742275053000,{"inputs":[{"Node":{"node_id":11411423299989983000,"output_index":0}},{"Node":{"node_id":4217566479741824000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3958246774416220000,{"inputs":[{"Node":{"node_id":5250960114142560178,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4217566479741824000,{"inputs":[{"Node":{"node_id":17790961655412892000,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.023153365,"green":0.76052463,"blue":0.1412633,"alpha":1.0,"linear":true},{"red":0.76052463,"green":0.023153365,"blue":0.023153365,"alpha":1.0,"linear":true},{"red":0.023153365,"green":0.26225072,"blue":0.76052463,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"U32":3},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::AssignColorsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4248875763694880300,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":7297408968096180000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4331062027851128000,{"inputs":[{"Node":{"node_id":665049002420596400,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.026241222,"green":0.054480284,"blue":0.084376216,"alpha":1.0,"linear":true},{"red":0.023423795,"green":0.11856167,"blue":0.11146028,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.026241222,"green":0.054480284,"blue":0.084376216,"alpha":1.0,"linear":true},{"red":0.023423795,"green":0.11856167,"blue":0.11146028,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[216.8888888888888,266.66666666666674,-266.66666666666674,216.8888888888888,30.66666666666669,-133.33333333333334]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4534782777857480700,{"inputs":[{"Node":{"node_id":183562335973647870,"output_index":0}},{"Node":{"node_id":14631609508767818000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5250960114142560178,{"inputs":[{"Node":{"node_id":655907162126315400,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.028994003,"green":0.027362648,"blue":0.041992687,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5737014828407011000,{"inputs":[{"Node":{"node_id":10504222558938851000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[499.21344163872624,106.32837674079803]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[55.110312549931045,55.110312549931045]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.1009529959239839e-14,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6559102076450693000,{"inputs":[{"Node":{"node_id":13907401402762847509,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7297408968096180000,{"inputs":[{"Node":{"node_id":2908374490615384600,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[353.5143520436944,551.6238777493922]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.9777789484064812,1.9777789484064812]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8147814087664910471,{"inputs":[{"Node":{"node_id":2866788868013687300,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.09305898,"green":0.090841725,"blue":0.13843162,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.09305898,"green":0.090841725,"blue":0.13843162,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[20.0,0.0,0.0,20.0,-10.0,10.600000187754633]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8309013977031955000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8496292024993914696,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8579252446942557840,5702904670777106146,6914816536199142761,17771770146045579307,4317718082554655671],"remove":[],"delta":[[4317718082554655671,[-5.75,-0.4000000059604645]],[5702904670777106146,[5.75,-0.4000000059604645]],[6914816536199142761,[10.0,21.600000381469727]],[8579252446942557840,[-5.75,-0.4000000059604645]],[17771770146045579307,[-10.0,21.600000381469727]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,8579252446942557840],[2,5702904670777106146],[3,6914816536199142761],[4,17771770146045579307],[5,4317718082554655671]],"end_point":[[1,5702904670777106146],[2,6914816536199142761],[3,17771770146045579307],[4,4317718082554655671],[5,8579252446942557840]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10504222558938851000,{"inputs":[{"Node":{"node_id":13571989088655643000,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":1.0,"green":0.8785925,"blue":0.5919783,"alpha":1.0,"linear":true},{"red":0.77582234,"green":0.38642952,"blue":0.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":1.0,"green":0.8785925,"blue":0.5919783,"alpha":1.0,"linear":true},{"red":0.77582234,"green":0.38642952,"blue":0.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.9931515361229228,-1.3444106938820257e-17,1.3444106938820257e-17,0.9931515361229228,-0.05647407504472901,0.0946336801526324]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11411423299989983000,{"inputs":[{"Node":{"node_id":16877573495957869000,"output_index":0}},{"Node":{"node_id":3958246774416220000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11815560782623298000,{"inputs":[{"Node":{"node_id":16765094648901306000,"output_index":0}},{"Node":{"node_id":13394621587544123000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12728151724950013388,{"inputs":[{"Node":{"node_id":3958246774416220000,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":105.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13371003476981866000,{"inputs":[{"Node":{"node_id":11815560782623298000,"output_index":0}},{"Node":{"node_id":169695252050218443,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13394621587544123000,{"inputs":[{"Node":{"node_id":13907401402762847509,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.37803793,"green":0.37803793,"blue":0.37803793,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.37803793,"green":0.37803793,"blue":0.37803793,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.8234391,"green":0.42677242,"blue":0.42677242,"alpha":1.0,"linear":true},{"red":0.76052463,"green":0.023153365,"blue":0.023153365,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[31.55635094002563,-2.7755575615628914e-17,2.7755575615628914e-17,31.55635094002563,-0.225779263556106,34.981204988590605]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13571989088655643000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::StarNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13907401402762847509,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10666000720855117911,12291367210538906710,11079673538758176715,9852417284720842144,13528392218319754720],"remove":[],"delta":[[9852417284720842144,[-13.314000129699709,30.4060001373291]],[10666000720855117911,[0.0,16.600000381469727]],[11079673538758176715,[0.0,66.8030014038086]],[12291367210538906710,[13.314000129699709,30.4060001373291]],[13528392218319754720,[0.0,16.600000381469727]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,10666000720855117911],[2,12291367210538906710],[3,11079673538758176715],[4,9852417284720842144],[5,13528392218319754720]],"end_point":[[1,12291367210538906710],[2,11079673538758176715],[3,9852417284720842144],[4,13528392218319754720],[5,10666000720855117911]],"handle_primary":[[1,[7.347000122070312,0.0]],[2,[0.0,7.617998123168945]],[3,[-4.480999946594238,0.0]],[4,[0.0,-7.618000030517578]],[5,[0.0,0.0]]],"handle_end":[[1,[0.0,-7.618000030517578]],[2,[4.480999946594238,0.0]],[3,[0.0,7.616998672485352]],[4,[-7.347000122070312,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14631609508767818000,{"inputs":[{"Node":{"node_id":15889416971203222000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[487.1243076693745,127.7443401649906]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[25.393705016577044,25.003032631706716]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14972365039974885000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":3471929742275053000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Node":{"node_id":6,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":4}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":7,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},{"Concrete":{"name":"core_types::list::List"}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6,{"inputs":[{"Node":{"node_id":5,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::TranslateFootprintNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7,{"inputs":[{"Node":{"node_id":2,"output_index":0}},{"Value":{"tagged_value":{"U32":1},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15889416971203222000,{"inputs":[{"Node":{"node_id":8309013977031955000,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.77582234,"green":0.38642952,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.77582234,"green":0.38642952,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.0,0.0,0.0,1.0,0.0,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16765094648901306000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":8147814087664910471,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16877573495957869000,{"inputs":[{"Node":{"node_id":4534782777857480700,"output_index":0}},{"Node":{"node_id":5737014828407011000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17339085479159577000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[88.4444444444444,151.55555555555554]],[2,[122.22222222222224,196.4444444444444]],[3,[123.55555555555554,199.1111111111111]],[4,[28.296296296296305,198.96296296296293]],[5,[28.296296296296305,197.33333333333331]],[6,[58.962962962962976,152.74074074074073]],[7,[66.51851851851853,147.1111111111111]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[1,[-32.0,-3.5555555555555145]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[5.92592592592591,45.77777777777786]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17790961655412892000,{"inputs":[{"Node":{"node_id":13371003476981866000,"output_index":0}},{"Node":{"node_id":12728151724950013388,"output_index":0}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[169695252050218443,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[183562335973647870,{"persistent_metadata":{"display_name":"Tree","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[655907162126315400,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,15]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[665049002420596400,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,34]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2181148486404191200,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2866788868013687300,{"persistent_metadata":{"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,24]}}},"network_metadata":null}}],[2908374490615384600,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3471929742275053000,{"persistent_metadata":{"display_name":"Lights","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,12]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3958246774416220000,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,15]}}},"network_metadata":null}}],[4217566479741824000,{"persistent_metadata":{"display_name":"Assign Colors","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Content","input_description":"The content with vector paths to apply the fill and/or stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"Whether to style the fill.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stroke","input_description":"Whether to style the stroke.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_gradient","input_name":"Gradient","input_description":"The range of colors to select from.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":"Whether to reverse the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Randomize","input_description":"Whether to randomize the color selection for each element from throughout the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_seed","input_name":"Seed","input_description":"The seed used for randomization.\nSeed to determine unique variations on the randomized color selection.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_repeat_every","input_name":"Repeat Every","input_description":"The number of elements to span across the gradient before repeating. A 0 value will span the entire gradient once.\n"}}],"output_names":["Content"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4248875763694880300,{"persistent_metadata":{"display_name":"Tree Stump","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4331062027851128000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4534782777857480700,{"persistent_metadata":{"display_name":"Star Base","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5250960114142560178,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,15]}}},"network_metadata":null}}],[5737014828407011000,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6559102076450693000,{"persistent_metadata":{"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,18]}}},"network_metadata":null}}],[7297408968096180000,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8147814087664910471,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8309013977031955000,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,31]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8496292024993914696,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,24]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10504222558938851000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11411423299989983000,{"persistent_metadata":{"display_name":"Wire (Use Path Tool to Reshape This!)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11815560782623298000,{"persistent_metadata":{"display_name":"Bulb Shape","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12728151724950013388,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,12]}}},"network_metadata":null}}],[13371003476981866000,{"persistent_metadata":{"display_name":"Bulb Glow Gradient","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-29,18]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13394621587544123000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13571989088655643000,{"persistent_metadata":{"display_name":"Star","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Sides","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius 1","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius 2","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,28]}}},"network_metadata":null}}],[13907401402762847509,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,21]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14631609508767818000,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14972365039974885000,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,9]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,-3]}}},"network_metadata":null}}],[6,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-28,-3]}}},"network_metadata":null}}],[7,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15889416971203222000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16765094648901306000,{"persistent_metadata":{"display_name":"Bulb Housing","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16877573495957869000,{"persistent_metadata":{"display_name":"Star","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":10}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17339085479159577000,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,37]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17790961655412892000,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[527.9166666666665,-576.1833333333332],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1518.0,4.0],"node_graph_width":1981.0},"selection_undo_history":[[],[2866788868013687300],[],[4352028121261571600],[],[2866788868013687300],[6559102076450693000],[6559102076450693000],[10775791528628074000],[],[6559102076450693000],[],[],[],[],[],[15084833709935380000],[],[16765094648901306000],[16765094648901306000,11815560782623298000],[16765094648901306000,13371003476981866000,11815560782623298000],[6559102076450693000,16765094648901306000,13394621587544123000,11815560782623298000,2866788868013687300,13371003476981866000],[3958246774416220000],[],[],[3958246774416220000],[3958246774416220000,655907162126315400],[],[3958246774416220000],[],[3958246774416220000],[655907162126315400,3958246774416220000],[],[],[3958246774416220000],[655907162126315400,3958246774416220000],[],[14631609508767818000],[],[5737014828407011000],[],[10118219203151733000],[],[],[],[],[],[],[655907162126315400],[],[],[655907162126315400,3958246774416220000],[],[],[16877573495957869000],[11411423299989983000],[16877573495957869000],[3471929742275053000],[11411423299989983000],[11411423299989983000,15209576944107258000],[15209576944107258000,3287844738046380000,11411423299989983000],[15209576944107258000,3287844738046380000,11411423299989983000,3958246774416220000],[3958246774416220000,655907162126315400,15209576944107258000,11411423299989983000,3287844738046380000],[4248875763694880300],[11411423299989983000],[3471929742275053000],[11411423299989983000],[15223368326030279287],[11815560782623298000],[11815560782623298000,16765094648901306000],[11815560782623298000],[13371003476981866000],[16765094648901306000],[15223368326030279287],[13371003476981866000],[13371003476981866000,16765094648901306000,11815560782623298000],[13371003476981866000],[11815560782623298000],[16765094648901306000],[13371003476981866000],[16765094648901306000],[11815560782623298000],[13371003476981866000],[11815560782623298000],[13371003476981866000],[16765094648901306000],[13371003476981866000],[16877573495957869000],[16765094648901306000],[13371003476981866000],[16765094648901306000],[11411423299989983000],[]],"selection_redo_history":[]}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"95bbc95606ba40ed7441fdf4e1b954d80b72e3dc","document_ptz":{"pan":[-500.157717622685,-499.8045823704831],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":14972365039974885000,"output_index":0}}],"nodes":[[169695252050218443,{"inputs":[{"Node":{"node_id":13907401402762847509,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.75,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.01,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.7734375,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.01,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[31.55635094002563,-2.7755575615628914e-17,2.7755575615628914e-17,31.55635094002563,-0.225779263556106,34.981204988590605]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[183562335973647870,{"inputs":[{"Node":{"node_id":4248875763694880300,"output_index":0}},{"Node":{"node_id":2181148486404191200,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[655907162126315400,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[416.0,270.9999999999999]],[2,[587.0,291.9999999999999]],[3,[373.0,372.9999999999999]],[4,[484.0,446.9999999999999]],[5,[639.0,438.9999999999999]],[6,[495.0,533.9999999999999]],[7,[304.0,611.9999999999999]],[8,[475.0,671.9999999999999]],[9,[750.0,703.9999999999999]],[10,[455.0,824.9999999999999]],[11,[186.0,824.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[665049002420596400,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"remove":[],"delta":[[1,[-103.55555555555554,126.66666666666664]],[2,[-67.55555555555554,158.22222222222217]],[3,[45.77777777777777,145.33333333333331]],[4,[18.66666666666663,157.77777777777771]],[5,[66.22222222222223,152.88888888888886]],[6,[123.99999999999994,148.4444444444444]],[7,[229.33333333333331,152.4444444444444]],[8,[252.4444444444444,124.88888888888886]],[9,[156.4444444444444,97.33333333333331]],[10,[216.4444444444444,72.4444444444444]],[11,[136.88888888888886,39.111111111111086]],[12,[199.5555555555555,10.666666666666629]],[13,[153.77777777777777,-1.3333333333333712]],[14,[183.11111111111103,-19.111111111111143]],[15,[111.11111111111114,-60.888888888888914]],[16,[159.5555555555555,-75.55555555555557]],[17,[123.99999999999994,-84.00000000000003]],[18,[145.77777777777777,-97.7777777777778]],[19,[90.66666666666664,-129.33333333333334]],[20,[128.4444444444444,-142.22222222222223]],[21,[76.0,-202.22222222222223]],[22,[71.11111111111109,-201.7777777777778]],[23,[19.555555555555543,-139.55555555555557]],[24,[57.77777777777777,-129.33333333333334]],[25,[0.8888888888888573,-94.66666666666669]],[26,[22.66666666666663,-81.33333333333337]],[27,[-11.111111111111144,-72.00000000000003]],[28,[39.111111111111086,-58.22222222222226]],[29,[-32.888888888888914,-14.666666666666686]],[30,[-9.333333333333371,0.0]],[31,[-53.33333333333337,13.777777777777771]],[32,[9.333333333333314,38.66666666666663]],[33,[-78.22222222222223,75.55555555555554]],[34,[-5.333333333333371,99.11111111111109]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29],[30,30],[31,31],[32,32],[33,33],[34,34]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,1]],"handle_primary":[[1,[0.0,0.0]],[2,[30.66666666666663,2.6666666666666856]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[24.88888888888891,-15.111111111111086]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[0.0,0.0]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[0.0,0.0]],[20,[0.0,0.0]],[21,[0.0,0.0]],[22,[0.0,0.0]],[23,[0.0,0.0]],[24,[0.0,0.0]],[25,[0.0,0.0]],[26,[0.0,0.0]],[27,[0.0,0.0]],[28,[0.0,0.0]],[29,[0.0,0.0]],[30,[0.0,0.0]],[31,[0.0,0.0]],[32,[0.0,0.0]],[33,[0.0,0.0]],[34,[0.0,0.0]]],"handle_end":[[1,[-30.666666666666615,-2.6666666666666856]],[2,[-51.111111111111086,14.666666666666686]],[3,[8.4444444444444,-0.8888888888889142]],[4,[-31.555555555555543,18.22222222222223]],[5,[-13.333333333333384,14.222222222222229]],[6,[-24.88888888888891,15.111111111111086]],[7,[0.0,0.0]],[8,[36.0,41.77777777777777]],[9,[-34.222222222222285,36.0]],[10,[26.66666666666663,44.44444444444446]],[11,[-24.0,31.555555555555543]],[12,[18.66666666666663,16.0]],[13,[-13.333333333333371,14.222222222222229]],[14,[29.33333333333337,57.77777777777777]],[15,[-12.444444444444455,28.444444444444457]],[16,[6.666666666666629,13.333333333333314]],[17,[-10.222222222222172,12.444444444444455]],[18,[13.3333333333333,41.33333333333334]],[19,[-9.777777777777844,23.55555555555557]],[20,[13.333333333333371,70.22222222222223]],[21,[0.0,0.0]],[22,[38.22222222222223,4.888888888888886]],[23,[-35.55555555555554,11.1111111111111]],[24,[47.55555555555554,4.888888888888886]],[25,[-11.111111111111144,-1.7777777777778]],[26,[26.22222222222223,2.666666666666657]],[27,[-39.55555555555554,12.444444444444429]],[28,[54.66666666666663,6.666666666666686]],[29,[-17.77777777777777,-3.555555555555543]],[30,[35.111111111111086,1.333333333333373]],[31,[-42.22222222222223,5.333333333333314]],[32,[55.111111111111086,9.777777777777771]],[33,[-64.44444444444446,3.111111111111157]],[34,[65.7777777777778,12.444444444444445]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0],[27,0],[28,0],[29,0],[30,0],[31,0],[32,0],[33,0],[34,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":34}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2181148486404191200,{"inputs":[{"Node":{"node_id":4331062027851128000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[353.5143520436918,551.6238777493922]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.9777789484064812,1.9777789484064812]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2866788868013687300,{"inputs":[{"Node":{"node_id":8147814087664910471,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2908374490615384600,{"inputs":[{"Node":{"node_id":17339085479159577000,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.00699541,"green":0.019382361,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.00699541,"green":0.019382361,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[95.25925925925924,0.0,0.0,95.25925925925924,28.296296296296305,173.1111111111111]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3471929742275053000,{"inputs":[{"Node":{"node_id":11411423299989983000,"output_index":0}},{"Node":{"node_id":4217566479741824000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3958246774416220000,{"inputs":[{"Node":{"node_id":655907162126315400,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::SplineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4217566479741824000,{"inputs":[{"Node":{"node_id":17790961655412892000,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.023153365,"green":0.76052463,"blue":0.1412633,"alpha":1.0,"linear":true},{"red":0.76052463,"green":0.023153365,"blue":0.023153365,"alpha":1.0,"linear":true},{"red":0.023153365,"green":0.26225072,"blue":0.76052463,"alpha":1.0,"linear":true}],"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"U32":3},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::AssignColorsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4248875763694880300,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":7297408968096180000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4331062027851128000,{"inputs":[{"Node":{"node_id":665049002420596400,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.026241222,"green":0.054480284,"blue":0.084376216,"alpha":1.0,"linear":true},{"red":0.023423795,"green":0.11856167,"blue":0.11146028,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.026241222,"green":0.054480284,"blue":0.084376216,"alpha":1.0,"linear":true},{"red":0.023423795,"green":0.11856167,"blue":0.11146028,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[216.8888888888888,266.66666666666674,-266.66666666666674,216.8888888888888,30.66666666666669,-133.33333333333334]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4534782777857480700,{"inputs":[{"Node":{"node_id":183562335973647870,"output_index":0}},{"Node":{"node_id":14631609508767818000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5250960114142560178,{"inputs":[{"Node":{"node_id":3958246774416220000,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.028994003,"green":0.027362648,"blue":0.041992687,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5737014828407011000,{"inputs":[{"Node":{"node_id":10504222558938851000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[499.21344163872624,106.32837674079803]},"exposed":false}},{"Value":{"tagged_value":{"F64":180.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[55.110312549931045,55.110312549931045]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.1009529959239839e-14,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6559102076450693000,{"inputs":[{"Node":{"node_id":169695252050218443,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7297408968096180000,{"inputs":[{"Node":{"node_id":2908374490615384600,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[353.5143520436944,551.6238777493922]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.9777789484064812,1.9777789484064812]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8147814087664910471,{"inputs":[{"Node":{"node_id":8496292024993914696,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.09305898,"green":0.090841725,"blue":0.13843162,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.09305898,"green":0.090841725,"blue":0.13843162,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[20.0,0.0,0.0,20.0,-10.0,10.600000187754633]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8309013977031955000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8496292024993914696,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8579252446942557840,5702904670777106146,6914816536199142761,17771770146045579307,4317718082554655671],"remove":[],"delta":[[4317718082554655671,[-5.75,-0.4000000059604645]],[5702904670777106146,[5.75,-0.4000000059604645]],[6914816536199142761,[10.0,21.600000381469727]],[8579252446942557840,[-5.75,-0.4000000059604645]],[17771770146045579307,[-10.0,21.600000381469727]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,8579252446942557840],[2,5702904670777106146],[3,6914816536199142761],[4,17771770146045579307],[5,4317718082554655671]],"end_point":[[1,5702904670777106146],[2,6914816536199142761],[3,17771770146045579307],[4,4317718082554655671],[5,8579252446942557840]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10504222558938851000,{"inputs":[{"Node":{"node_id":13571989088655643000,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":1.0,"green":0.8785925,"blue":0.5919783,"alpha":1.0,"linear":true},{"red":0.77582234,"green":0.38642952,"blue":0.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":1.0,"green":0.8785925,"blue":0.5919783,"alpha":1.0,"linear":true},{"red":0.77582234,"green":0.38642952,"blue":0.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.9931515361229228,-1.3444106938820257e-17,1.3444106938820257e-17,0.9931515361229228,-0.05647407504472901,0.0946336801526324]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11411423299989983000,{"inputs":[{"Node":{"node_id":16877573495957869000,"output_index":0}},{"Node":{"node_id":5250960114142560178,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11815560782623298000,{"inputs":[{"Node":{"node_id":16765094648901306000,"output_index":0}},{"Node":{"node_id":13907401402762847509,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12728151724950013388,{"inputs":[{"Node":{"node_id":3958246774416220000,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":105.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13371003476981866000,{"inputs":[{"Node":{"node_id":11815560782623298000,"output_index":0}},{"Node":{"node_id":6559102076450693000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13571989088655643000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::StarNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13907401402762847509,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10666000720855117911,12291367210538906710,11079673538758176715,9852417284720842144,13528392218319754720],"remove":[],"delta":[[9852417284720842144,[-13.314000129699709,30.4060001373291]],[10666000720855117911,[0.0,16.600000381469727]],[11079673538758176715,[0.0,66.8030014038086]],[12291367210538906710,[13.314000129699709,30.4060001373291]],[13528392218319754720,[0.0,16.600000381469727]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,10666000720855117911],[2,12291367210538906710],[3,11079673538758176715],[4,9852417284720842144],[5,13528392218319754720]],"end_point":[[1,12291367210538906710],[2,11079673538758176715],[3,9852417284720842144],[4,13528392218319754720],[5,10666000720855117911]],"handle_primary":[[1,[7.347000122070312,0.0]],[2,[0.0,7.617998123168945]],[3,[-4.480999946594238,0.0]],[4,[0.0,-7.618000030517578]],[5,[0.0,0.0]]],"handle_end":[[1,[0.0,-7.618000030517578]],[2,[4.480999946594238,0.0]],[3,[0.0,7.616998672485352]],[4,[-7.347000122070312,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14631609508767818000,{"inputs":[{"Node":{"node_id":15889416971203222000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[487.1243076693745,127.7443401649906]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[25.393705016577044,25.003032631706716]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14972365039974885000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}},"exposed":true}},{"Node":{"node_id":3471929742275053000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"Generic":"T"}]},"import_index":1}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":2}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":3}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":4}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15889416971203222000,{"inputs":[{"Node":{"node_id":8309013977031955000,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.77582234,"green":0.38642952,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.77582234,"green":0.38642952,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16765094648901306000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":2866788868013687300,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16877573495957869000,{"inputs":[{"Node":{"node_id":4534782777857480700,"output_index":0}},{"Node":{"node_id":5737014828407011000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17339085479159577000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[88.4444444444444,151.55555555555554]],[2,[122.22222222222224,196.4444444444444]],[3,[123.55555555555554,199.1111111111111]],[4,[28.296296296296305,198.96296296296293]],[5,[28.296296296296305,197.33333333333331]],[6,[58.962962962962976,152.74074074074073]],[7,[66.51851851851853,147.1111111111111]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[1,[-32.0,-3.5555555555555145]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[5.92592592592591,45.77777777777786]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17790961655412892000,{"inputs":[{"Node":{"node_id":12728151724950013388,"output_index":0}},{"Node":{"node_id":13371003476981866000,"output_index":0}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[169695252050218443,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[183562335973647870,{"persistent_metadata":{"display_name":"Tree","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[655907162126315400,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,15]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[665049002420596400,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2181148486404191200,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2866788868013687300,{"persistent_metadata":{"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2908374490615384600,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3471929742275053000,{"persistent_metadata":{"display_name":"Lights","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,12]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3958246774416220000,{"persistent_metadata":{"display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,15]}}},"network_metadata":null}}],[4217566479741824000,{"persistent_metadata":{"display_name":"Assign Colors","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Content","input_description":"The content with vector paths to apply the fill and/or stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"Whether to style the fill.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stroke","input_description":"Whether to style the stroke.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_gradient","input_name":"Gradient","input_description":"The range of colors to select from.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":"Whether to reverse the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Randomize","input_description":"Whether to randomize the color selection for each element from throughout the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_seed","input_name":"Seed","input_description":"The seed used for randomization.\nSeed to determine unique variations on the randomized color selection.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_repeat_every","input_name":"Repeat Every","input_description":"The number of elements to span across the gradient before repeating. A 0 value will span the entire gradient once.\n"}}],"output_names":["Content"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4248875763694880300,{"persistent_metadata":{"display_name":"Tree Stump","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4331062027851128000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4534782777857480700,{"persistent_metadata":{"display_name":"Star Base","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5250960114142560178,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5737014828407011000,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6559102076450693000,{"persistent_metadata":{"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7297408968096180000,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8147814087664910471,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8309013977031955000,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8496292024993914696,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10504222558938851000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11411423299989983000,{"persistent_metadata":{"display_name":"Wire (Use Path Tool to Reshape This!)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11815560782623298000,{"persistent_metadata":{"display_name":"Bulb Shape","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12728151724950013388,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13371003476981866000,{"persistent_metadata":{"display_name":"Bulb Glow Gradient","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-29,18]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13571989088655643000,{"persistent_metadata":{"display_name":"Star","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Sides","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius 1","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius 2","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13907401402762847509,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,21]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14631609508767818000,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14972365039974885000,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,9]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15889416971203222000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16765094648901306000,{"persistent_metadata":{"display_name":"Bulb Housing","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16877573495957869000,{"persistent_metadata":{"display_name":"Star","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":10}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17339085479159577000,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17790961655412892000,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[562.4166671673449,-576.1833333333332],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1552.0,4.0],"node_graph_width":1980.0}}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"","document_ptz":{"pan":[-500.157717622685,-499.8045823704831],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/red-dress.graphite b/demo-artwork/red-dress.graphite index 0dfcacaa93..ac5f3383ad 100644 --- a/demo-artwork/red-dress.graphite +++ b/demo-artwork/red-dress.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":2394762731964337494,"output_index":0}}],"nodes":[[1378578509112405,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[602.6886145404666,50.91906721536352]],[2,[599.5281207133061,50.3923182441701]],[3,[590.4855967078191,66.80932784636488]],[4,[594.6410608139003,75.57872275567746]],[5,[593.3924706599604,60.59564090839812]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-1.843621399176982,0.5267489711934203]],[3,[1.9314128943758533,7.3257125438195345]],[4,[0.0,0.0]],[5,[1.248590153939972,-3.9798811156835896]]],"handle_end":[[1,[1.843621399176982,-0.5267489711934203]],[2,[-2.7532629181224593,-10.4429315732828]],[3,[0.0,0.0]],[4,[-1.704168058538812,5.432035686592322]],[5,[-4.379820149367788,0.9754610577655498]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[172538270105470471,{"inputs":[{"Node":{"node_id":9276497172451351253,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[2.170365521878466,0.0,0.0,2.170365521878466,604.9565968314213,108.54930650815425]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[314278016428495768,{"inputs":[{"Node":{"node_id":6282972142629473139,"output_index":0}},{"Node":{"node_id":5020096817747898028,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[421715625023770179,{"inputs":[{"Node":{"node_id":3670529450440935325,"output_index":0}},{"Node":{"node_id":3150436463719911922,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[431994205232245356,{"inputs":[{"Node":{"node_id":12387541320114693418,"output_index":0}},{"Node":{"node_id":14894569344576297448,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[454416440369338250,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[696.0,593.3333333333333]],[2,[733.7777777777778,518.6666666666666]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-18.666666666666515,26.66666666666663]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[501401493219507773,{"inputs":[{"Node":{"node_id":9425359632144678256,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[15.687661979265044,0.0,0.0,15.687661979265044,606.9205403814434,96.19238853662318]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[514796034658094296,{"inputs":[{"Node":{"node_id":13352561089252322209,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[140.4789165897198,0.0,0.0,140.4789165897198,611.9655278547245,882.4444444444445]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[541002100261582638,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[456.88888888888886,483.55555555555554]],[2,[536.8888888888889,544.4444444444445]],[3,[609.7777777777777,559.5555555555555]],[4,[648.4444444444443,543.5555555555555]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[25.777777777777715,11.555555555555545]],[3,[20.0,-7.555555555555543]]],"handle_end":[[1,[-25.777777777777715,-11.555555555555545]],[2,[-20.0,7.555555555555543]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[542361600097372754,{"inputs":[{"Node":{"node_id":17971411534648521628,"output_index":0}},{"Node":{"node_id":6867142265138950838,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[581013017684525986,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[803.5555555555554,878.6666666666665]],[2,[852.0,631.1111111111111]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-41.77777777777783,81.77777777777771]]],"handle_end":[[1,[-37.77777777777783,80.88888888888903]],[2,[0.0,-0.4444444444443434]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[615144098061106242,{"inputs":[{"Node":{"node_id":14675232891471617236,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[172.1481481481481,0.0,0.0,172.1481481481481,480.7407407407408,924.7160493827162]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[907841922684377912,{"inputs":[{"Node":{"node_id":17336535036064625290,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[14.365902961321694,0.0,0.0,14.365902961321694,677.3739621616585,81.79843186783222]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[952330505278607301,{"inputs":[{"Node":{"node_id":15038739378867834454,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[50.5679012345679,0.0,0.0,50.5679012345679,654.3978052126201,55.92742221093541]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1019037285881657884,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":11481949351661484921,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1157261387411722141,{"inputs":[{"Node":{"node_id":4577174813962563383,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[3.154467730526449,0.0,0.0,3.154467730526449,680.5268405773035,81.15750515555649]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1162381870526064378,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":9271343782272072828,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1167210731467447244,{"inputs":[{"Node":{"node_id":16551385471328831128,"output_index":0}},{"Node":{"node_id":10432831427187785843,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1204243038352113866,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[808.8888888888889,832.2962962962965]],[2,[837.3333333333334,653.6296296296296]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-26.22222222222217,80.29629629629608]]],"handle_end":[[1,[-22.22222222222217,79.40740740740739]],[2,[0.0,-0.4444444444443434]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1235106489581249820,{"inputs":[{"Node":{"node_id":3970516859959908758,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1272070255512697108,{"inputs":[{"Node":{"node_id":14012648643507848353,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[5.636213991769523,0.0,0.0,5.636213991769523,610.080658436214,30.724285999066343]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1384427686127078856,{"inputs":[{"Node":{"node_id":17064046832210629373,"output_index":0}},{"Node":{"node_id":17529660518597229229,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1621196991038859321,{"inputs":[{"Node":{"node_id":15857077552290328068,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1659518581611333812,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"delta":[[1,[889.8106995884773,368.4609053497942]],[2,[913.2510288065844,355.55555555555554]],[3,[917.991769547325,333.4320987654321]],[4,[869.1358024691356,247.17695473251027]],[5,[838.3209876543208,205.6954732510288]],[6,[812.2469135802468,182.5185185185185]],[7,[773.7942386831274,177.119341563786]],[8,[809.349794238683,192.0]],[9,[838.4526748971191,213.46502057613168]],[10,[856.2304526748969,234.40329218106996]],[11,[865.1851851851853,248.6255144032922]],[12,[858.1618655692731,310.6063100137174]],[13,[872.1207133058986,331.2373113854595]],[14,[885.9039780521264,331.0617283950617]],[15,[872.9108367626887,333.08093278463645]],[16,[854.5185185185187,346.46913580246917]],[17,[866.172839506173,375.11111111111114]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,1]],"handle_primary":[[1,[9.349794238683105,-4.213991769547306]],[2,[7.637860082304428,-3.423868312757179]],[3,[-10.72985850116538,-29.20905925317203]],[4,[-8.03292181069969,-10.008230452674894]],[5,[-6.320987654321016,-8.164609053497912]],[6,[-10.930041152263357,-4.213991769547334]],[7,[6.584362139917744,1.0534979423868265]],[8,[14.748971193415628,7.242798353909478]],[9,[6.189300411522595,6.97942386831275]],[10,[7.506172839506121,6.452674897119351]],[11,[1.9314128943758533,32.395061728395035]],[12,[6.935528120713343,13.080932784636502]],[13,[7.111111111111086,-2.72153635116598]],[14,[-5.267489711934104,0.0]],[15,[-5.267489711934104,1.4924554183813257]],[16,[0.0,0.0]],[17,[4.279835390946232,0.32921810699582466]]],"handle_end":[[1,[-7.637860082304542,3.423868312757179]],[2,[7.1111111111111995,19.35802469135808]],[3,[8.03292181069969,10.008230452674894]],[4,[6.320987654321016,8.164609053497912]],[5,[10.930041152263357,4.213991769547334]],[6,[0.0,0.0]],[7,[-14.748971193415628,-7.242798353909478]],[8,[-6.189300411522595,-6.97942386831275]],[9,[-7.506172839506121,-6.452674897119351]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[5.267489711934104,-1.4924554183813257]],[15,[0.0,0.0]],[16,[-8.098765432098958,-2.1728395061728634]],[17,[-9.349794238683105,4.213991769547306]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":17}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1661691009086487874,{"inputs":[{"Node":{"node_id":14797986717815207528,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1689789805659535712,{"inputs":[{"Node":{"node_id":15637103575662751567,"output_index":0}},{"Node":{"node_id":11590691579869262546,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1713644030979611623,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[404.0,882.6666666666666]],[2,[321.33333333333326,1022.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[30.96296296296316,-100.2222222222224]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1785173043494067496,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[566.6666666666666,576.0]],[2,[636.4444444444443,579.5555555555555]],[3,[712.0,519.1111111111111]],[4,[770.2222222222222,459.1111111111111]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[31.1111111111112,-17.33333333333337]],[3,[18.22222222222217,-21.777777777777715]]],"handle_end":[[1,[-31.1111111111112,17.33333333333337]],[2,[-18.22222222222217,21.777777777777715]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1806828617441445250,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[395.3333333333333,758.0]],[2,[304.6666666666667,765.3333333333333]],[3,[147.33333333333334,814.0000000000001]],[4,[32.0,1025.3333333333333]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[-32.666666666666686,0.6666666666667425]],[3,[-50.13723402627032,36.301698579412914]]],"handle_end":[[1,[32.666666666666686,-0.6666666666667425]],[2,[50.137234026270335,-36.301698579412914]],[3,[-0.6666666666666892,-122.66666666666686]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1869448627329502330,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":3827449344952693766,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1889157037801767612,{"inputs":[{"Node":{"node_id":17324767436949538365,"output_index":0}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":18},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1984475088429379731,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":1621196991038859321,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2044103368441997753,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[710.5185185185186,302.2222222222223]],[2,[723.3580246913581,337.97530864197535]],[3,[747.6543209876543,394.6666666666667]],[4,[796.4444444444446,278.12345679012356]],[5,[793.6790123456792,258.7654320987655]],[6,[756.7407407407409,223.40740740740748]],[7,[710.7160493827162,200.09876543209884]],[8,[694.5185185185187,204.8395061728396]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-5.135802469135797,-10.271604938271594]],[6,[-22.518518518518476,-12.641975308641976]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"handle_end":[[1,[1.3827160493826796,-12.641975308641976]],[2,[-10.864197530864203,-35.5555555555556]],[3,[-12.049382716049422,68.54320987654324]],[4,[5.135802469135797,10.271604938271594]],[5,[22.518518518518476,12.641975308641976]],[6,[0.0,0.0]],[7,[8.117474523314513,-0.7895812719984008]],[8,[7.111111111110972,-82.76543209876547]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2087303479944421366,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[365.6296296296296,1025.4814814814813]],[2,[443.2592592592592,882.0740740740739]],[3,[368.59259259259255,1025.1851851851852]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[-48.59259259259255,50.07407407407413]],[2,[31.111111111111143,-96.29629629629642]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2126710823743005151,{"inputs":[{"Node":{"node_id":14831840560430171946,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[102.21242730333596,0.0,0.0,102.21242730333596,791.5488895690917,768.4444444444443]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2175432926627256613,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":14982414026754548178,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2282726379014798660,{"inputs":[{"Node":{"node_id":454416440369338250,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2394762731964337494,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":4422453582814483232,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,1024.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Node":{"node_id":6,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":4}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":7,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},{"Concrete":{"name":"core_types::list::List"}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6,{"inputs":[{"Node":{"node_id":5,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::TranslateFootprintNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7,{"inputs":[{"Node":{"node_id":2,"output_index":0}},{"Value":{"tagged_value":{"U32":1},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2397243911096708995,{"inputs":[{"Node":{"node_id":10587073897090054035,"output_index":0}},{"Node":{"node_id":7505360855062237520,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2422139482859833437,{"inputs":[{"Node":{"node_id":14537754528543289381,"output_index":0}},{"Node":{"node_id":172538270105470471,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2440895173483452224,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[93.037037037037,526.8148148148147]],[2,[30.814814814814767,578.0740740740739]],[3,[33.18518518518515,636.148148148148]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[-9.185185185185162,39.703703703703695]]],"handle_end":[[1,[9.185185185185162,-39.703703703703695]],[2,[0.0,0.0]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2594533001540454577,{"inputs":[{"Node":{"node_id":15518174914032911052,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2641530639940889619,{"inputs":[{"Node":{"node_id":5174744389209053970,"output_index":0}},{"Node":{"node_id":14539627480594383748,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2659768650911099730,{"inputs":[{"Node":{"node_id":13045087323693407920,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2660652185019504730,{"inputs":[{"Node":{"node_id":1806828617441445250,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2682920349304670808,{"inputs":[{"Node":{"node_id":10928540355449103287,"output_index":0}},{"Node":{"node_id":16324258033206362312,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2698266912167150713,{"inputs":[{"Node":{"node_id":3165571685352930240,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[3.0300890699983256,0.0,0.0,3.0300890699983256,639.0431812985823,145.8916382921529]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2780251074492832077,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[620.0443231093315,208.38630063890184]],[2,[644.0435005900861,214.94345295604788]],[3,[679.189837009989,239.99177480754585]],[4,[654.5349442975197,224.51689533908117]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[17.048596024579638,8.262011919603992]],[3,[0.0,0.0]],[4,[-14.688021190407198,-10.884872846462486]]],"handle_end":[[1,[-9.660678057982182,-4.68171321271447]],[2,[-15.868308607493532,-9.835728475719122]],[3,[13.4932102981968,9.999432631699392]],[4,[0.1311430463429133,0.13114304634288487]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2878992817082507910,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[777.4814814814814,867.5555555555555]],[2,[738.074074074074,1027.2592592592591]],[3,[741.6296296296296,1027.5555555555557]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-25.185185185185105,132.14814814814804]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2959546142916532439,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3121275823460307102,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[705.7777777777778,698.6666666666666]],[2,[612.0,780.0]],[3,[452.88888888888886,1025.3333333333333]],[4,[449.77777777777777,1025.7777777777778]],[5,[595.5555555555555,791.1111111111111]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-35.111111111111086,34.66666666666663]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[54.93054949731868,-52.22097082256312]]],"handle_end":[[1,[35.111111111111086,-34.66666666666663]],[2,[59.111111111111086,-144.8888888888889]],[3,[0.0,0.0]],[4,[-99.11111111111104,94.22222222222229]],[5,[-1.1368683772161605e-13,-0.5925925925926094]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3150436463719911922,{"inputs":[{"Node":{"node_id":18214377096178867498,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3165571685352930240,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[639.0431812985823,135.02706332876082]],[2,[641.3926773385256,156.76403071818197]],[3,[642.0732703685807,156.78028060137643]],[4,[641.1783537148203,135.11412115589184]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-0.4020858660272779,-10.361367902183218]],[4,[0.0,0.0]]],"handle_end":[[1,[-0.08991158554488266,-10.211393405397416]],[2,[-0.29793124344723765,0.12588207707705124]],[3,null],[4,[1.0850699611588652,-0.2123114466060372]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3170924135668664007,{"inputs":[{"Node":{"node_id":4787732047489141819,"output_index":0}},{"Node":{"node_id":13444661581815146533,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3226457726231232839,{"inputs":[{"Node":{"node_id":4493274523708782092,"output_index":0}},{"Node":{"node_id":7922156219537051964,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3406722917122601552,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3414873131936208778,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[761.7777777777777,737.3333333333333]],[2,[697.7777777777777,954.2222222222222]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[26.22222222222217,-158.66666666666652]],[2,[-40.0,81.33333333333326]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3535178979443201645,{"inputs":[{"Node":{"node_id":12838133055063962839,"output_index":0}},{"Node":{"node_id":8240895922641772563,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3627710206997006419,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[152.49382716049382,262.71604938271605]],[2,[149.94787379972564,262.84773662551436]],[3,[154.2366898148148,257.4780574845679]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-0.2633744855966995,-0.4389574759944139]],[3,[4.31137018907981,-2.5386217986682027]]],"handle_end":[[1,[0.4650366425890411,0.7750610709815646]],[2,[-3.3775342902714556,1.988760370600971]],[3,[2.8421709430404014e-14,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3636653585682494814,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":11565160497886435388,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3649809135741361946,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[787.1111111111111,414.66666666666663]],[2,[841.3333333333333,336.8888888888889]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-21.333333333333258,48.888888888888914]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3670529450440935325,{"inputs":[{"Node":{"node_id":1384427686127078856,"output_index":0}},{"Node":{"node_id":8543051864256131356,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3686761601672683183,{"inputs":[{"Node":{"node_id":4859656512650360562,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3802858053991775169,{"inputs":[{"Node":{"node_id":11058365317860779469,"output_index":0}},{"Value":{"tagged_value":{"F64":25.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3827449344952693766,{"inputs":[{"Node":{"node_id":2440895173483452224,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3955326429435439190,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":18207065424980079673,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3970516859959908758,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[49.77777777777773,636.148148148148]],[2,[78.22222222222219,579.2592592592591]],[3,[170.96296296296293,544.5925925925925]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[27.259259259259252,-24.88888888888891]]],"handle_end":[[1,[-27.259259259259267,24.88888888888891]],[2,[-21.62962962962962,-2.0740740740740193]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3971837674569123876,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":4131094614457622424,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":3.3528},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3992858139802231032,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[634.615454961134,135.08184727937814]],[2,[635.8445358939186,153.225422953818]],[3,[648.9547325102881,151.8792866941015]],[4,[645.384545038866,135.90123456790124]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[6.203932327389111,7.491540923639718]],[3,[1.8143575674440624,-2.575217192501128]],[4,[0.0,0.0]]],"handle_end":[[1,[-6.203932327389111,-7.491540923639718]],[2,[-1.8143575674440624,2.575217192501128]],[3,[6.730681298582454,7.257430269775966]],[4,[9.247370827617717,-0.3511659807956278]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4078100635676202528,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],"remove":[],"delta":[[1,[606.3407407407408,47.76296296296296]],[2,[603.4962962962964,36.977777777777774]],[3,[613.4518518518519,35.43703703703703]],[4,[627.9111111111112,43.73333333333333]],[5,[653.9851851851852,38.99259259259259]],[6,[676.2666666666667,48.47407407407407]],[7,[684.4444444444445,46.1037037037037]],[8,[667.2592592592594,52.029629629629625]],[9,[642.4888888888889,44.44444444444444]],[10,[653.1555555555556,49.89629629629629]],[11,[665.4814814814815,56.05925925925925]],[12,[683.3777777777777,50.48888888888889]],[13,[707.0814814814814,53.33333333333333]],[14,[698.3111111111111,43.61481481481481]],[15,[677.925925925926,46.222222222222214]],[16,[661.0962962962963,35.792592592592584]],[17,[639.762962962963,37.45185185185185]],[18,[621.2740740740741,37.21481481481481]],[19,[613.4518518518519,26.429629629629623]],[20,[601.2444444444444,36.859259259259254]],[21,[605.3925925925926,49.42222222222222]],[22,[607.6312757201646,47.64444444444445]],[23,[608.5794238683127,44.82633744855967]],[24,[605.998353909465,33.79094650205761]],[25,[604.6288065843622,39.321810699588475]],[26,[607.3152263374486,46.38024691358025]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,1]],"handle_primary":[[1,[0.0,0.0]],[2,[2.1333333333333258,-5.68888888888889]],[3,[2.9629629629629335,4.385185185185186]],[4,[6.992592592592587,-0.23703703703703383]],[5,[10.311111111111131,0.5925925925925952]],[6,[4.5037037037037635,1.1851851851851831]],[7,[0.0,0.0]],[8,[-10.666666666666629,-0.7111111111111157]],[9,[0.0,0.0]],[10,[2.251851851851825,2.2518518518518533]],[11,[3.318518518518431,-0.11851851851851336]],[12,[6.9925925925927,-4.740740740740748]],[13,[0.0,0.0]],[14,[-10.90370370370374,-2.6074074074074076]],[15,[-2.844444444444548,-0.829629629629629]],[16,[-5.214814814814758,-1.3037037037037038]],[17,[-6.992592592592587,2.962962962962962]],[18,[-3.437037037037044,-4.148148148148145]],[19,[-3.3185185185185446,-1.1851851851851831]],[20,[-1.5407407407407163,8.651851851851852]],[21,[0.0,0.0]],[22,[0.0,0.0]],[23,[-2.2123456790121736,-2.3967078189300537]],[24,[0.0,0.0]],[25,[0.18814026836287212,2.510418336797158]],[26,[0.0,0.0]]],"handle_end":[[1,[-2.1333333333333258,5.68888888888889]],[2,[-2.9629629629629335,-4.385185185185186]],[3,[-6.992592592592587,0.23703703703703383]],[4,[-10.311111111111131,-0.5925925925925952]],[5,[-4.5037037037037635,-1.1851851851851904]],[6,[0.0,0.0]],[7,[10.666666666666629,0.7111111111111086]],[8,[9.36296296296291,-2.4888888888888943]],[9,[-2.251851851851825,-2.2518518518518533]],[10,[-3.318518518518431,0.11851851851851336]],[11,[-6.9925925925927,4.740740740740748]],[12,[-3.0814814814815463,-9.48148148148148]],[13,[10.90370370370374,2.6074074074074076]],[14,[2.844444444444548,0.829629629629629]],[15,[5.214814814814758,1.3037037037037038]],[16,[6.992592592592587,-2.962962962962962]],[17,[3.437037037037044,4.148148148148145]],[18,[3.3185185185185446,1.1851851851851831]],[19,[1.5407407407407163,-8.651851851851855]],[20,[0.0,0.0]],[21,[0.0,0.0]],[22,null],[23,[0.0,0.0]],[24,[-0.13898543393838736,-1.8545289902200464]],[25,[0.0,0.0]],[26,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":26}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4105711298139980122,{"inputs":[{"Node":{"node_id":1162381870526064378,"output_index":0}},{"Node":{"node_id":1272070255512697108,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4131094614457622424,{"inputs":[{"Node":{"node_id":11356586238302409958,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4222034829755771252,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[165.5308641975309,250.07407407407408]],[2,[155.25925925925927,256.7901234567901]],[3,[152.49382716049382,262.71604938271605]],[4,[161.6241426611797,258.3703703703704]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-1.9753086419753176,0.790123456790127]],[3,[0.0,0.0]],[4,[2.7654320987654444,-3.950617283950635]]],"handle_end":[[1,[1.9753086419753176,-0.790123456790127]],[2,[-0.3950617283950919,-1.7777777777777717]],[3,[-2.7654320987654444,3.950617283950635]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4236845268521674740,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[397.6296296296296,1025.185185185185]],[2,[568.8888888888889,785.4814814814813]],[3,[393.1851851851852,1025.4814814814813]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[-153.1851851851851,112.88888888888891]],[2,[33.777777777777885,-150.22222222222194]],[3,null]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4248321400839848160,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":13231685386999438557,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4265165189651403984,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":10264089084180279094,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4307303572241320716,{"inputs":[{"Node":{"node_id":4265165189651403984,"output_index":0}},{"Node":{"node_id":4572557574846980832,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4332145463108161926,{"inputs":[{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[2.0,0.0,0.0,2.0,-1.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4341772758799935306,{"inputs":[{"Node":{"node_id":1785173043494067496,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4350324834849900949,{"inputs":[{"Node":{"node_id":6672826052605647592,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[31.795691583088797,0.0,0.0,31.795691583088797,585.7296856459923,94.64457512806304]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4372998635946271235,{"inputs":[{"Node":{"node_id":13481022631108980683,"output_index":0}},{"Node":{"node_id":2126710823743005151,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4422453582814483232,{"inputs":[{"Node":{"node_id":4577638792388493935,"output_index":0}},{"Node":{"node_id":431994205232245356,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4453139144069993994,{"inputs":[{"Node":{"node_id":11804065810513502701,"output_index":0}},{"Node":{"node_id":3955326429435439190,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4479074488343511985,{"inputs":[{"Node":{"node_id":11479098559726891734,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33716366,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33716366,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[59.01589131000151,0.0,0.0,59.01589131000151,660.660265203475,82.39719554945893]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4493274523708782092,{"inputs":[{"Node":{"node_id":15239301303367148581,"output_index":0}},{"Node":{"node_id":12880230498984021417,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4572557574846980832,{"inputs":[{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Node":{"node_id":13014916927589286309,"output_index":0}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-60.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4577174813962563383,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[681.3689965686843,65.32157692417977]],[2,[681.8346756482305,95.35045043533154]],[3,[682.7287205627164,97.04177207029592]],[4,[683.6813083078299,66.11925839089211]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-1.544754703853414,-12.605862910106907]],[4,[-1.0406539360374154,-1.1405457962673182]]],"handle_end":[[1,[-2.6406503472093164,-12.592334294499352]],[2,[-0.5302752037773644,-0.69223185792994]],[3,null],[4,[-1.1368683772161605e-13,-1.4210854715202004e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4577638792388493935,{"inputs":[{"Node":{"node_id":3170924135668664007,"output_index":0}},{"Node":{"node_id":6292009934909381201,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4663768795652429571,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[691.7530864197531,86.91358024691357]],[2,[696.6255144032922,96.92181069958846]],[3,[708.8285322359397,101.48696844993144]],[4,[713.0620332266423,107.3007163542143]],[5,[710.8379820149368,102.96966925773508]],[6,[706.633744855967,98.10699588477364]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[6.057613168724288,1.9753086419753032]],[3,[1.7753391251332005,4.7992684042066]],[4,[0.0,0.0]],[5,[-0.8974241731443726,-2.770309404054231]],[6,[-6.847736625514244,-2.3703703703703525]]],"handle_end":[[1,[-6.057613168724288,-1.9753086419753032]],[2,[-0.7886938944185431,-2.1320736046921525]],[3,[-0.9218106995884908,-0.3950617283950635]],[4,[0.786301337230384,2.4272780410153985]],[5,[2.9051419934493197,1.005626074655538]],[6,[1.1851851851849915,8.823045267489718]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4784708315242877950,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[902.6666666666669,446.66666666666674]],[2,[808.5333333333333,683.1555555555556]],[3,[592.4000000000001,852.3999999999999]],[4,[468.14814814814815,1025.382716049383]],[5,[464.5925925925926,1025.382716049383]],[6,[592.0,845.3333333333333]],[7,[807.0666666666666,680.1333333333332]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-81.33333333333337,100.88888888888891]],[3,[-91.33798434535026,86.27035509501377]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[93.94069526511169,-85.35957406301043]],[7,[62.39957279246403,-72.271586423759]]],"handle_end":[[1,[97.81027061870486,-121.32749415544254]],[2,[85.857044886376,-81.09351003138556]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-102.71604938271612,93.3333333333336]],[6,[-87.55555555555577,101.4074074074075]],[7,[-3.466666666666697,51.33333333333326]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4787732047489141819,{"inputs":[{"Node":{"node_id":12062649793560663566,"output_index":0}},{"Node":{"node_id":4248321400839848160,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4832236468224231783,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[232.44444444444443,332.8888888888889]],[2,[369.77777777777777,381.7777777777778]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-73.77777777777777,-53.77777777777777]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4859656512650360562,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[163.33333333333343,1025.3333333333333]],[2,[249.3333333333334,898.0]],[3,[416.66666666666663,803.3333333333333]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[40.66666666666666,-40.666666666666515]]],"handle_end":[[1,[-45.09988913511887,45.099889135118815]],[2,[-77.99999999999994,22.666666666666742]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4909350123806022131,{"inputs":[{"Node":{"node_id":15498700602024283966,"output_index":0}},{"Node":{"node_id":16536768589601337644,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5002654561220917457,{"inputs":[{"Node":{"node_id":11632506522064533635,"output_index":0}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}},{"Value":{"tagged_value":{"U32":206},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5009664118231399060,{"inputs":[{"Node":{"node_id":3226457726231232839,"output_index":0}},{"Node":{"node_id":17207895962122263432,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5020096817747898028,{"inputs":[{"Node":{"node_id":15286091228862934481,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[61.45404663923182,0.0,0.0,61.45404663923182,623.1001371742112,26.10940699520811]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5040278174920511484,{"inputs":[{"Node":{"node_id":14345191642063772510,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[67.53314930555541,0.0,0.0,67.53314930555541,813.3557395833334,758.7930074873279]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5140869461760168364,{"inputs":[{"Node":{"node_id":17118107476414252025,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.0,0.0,0.0,1.0,0.0,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5174744389209053970,{"inputs":[{"Node":{"node_id":12385950900718181935,"output_index":0}},{"Node":{"node_id":5040278174920511484,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5185036609290210853,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"delta":[[1,[687.846364883402,65.58024691358025]],[2,[697.9423868312758,64.79012345679013]],[3,[703.7366255144034,54.694101508916326]],[4,[704.9657064471878,54.25514403292179]],[5,[705.102270995275,59.269013869836904]],[6,[695.152568206066,67.34583142813594]],[7,[701.785703398872,67.26779454351473]],[8,[709.8600823045268,50.83127572016461]],[9,[702.2222222222223,38.38683127572017]],[10,[696.5925925925927,33.728395061728385]],[11,[697.7283950617284,31.30864197530864]],[12,[698.2935528120714,34.35573845450388]],[13,[706.9556470050298,39.272062185642426]],[14,[711.9695168419447,48.57796067672611]],[15,[703.604938271605,68.21399176954733]],[16,[713.7448559670781,60.37860082304528]],[17,[713.3351623228167,47.46593507087334]],[18,[716.7736625514402,54.9135802469136]],[19,[705.9094650205762,70.25514403292182]],[20,[716.6907483615302,62.66361835086114]],[21,[716.1444901691814,49.82655083066605]],[22,[719.6171315348269,59.659198292943145]],[23,[711.5061728395062,69.99176954732509]],[24,[719.0123456790122,66.6337448559671]],[25,[719.8512421886905,54.19661636945587]],[26,[722.5825331504344,57.31809175430575]],[27,[718.680688919372,68.71147690900777]],[28,[702.2539247065995,73.00350556317633]],[29,[694.0600518213687,74.40816948635879]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,1]],"handle_primary":[[1,[0.0,0.0]],[2,[1.5646505637769224,-1.2302214356413188]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-1.1705532693187024,3.0044200579180043]],[6,[0.0,0.0]],[7,[3.3946044810244302,-1.8728852309099435]],[8,[1.1368683772161605e-13,-7.4135040390184415]],[9,[-3.823807346440958,-1.6387745770461848]],[10,[-0.04481007342064913,-1.8372595419893116]],[11,[0.0,0.0]],[12,[1.5089163237310004,2.3850022862368547]],[13,[2.1939750755697105,1.3128956217623369]],[14,[0.9193720469440904,5.347965249199831]],[15,[0.0,0.0]],[16,[2.9207548934437,-5.774876595401999]],[17,[0.0,0.0]],[18,[-0.7242798353908029,5.860082304526735]],[19,[0.0,0.0]],[20,[2.536198750190465,-6.516079865874104]],[21,[0.0,0.0]],[22,[-1.7948483462886315,6.047858558146615]],[23,[0.0,0.0]],[24,[2.106995884773596,-3.0044200579180256]],[25,[0.0,0.0]],[26,[0.8664211612748431,3.3573819999397045]],[27,[-4.128769232802142,3.294230770852593]],[28,[-7.920532726374063,-0.13055823175342596]],[29,[0.0,0.0]]],"handle_end":[[1,[-2.555707971345896,2.0094497789970944]],[2,[0.5267489711934559,6.320987654320987]],[3,[0.0,0.0]],[4,[1.1705532693187024,-3.0044200579180043]],[5,[6.516079865874076,-2.4581618655692807]],[6,[-3.208476806721251,1.7701941002599142]],[7,[-1.1368683772161605e-13,8.389895136005812]],[8,[5.150019007352512,2.2071510031511608]],[9,[0.04481007342064913,1.837259541989333]],[10,[0.0,0.0]],[11,[-0.8654907204776237,-1.3679998781853442]],[12,[-3.679926840420876,-2.202103337905797]],[13,[-0.7923207898123792,-4.608911119518574]],[14,[7.30864197530866,-5.333333333333336]],[15,[-3.84819387288519,7.608596250571544]],[16,[1.1705532693187024,1.8728852309099224]],[17,[0.667740598959881,-5.402628482494777]],[18,[9.169333942996444,-4.409083981100437]],[19,[-2.536198750190465,6.516079865874104]],[20,[1.638774577046206,1.5607376924249363]],[21,[1.7948483462886315,-6.047858558146615]],[22,[2.731290961743639,-1.326627038561199]],[23,[-2.1028230213785264,2.9984698638176326]],[24,[2.980033531474078,4.338363054412447]],[25,[-0.6242950769700428,-2.419143423258646]],[26,[3.66773357719876,-2.926383173296756]],[27,[7.101356500533598,0.11705532693187592]],[28,[0.0,0.0]],[29,[0.009754610577488164,0.048773052888265056]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0],[27,0],[28,0],[29,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":29}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5213978458941436169,{"inputs":[{"Node":{"node_id":13261814586176172586,"output_index":0}},{"Value":{"tagged_value":{"F64":7.0},"exposed":false}},{"Value":{"tagged_value":{"U32":10},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5269304445610080925,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":3686761601672683183,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5278509881589546420,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[899.1111111111111,600.0000000000001]],[2,[824.4444444444445,850.2222222222223]],[3,[823.7037037037037,861.8666666666667]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[39.55555555555554,-105.8222222222222]],[2,[0.0,0.0]],[3,[-26.31111111111113,120.79999999999984]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5302437193964714993,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":1235106489581249820,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5326536612985524219,{"inputs":[{"Node":{"node_id":15798070933198867970,"output_index":0}},{"Value":{"tagged_value":{"F64":27.0},"exposed":false}},{"Value":{"tagged_value":{"U32":9},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5455777299776842371,{"inputs":[{"Node":{"node_id":9470742171134780193,"output_index":0}},{"Node":{"node_id":7385465194555106679,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5471152581000334146,{"inputs":[{"Node":{"node_id":12761901161949743155,"output_index":0}},{"Node":{"node_id":952330505278607301,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5555007473125503522,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[721.7241274196006,63.248894985520494]],[2,[724.7285474775185,66.64349946654472]],[3,[723.7140679774425,72.106081390032]],[4,[725.0797134583142,72.96448712086573]],[5,[726.0551745160798,67.30681298582532]],[6,[724.0262155159273,62.468526139308025]],[7,[722.6215515927449,59.58116140832189]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.546258192348887,2.106995884773667]],[3,[-1.287608596250493,1.7558299039780536]],[4,[0.6633135192806776,-0.8584057308337094]],[5,[-0.585276634659408,-3.8628257887517066]],[6,[-0.03901844231063478,-1.2485901539399509]],[7,[-1.014479500076277,0.3901844231062413]]],"handle_end":[[1,[-0.501794076076294,-1.9354914362939013]],[2,[1.852405339488314,-2.526007281120613]],[3,[-0.6633135192806776,0.8584057308337094]],[4,[0.585276634659408,3.8628257887517066]],[5,[0.03901844231063478,1.2485901539399509]],[6,[1.014479500076277,-0.39018442310623414]],[7,[0.07803688462126956,-0.03901844231062768]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5861306074868809692,{"inputs":[{"Node":{"node_id":10190227675276560561,"output_index":0}},{"Node":{"node_id":3636653585682494814,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6124821161363551058,{"inputs":[{"Node":{"node_id":10420981328998103391,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6282972142629473139,{"inputs":[{"Node":{"node_id":15815816861435910950,"output_index":0}},{"Node":{"node_id":15578929303912288394,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6292009934909381201,{"inputs":[{"Node":{"node_id":10424806499648491677,"output_index":0}},{"Node":{"node_id":9778375740427894463,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6416452251137958677,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":9374264173303233490,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[6532401937876437300,{"inputs":[{"Node":{"node_id":3992858139802231032,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6580280438672662494,{"inputs":[{"Node":{"node_id":15395954548128560685,"output_index":0}},{"Node":{"node_id":14598755603287563819,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6645255982686652881,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6666260895482068061,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[643.0921942512911,135.30336230847865]],[2,[645.6821893629258,155.3850506865855]],[3,[646.4033730994855,154.80329633678198]],[4,[645.3845450388659,135.9012345679012]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-0.2558402858584259,-10.083527774255913]],[4,[0.0,0.0]]],"handle_end":[[1,[-0.05703059647760256,-13.444628325495556]],[2,[-0.3446760851414865,0.611494768909921]],[3,[0.0,0.0]],[4,[1.68322954928135,-0.022087435068414152]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6672826052605647592,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[617.5253772290811,122.03017832647464]],[2,[614.2716726786227,123.52371759047573]],[3,[605.4979423868314,125.19067215363512]],[4,[600.0548696844994,115.53360768175584]],[5,[603.127572016461,99.64334705075449]],[6,[594.172839506173,82.87517146776406]],[7,[591.0123456790125,60.40054869684499]],[8,[585.8326474622772,72.60356652949247]],[9,[593.3827160493829,85.77229080932784]],[10,[599.4403292181071,108.68587105624144]],[11,[599.381801554641,127.00502972107913]],[12,[613.7991159884164,125.99055022100288]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-1.2820759681926577,0.7008681959453185]],[3,[-4.594421582076166,-1.1705532693187024]],[4,[0.8779149519890552,-4.477366255144034]],[5,[-0.8779149519890552,-4.477366255144048]],[6,[-6.145404663923159,-8.076817558299041]],[7,[0.0,0.0]],[8,[0.6346981736430735,5.019885555177211]],[9,[3.599451303154978,4.477366255144034]],[10,[-2.575217192501441,8.77914951989024]],[11,[3.960543177125487,4.094798878044912]],[12,[2.3801249809480396,-1.7168114616673904]]],"handle_end":[[1,[1.3006147436874471,-0.7110027265491681]],[2,[3.396564570446685,0.8653667695405147]],[3,[-0.8779149519890552,4.477366255144034]],[4,[0.8779149519890552,4.47736625514402]],[5,[6.145404663923159,8.076817558299041]],[6,[-6.057613168724288,9.305898491083669]],[7,[-0.9657064471879266,-7.637860082304528]],[8,[-3.599451303154978,-4.477366255144034]],[9,[3.3684073442221916,-11.48320685530176]],[10,[-4.118548609866821,-4.258160427150372]],[11,[-2.036412917146322,1.4688880058104417]],[12,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6749771744300551215,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[589.3333333333333,1025.3333333333333]],[2,[660.4444444444443,878.2222222222222]],[3,[726.6666666666666,765.3333333333333]],[4,[620.8888888888888,943.5555555555557]],[5,[585.3333333333333,1025.7777777777778]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[31.11111111111109,-50.66666666666663]],[3,[0.0,0.0]],[4,[-29.333333333333258,59.11111111111097]],[5,[0.0,0.0]]],"handle_end":[[1,[-31.863450886870623,51.89190573004646]],[2,[0.0,0.0]],[3,[29.333333333333258,-59.1111111111112]],[4,[0.0,0.0]],[5,[-0.4444444444443434,0.8888888888889142]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6867142265138950838,{"inputs":[{"Node":{"node_id":4784708315242877950,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[438.092053808256,0.0,0.0,438.092053808256,464.5925925925926,736.0246913580248]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[6973438081601736688,{"inputs":[{"Node":{"node_id":11630078441485655672,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[9.28395061728395,0.0,0.0,9.28395061728395,751.4074074074075,671.3086419753087]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[6988349135757634271,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[189.14614932392712,263.9984322947286]],[2,[188.0493827160494,269.116049382716]],[3,[183.0891632373113,268.771154223006]],[4,[184.5962505715592,263.55006858710567]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[1.552958476004363,1.9059035841873424]],[2,[-1.9972565157751203,0.9588085439937686]],[3,[-0.9800640224909783,-1.3570273385153655]],[4,[1.697261300324044,-1.9917992948792855]]],"handle_end":[[1,[3.459421910557637,-1.6607397492127802]],[2,[1.0091841400482906,1.3973479652491392]],[3,[-1.5959762231368018,1.872937487752267]],[4,[-1.464617942413156,-1.7974856565980986]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7141088190930752823,{"inputs":[{"Node":{"node_id":541002100261582638,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7262199696924786895,{"inputs":[{"Node":{"node_id":14029368390543839187,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7320676248579211727,{"inputs":[{"Node":{"node_id":14817659161913199655,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[70.81481481481478,0.0,0.0,70.81481481481478,725.3333333333333,873.9259259259258]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7385465194555106679,{"inputs":[{"Node":{"node_id":5009664118231399060,"output_index":0}},{"Node":{"node_id":6416452251137958677,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7447657690776686262,{"inputs":[{"Node":{"node_id":3649809135741361946,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7450965328305122110,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":2659768650911099730,"output_index":0}},{"Value":{"tagged_value":{"F64":1.4},"exposed":false}},{"Value":{"tagged_value":{"F64":2.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7466034304713056391,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[635.2478000597847,135.0597939750059]],[2,[635.5072483424783,152.80078149291265]],[3,[636.4372010299622,153.9035515500083]],[4,[637.4252384335797,135.01742888696126]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[1.020097146128478,-12.422679731687992]],[4,[0.0,0.0]]],"handle_end":[[1,[0.4153244360613826,-11.397946559213551]],[2,[-0.5579820762119425,-0.504231587867622]],[3,null],[4,[1.1169817316086892,-0.21205734949143107]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7505360855062237520,{"inputs":[{"Node":{"node_id":17945736750161448391,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[2.3475680335660627,0.0,0.0,2.3475680335660627,687.0851599926896,82.58026181990861]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7525593029671097583,{"inputs":[{"Node":{"node_id":16175421708184657649,"output_index":0}},{"Node":{"node_id":15735375935164094402,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7654665057468818389,{"inputs":[{"Node":{"node_id":17378885078543074499,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[115.75964755734378,0.0,0.0,115.75964755734378,707.5,843.5555555555557]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[7659717355245331967,{"inputs":[{"Node":{"node_id":18422317423856403288,"output_index":0}},{"Node":{"node_id":4479074488343511985,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7747398671834040298,{"inputs":[{"Node":{"node_id":18319784717194273926,"output_index":0}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":47},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7821977654068146599,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[917.0,471.6]],[2,[826.5068586621596,856.9308484975209]],[3,[825.9524005971,863.6469292802573]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[94.89314133784036,-231.73084849752092]],[2,[0.0,0.0]],[3,[-0.39999999999997726,191.19999999999985]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7893851488963635918,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[125.0,420.0]],[2,[24.0,486.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[23.0,-70.0]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7922156219537051964,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":13594670583065022897,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8091904580702893317,{"inputs":[{"Node":{"node_id":15446793500614592278,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[32.09743050235909,0.0,0.0,32.09743050235909,694.3429355281208,85.46502057613168]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8230694129617719636,{"inputs":[{"Node":{"node_id":4909350123806022131,"output_index":0}},{"Node":{"node_id":16805628435335819723,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8240895922641772563,{"inputs":[{"Node":{"node_id":16530658574540156160,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[50.96296296296282,0.0,0.0,50.96296296296282,751.4074074074075,632.9876543209876]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8375495949882478840,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[616.0751917898693,61.31097901742621]],[2,[617.4278311233043,51.042625616013815]],[3,[628.5871056241429,46.71808159325306]],[4,[642.6077325610934,47.29035208047554]],[5,[650.6227709190673,52.93827160493828]],[6,[662.1234567901236,64.96570644718793]],[7,[673.0096021947875,65.84362139917695]],[8,[675.3580246913581,68.74074074074075]],[9,[662.1234567901236,66.9849108367627]],[10,[650.9056546258192,56.62876594015139]],[11,[641.3168724279836,48.02194787379973]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,1]],"handle_primary":[[1,[-0.7315957933242316,0.01300614743686168]],[2,[2.1833209230284183,-3.0691100638496778]],[3,[4.873654303444027,-0.3091793289098348]],[4,[2.784561671457709,0.5265657466421629]],[5,[3.160493827160508,4.6529492455418335]],[6,[5.4430727023319605,2.545953360768181]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[-4.389574759945162,-2.106995884773667]],[10,[-2.0025980353477735,-3.5689865976493422]],[11,[-8.252400548696869,-0.8779149519890339]]],"handle_end":[[1,[-2.4595700304455477,3.4574354386312436]],[2,[-5.145487535686698,0.32642413354457744]],[3,[-2.7845616714574817,-0.5265657466421203]],[4,[-3.160493827160508,-4.6529492455418335]],[5,[-5.4430727023319605,-2.545953360768181]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[4.389574759945162,2.106995884773667]],[9,[2.6272417822486887,4.682213077274824]],[10,[6.086554705109506,0.6475058196925048]],[11,[2.0257074632933154,-0.6893258141543512]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8410534738018320047,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[834.6666666666665,551.8024691358028]],[2,[762.5185185185184,667.5061728395063]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[44.88888888888857,-64.49382716049388]]],"handle_end":[[1,[47.85185185185162,-63.160493827160394]],[2,null]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8413863870096329943,{"inputs":[{"Node":{"node_id":16195626650123806176,"output_index":0}},{"Node":{"node_id":5302437193964714993,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8543051864256131356,{"inputs":[{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Node":{"node_id":5002654561220917457,"output_index":0}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"F64":300.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[8595304668947966919,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[810.1333333333333,731.4666666666668]],[2,[798.4000000000001,879.4666666666668]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[-1.8666666666665608,-67.46666666666658]],[2,[-18.13333333333333,82.66666666666674]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8644924780109919177,{"inputs":[{"Node":{"node_id":10599660455959346550,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8697043784435445845,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"remove":[],"delta":[[1,[699.5555555555554,303.55555555555554]],[2,[701.7777777777777,252.0]],[3,[679.9012345679013,198.716049382716]],[4,[647.5555555555554,171.55555555555557]],[5,[616.4444444444443,170.22222222222223]],[6,[553.7777777777777,195.11111111111111]],[7,[452.0,206.22222222222223]],[8,[413.77777777777777,199.55555555555551]],[9,[326.22222222222223,208.0]],[10,[271.1111111111111,207.55555555555551]],[11,[208.44444444444443,212.0]],[12,[199.11111111111111,214.51851851851853]],[13,[173.03703703703707,226.962962962963]],[14,[155.06172839506175,249.08641975308643]],[15,[155.85185185185185,253.03703703703707]],[16,[172.44444444444446,239.40740740740745]],[17,[183.50617283950615,231.70370370370372]],[18,[195.1604938271605,228.54320987654324]],[19,[205.23456790123456,227.55555555555557]],[20,[217.87654320987656,231.90123456790127]],[21,[216.8888888888889,238.22222222222223]],[22,[195.95061728395063,253.8271604938272]],[23,[185.37661941777165,263.56957780826093]],[24,[188.90085842299663,268.4351595864769]],[25,[201.87654320987656,262.12345679012344]],[26,[227.55555555555557,246.51851851851853]],[27,[251.06172839506175,233.283950617284]],[28,[278.9135802469136,223.80246913580248]],[29,[369.3827160493828,240.19753086419755]],[30,[425.4814814814815,246.71604938271605]],[31,[463.01234567901247,246.71604938271605]],[32,[526.0246913580247,240.79012345679013]],[33,[602.2716049382716,229.5308641975309]],[34,[647.5061728395062,240.79012345679013]],[35,[680.888888888889,281.48148148148147]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29],[30,30],[31,31],[32,32],[33,33],[34,34],[35,35]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,35],[35,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-2.913580246913398,-22.66666666666669]],[3,[-17.576025737442137,-14.306067460708704]],[4,[-10.222222222222172,-3.5555555555555713]],[5,[-12.0,3.555555555555543]],[6,[-23.11111111111109,9.777777777777771]],[7,[-8.444444444444457,-2.2222222222222285]],[8,[-25.33333333333331,1.7777777777778567]],[9,[-30.22222222222223,1.3333333333333712]],[10,[-12.888888888888856,1.7777777777778567]],[11,[0.0,0.0]],[12,[-5.53086419753086,3.3580246913580254]],[13,[-9.28395061728395,7.703703703703695]],[14,[-1.61975308641982,1.935802469135723]],[15,[3.7530864197531177,-1.580246913580254]],[16,[5.530864197530889,-7.111111111111143]],[17,[2.7654320987654444,-0.790123456790127]],[18,[4.148148148148124,-1.3827160493827364]],[19,[4.74074074074079,0.9876543209876728]],[20,[2.3703703703704093,1.185185185185162]],[21,[-3.753086419753061,3.5555555555555713]],[22,[-8.16460905349794,4.4115226337448235]],[23,[-0.9364426154549506,2.4191434232586175]],[24,[3.3430068414448044,-0.5735531240474074]],[25,[4.938271604938279,-3.160493827160451]],[26,[8.493827160493822,-2.765432098765416]],[27,[6.518518518518505,-6.518518518518562]],[28,[14.81481481481478,1.9753086419753176]],[29,[29.4320987654321,3.358024691358054]],[30,[11.061728395061778,0.7901234567900985]],[31,[19.753086419753004,-4.543209876543159]],[32,[23.90123456790127,-2.765432098765416]],[33,[24.098765432098844,-2.5679012345678984]],[34,[10.074074074074131,11.85185185185182]],[35,[10.469135802469168,11.851851851851848]]],"handle_end":[[1,[2.822923929132685,21.961391245287817]],[2,[8.493827160493879,6.913580246913597]],[3,[10.222222222222172,3.5555555555555713]],[4,[12.0,-3.555555555555543]],[5,[23.11111111111109,-9.777777777777745]],[6,[8.444444444444457,2.222222222222257]],[7,[25.33333333333331,-1.777777777777743]],[8,[30.22222222222223,-1.3333333333333712]],[9,[12.888888888888856,-1.777777777777743]],[10,[20.88888888888889,-1.4814814814814952]],[11,[5.530864197530917,-3.3580246913580254]],[12,[9.283950617283978,-7.703703703703695]],[13,[1.4782632300064904,-1.7667048358613044]],[14,[-3.7530864197531177,1.580246913580254]],[15,[-5.530864197530889,7.111111111111086]],[16,[-2.765432098765416,0.790123456790127]],[17,[-4.148148148148152,1.3827160493827648]],[18,[-4.740740740740705,-0.9876543209876728]],[19,[-2.3703703703704093,-1.185185185185162]],[20,[3.753086419753089,-3.5555555555556]],[21,[9.952891875905069,-5.377772223271279]],[22,[0.752878950104872,-1.9449372877709263]],[23,[-1.24660051630255,0.213876804468498]],[24,[-4.938271604938279,3.160493827160451]],[25,[-8.493827160493822,2.765432098765416]],[26,[-6.518518518518505,6.518518518518505]],[27,[-14.81481481481478,-1.9753086419753176]],[28,[-29.4320987654321,-3.358024691357997]],[29,[-11.061728395061778,-0.790123456790127]],[30,[-19.753086419753004,4.543209876543187]],[31,[-23.90123456790127,2.7654320987653875]],[32,[-24.098765432098844,2.5679012345678984]],[33,[-10.074074074074131,-11.851851851851848]],[34,[-10.469135802469168,-11.851851851851848]],[35,[0.0,5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0],[27,0],[28,0],[29,0],[30,0],[31,0],[32,0],[33,0],[34,0],[35,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":35}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8698602280607307123,{"inputs":[{"Node":{"node_id":14098374807212007572,"output_index":0}},{"Node":{"node_id":14285767317419627814,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8699675339613677057,{"inputs":[{"Node":{"node_id":15982852655074258238,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[40.2222222222224,-10.469135802469168]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8766106989344197438,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[197.33333333333337,212.5432098765432]],[2,[172.64197530864195,208.98765432098767]],[3,[153.58712172411558,204.8434307274338]],[4,[146.5679012345679,204.44444444444449]],[5,[155.85185185185185,211.55555555555557]],[6,[184.49382716049385,218.2716049382716]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-7.703703703703667,-1.1851851851851904]],[3,[-5.834035304362487,0.7861989021958493]],[4,[0.0,0.0]],[5,[8.493827160493822,2.3703703703703525]],[6,[3.160493827160479,-0.9876543209876444]]],"handle_end":[[1,[7.703703703703724,1.1851851851852189]],[2,[5.834035304362487,-0.7861989021958493]],[3,[0.0,0.0]],[4,[-8.493827160493794,-2.370370370370381]],[5,[-3.1604938271605363,0.9876543209877012]],[6,[-3.160493827160479,1.9753086419753456]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8814059393325469059,{"inputs":[{"Node":{"node_id":15492651270767932214,"output_index":0}},{"Node":{"node_id":14035980686649077716,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8934999452649011837,{"inputs":[{"Node":{"node_id":16796171662855500935,"output_index":0}},{"Node":{"node_id":16756940771483104467,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9182448229950585507,{"inputs":[{"Node":{"node_id":12496143061817048445,"output_index":0}},{"Node":{"node_id":7320676248579211727,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9271343782272072828,{"inputs":[{"Node":{"node_id":4078100635676202528,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[106.27046609198636,0.0,0.0,106.27046609198636,600.9797653894951,41.120899996830225]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9276497172451351253,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[606.8928516994359,102.3453741807651]],[2,[607.1269623532997,114.75323883554336]],[3,[605.1760402377686,111.78783721993597]],[4,[605.9173906416706,103.71101966163694]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-0.585276634659408,-2.419143423258646]],[4,[0.27360881696279193,-0.7182231445274425]]],"handle_end":[[1,[-1.3656454808717626,-5.306508154244753]],[2,[0.585276634659408,2.4191434232586317]],[3,[-0.6242950769699291,1.6387745770462772]],[4,[0.0,0.03901844231063478]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9371909264427723282,{"inputs":[{"Node":{"node_id":8595304668947966919,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[12.829171621085834,0.0,0.0,12.829171621085834,797.3041617122475,805.4666666666668]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9374264173303233490,{"inputs":[{"Node":{"node_id":1713644030979611623,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9425359632144678256,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[610.2608816540582,107.73159867034722]],[2,[615.0086877000457,93.76131687242795]],[3,[622.6042778031804,84.90413046791649]],[4,[612.3749428440786,88.61088248742568]],[5,[606.9918024691358,101.68414814814815]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[3.21902149062646,-3.511659807956093]],[3,[-0.6242950769699291,-0.9364426154549648]],[4,[-3.0889600162577153,2.952395468170536]],[5,[0.0,0.0]]],"handle_end":[[1,[-3.21902149062646,3.5116598079561214]],[2,[0.15607376924265282,0.7543565513387165]],[3,[2.992367941940074,-2.86007378029646]],[4,[-0.5623782142248501,-6.258066225952547]],[5,[-2.1454520955559246,-3.1101486881290583]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9470742171134780193,{"inputs":[{"Node":{"node_id":15126865253122550765,"output_index":0}},{"Node":{"node_id":10270446074640675342,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9529195152569434392,{"inputs":[{"Node":{"node_id":3121275823460307102,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[256.00000000000006,0.0,0.0,256.00000000000006,449.77777777777777,862.2190365185486]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9684857454501250999,{"inputs":[{"Node":{"node_id":8699675339613677057,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[39.77777777777783,0.0,0.0,39.77777777777783,798.222222222222,587.8024691358025]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9698363115186534174,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":1661691009086487874,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9740500978584792725,{"inputs":[{"Node":{"node_id":14946189826912398678,"output_index":0}},{"Node":{"node_id":10586744777717861556,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9778375740427894463,{"inputs":[{"Node":{"node_id":16137033772363318157,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[32.687652153449335,0.0,0.0,32.687652153449335,688.566255144033,178.46243924343128]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9782123335421401489,{"inputs":[{"Node":{"node_id":11656581020969095354,"output_index":0}},{"Node":{"node_id":1019037285881657884,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9847383247226990698,{"inputs":[{"Node":{"node_id":3627710206997006419,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[5.873866597229892,0.0,0.0,5.873866597229892,149.912263026184,260.06491040411356]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9863310024364795214,{"inputs":[{"Node":{"node_id":5278509881589546420,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[75.40740740740739,0.0,0.0,75.40740740740739,823.7037037037037,730.9333333333334]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9954843247420111867,{"inputs":[{"Node":{"node_id":6988349135757634271,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.14046639231827385,0.1473642955124319]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10086073308516686449,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":3971837674569123876,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10127467043900015225,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[258.00000000000006,994.6666666666664]],[2,[644.0,726.6666666666666]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-328.66666666666674,129.33333333333337]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10133176481349663495,{"inputs":[{"Node":{"node_id":12876462860151722087,"output_index":0}},{"Node":{"node_id":11021243031011826737,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10190227675276560561,{"inputs":[{"Node":{"node_id":2682920349304670808,"output_index":0}},{"Node":{"node_id":16434255153991868080,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10253927692147706615,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":7262199696924786895,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10264089084180279094,{"inputs":[{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Node":{"node_id":5213978458941436169,"output_index":0}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":60.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10270446074640675342,{"inputs":[{"Node":{"node_id":14883504161508594099,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10336592647221792772,{"inputs":[{"Node":{"node_id":16051539163551573193,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[193.3333333333336,0.0,0.0,193.3333333333336,514.6666666666665,897.7777777777777]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10375238420217738812,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":2282726379014798660,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10415872992231003638,{"inputs":[{"Node":{"node_id":8375495949882478840,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[59.8324854389341,0.0,0.0,59.8324854389341,615.525539252424,57.682808471458216]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10420981328998103391,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[859.5555555555554,375.1111111111111]],[2,[844.4444444444443,460.44444444444434]],[3,[694.2222222222222,623.5555555555554]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[-11.999999999999886,30.6666666666668]]],"handle_end":[[1,[11.055745483535702,-28.253571791258253]],[2,[76.88888888888891,-30.666666666666742]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10421722418968896452,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[677.8673982624599,66.19478737997257]],[2,[683.3689986282578,99.49702789208962]],[3,[691.7384545038866,78.07590306355738]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[-0.49434169374126213,0.7369041683249975]],[2,[0.34676700844204333,0.512429191350904]],[3,[0.12630166293718048,-1.7247569518707309]]],"handle_end":[[1,[-7.636184307015128,-11.284244620129414]],[2,[-1.4537474229852023,19.852161212683583]],[3,[5.6142033131263815,-8.368968014727507]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10424806499648491677,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":17147975601187022720,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10432831427187785843,{"inputs":[{"Node":{"node_id":2087303479944421366,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[77.62962962962956,0.0,0.0,77.62962962962956,365.6296296296296,953.7777777777776]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10514847656270897393,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":16339345235172368839,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10586744777717861556,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":11417901103965737900,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10587073897090054035,{"inputs":[{"Node":{"node_id":8814059393325469059,"output_index":0}},{"Node":{"node_id":907841922684377912,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10599660455959346550,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[478.2222222222222,515.1111111111111]],[2,[572.0,570.2222222222222]],[3,[654.6666666666666,546.6666666666666]],[4,[745.3333333333333,471.55555555555554]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[31.555555555555543,7.555555555555543]],[3,[26.222222222222285,-16.0]]],"handle_end":[[1,[-31.555555555555543,-7.555555555555543]],[2,[-26.222222222222285,16.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10619788176782820865,{"inputs":[{"Node":{"node_id":2397243911096708995,"output_index":0}},{"Node":{"node_id":1157261387411722141,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10689298484366290551,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[156.93571992954355,246.07901729349]],[2,[151.22962962962964,252.1283950617284]],[3,[155.85185185185185,253.03703703703707]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[-2.071522398679349,1.8617234472507391]],[2,[-0.4744436253241133,1.2651830008642833]],[3,[1.0949818244169762,-0.3546380887060252]]],"handle_end":[[1,[0.9481481481481068,-2.5283950617284177]],[2,[-1.0949818244169762,0.3546380887060252]],[3,[1.9215307714004553,1.0902372408288272]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10770443343193024138,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[616.0987654320988,23.01234567901235]],[2,[621.0370370370372,23.01234567901235]],[3,[634.172839506173,30.814814814814817]],[4,[656.6913580246915,28.049382716049383]],[5,[671.3086419753088,28.641975308641975]],[6,[656.4609053497943,30.375857338820303]],[7,[634.1618655692731,33.7997256515775]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[1.1851851851851052,1.5802469135802468]],[3,[6.024691358024711,0.4938271604938329]],[4,[4.345679012345727,-0.39506172839505993]],[5,[0.0,0.0]],[6,[-10.31550068587103,2.4142661179698237]],[7,[-6.408779149519887,-0.8340192043895769]]],"handle_end":[[1,[-1.1851851851851052,-1.5802469135802468]],[2,[-6.024691358024711,-0.49382716049382935]],[3,[-4.345679012345727,0.39506172839506704]],[4,[-0.39506172839503506,-0.5925925925925917]],[5,[10.31550068587103,-2.4142661179698237]],[6,[6.408779149519887,0.8340192043895769]],[7,[4.455418381344316,5.4759945130315515]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10792166025753022402,{"inputs":[{"Node":{"node_id":2780251074492832077,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[59.145513900657534,0.0,0.0,59.145513900657534,620.0443231093315,224.18903772322383]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10795820039540504703,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[1,[569.1851851851852,61.629629629629605]],[2,[591.1111111111111,92.44444444444444]],[3,[590.2222222222222,113.18518518518518]],[4,[604.4444444444445,138.96296296296293]],[5,[574.5185185185185,169.18518518518516]],[6,[518.2222222222222,175.7037037037037]],[7,[485.6296296296296,153.48148148148147]],[8,[447.7037037037037,131.25925925925924]],[9,[418.074074074074,116.14814814814814]],[10,[396.14814814814815,88.29629629629629]],[11,[350.8679463145693,59.25925925925925]],[12,[332.131357712622,16.970215357579164]],[13,[376.7623479921926,0.4130988647245317]],[14,[418.0913936876638,12.121582398270874]],[15,[432.1308820290171,20.740740740740748]],[16,[451.9827338808689,43.25925925925927]],[17,[478.3481748953775,55.407407407407405]],[18,[498.66666666666663,63.70370370370368]],[19,[540.4444444444445,70.22222222222221]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,1]],"handle_primary":[[1,[12.848891737595522,5.11227609582204]],[2,[0.0,0.0]],[3,[-6.518518518518476,13.3333333333333]],[4,[18.370370370370324,0.2962962962963047]],[5,[-13.629629629629562,5.925925925925924]],[6,[-14.222222222222172,-11.851851851851848]],[7,[-15.407407407407447,4.444444444444457]],[8,[-9.481481481481524,-12.740740740740762]],[9,[-13.629629629629562,-7.407407407407419]],[10,[-13.333333333333371,-8.59259259259261]],[11,[-11.259259259259125,-10.962962962962962]],[12,[4.019883543587866,-14.744727738229416]],[13,[41.32904569547122,11.708483533546342]],[14,[0.0,0.0]],[15,[20.148148148148152,6.8148148148148096]],[16,[7.703703703703695,6.814814814814817]],[17,[10.962962962963047,12.148148148148124]],[18,[13.333333333333371,4.148148148148152]],[19,[11.555555555555545,-3.851851851851848]]],"handle_end":[[1,[-24.88888888888891,-10.666666666666655]],[2,[6.518518518518476,-13.333333333333314]],[3,[-18.370370370370324,-0.2962962962963047]],[4,[13.629629629629562,-5.925925925925924]],[5,[14.222222222222172,11.85185185185182]],[6,[15.407407407407334,-4.444444444444457]],[7,[9.481481481481524,12.740740740740762]],[8,[13.629629629629562,7.407407407407419]],[9,[13.333333333333371,8.59259259259261]],[10,[11.259259259259238,10.962962962963076]],[11,[-2.7704748413796665,10.16196036497552]],[12,null],[13,null],[14,[-20.14814814814821,-6.814814814814827]],[15,[-7.703703703703695,-6.8148148148148096]],[16,[-10.96296296296299,-12.148148148148188]],[17,[-13.333333333333371,-4.148148148148152]],[18,[-11.555555555555545,3.851851851851848]],[19,[-12.030418259761518,-4.786624476892754]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10860592954464951000,{"inputs":[{"Node":{"node_id":4236845268521674740,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[175.7037037037037,0.0,0.0,175.7037037037037,393.1851851851852,905.4814814814812]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10918055532782314571,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":7447657690776686262,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10928540355449103287,{"inputs":[{"Node":{"node_id":18190631752493248867,"output_index":0}},{"Node":{"node_id":12554368619682347699,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11021243031011826737,{"inputs":[{"Node":{"node_id":16446146761452576438,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.0338089636220242,0.0,0.0,1.0338089636220242,0.020141360952104084,0.3178290940614066]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11025165626998987360,{"inputs":[{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Node":{"node_id":5326536612985524219,"output_index":0}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-15.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11058365317860779469,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[181.0,1023.0]],[2,[242.0,917.0]],[3,[352.0,833.0]],[4,[397.3333333333333,770.6666666666666]],[5,[479.00000000000006,817.0]],[6,[368.0,902.6666666666669]],[7,[311.3333333333333,1018.6666666666666]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[40.0718943376238,-39.16116946631416]],[3,[37.4110841377784,-16.935189837826556]],[4,[0.0,0.0]],[5,[-35.31654570364651,23.463149348287175]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[1,[-40.071894337623746,39.16116946631416]],[2,[-37.4110841377784,16.935189837826556]],[3,[0.0,0.0]],[4,[35.31654570364611,-23.463149348286947]],[5,[45.99999999999994,-52.00000000000023]],[6,[18.0,-55.33333333333326]],[7,[0.0,1.3333333333337123]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11194653561109699287,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[604.3716161316235,95.4260819221956]],[2,[607.4000914494741,86.85505258344766]],[3,[623.4951989026065,81.23639689071788]],[4,[605.761316872428,82.28989483310471]],[5,[602.0316509633005,90.5516059992284]],[6,[603.4567901234567,92.83950617283948]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[3.687242798354191,-3.4531321444901835]],[3,[-0.7803688462123546,-2.7117817405883216]],[4,[-3.2460274482192517,2.85650415443304]],[5,[0.0,0.0]],[6,[0.3965701826469967,0.8240731861035471]]],"handle_end":[[1,[-3.3249738510837687,3.113864400221118]],[2,[-1.0144795000761633,1.6192653558908745]],[3,[4.389574759945049,-3.862825788751721]],[4,[-0.10095077423932251,-1.27829797882373]],[5,[-0.3896135191956773,-0.8096172333722365]],[6,[-2.273736754432321e-13,-4.263256414560601e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11199691961479466803,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":7141088190930752823,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11268046366284173800,{"inputs":[{"Node":{"node_id":4453139144069993994,"output_index":0}},{"Node":{"node_id":11616089678400336955,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11356586238302409958,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[811.5555555555555,250.96296296296296]],[2,[783.1111111111111,348.74074074074065]],[3,[732.148148148148,432.2962962962963]],[4,[777.7777777777778,375.7037037037037]],[5,[811.8518518518518,273.18518518518516]],[6,[792.2962962962963,188.74074074074073]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6]],"handle_primary":[[1,[0.0,0.0]],[2,[-14.6604291210798,34.80924611318039]],[3,[0.0,0.0]],[4,[10.310300340717504,-19.181954122264813]],[5,[3.7834358363461433,-27.565032521950258]]],"handle_end":[[1,[14.6604291210798,-34.809246113180336]],[2,[26.666666666666515,-35.555555555555486]],[3,[-12.740740740740875,23.703703703703695]],[4,[-4.148148148148152,30.22222222222223]],[5,[26.074074074074133,33.18518518518516]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11417901103965737900,{"inputs":[{"Node":{"node_id":13269760558336088742,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11451028343967836482,{"inputs":[{"Node":{"node_id":2422139482859833437,"output_index":0}},{"Node":{"node_id":12531351117929704587,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11464423670065789907,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":8644924780109919177,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11479098559726891734,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[660.660265203475,61.39551897576588]],[2,[669.2053040695015,63.20987654320987]],[3,[686.5294924554183,63.38545953360767]],[4,[704.5560128029263,81.29492455418381]],[5,[718.310013717421,90.01554641060812]],[6,[717.9588477366254,99.32144490169182]],[7,[710.5648529187624,103.39887212315196]],[8,[709.979576284103,102.93065081542449]],[9,[717.5491540923639,95.80978509373573]],[10,[712.047553726566,86.56241426611797]],[11,[694.9574759945133,76.78829446730683]],[12,[683.3104709647919,64.0877914951989]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,1]],"handle_primary":[[1,[0.0,0.0]],[2,[5.4430727023319605,-0.6438042981252892]],[3,[3.4531321444902687,2.1655235482396193]],[4,[8.369455875628773,2.867855509830818]],[5,[1.1120256058526363,1.9314128943758817]],[6,[-1.9184335509834227,1.995170893022717]],[7,[-0.585276634659408,-0.4682213077274753]],[8,[0.0,0.0]],[9,[0.17558299039785652,-3.5116598079561214]],[10,[-4.096936442615174,-1.872885230909901]],[11,[-5.618655692729931,-7.257430269775952]],[12,[-12.8760859625055,-0.4682213077274682]]],"handle_end":[[1,[-5.4430727023319605,0.6438042981252892]],[2,[-3.4853769593560173,-2.1857448728164144]],[3,[-8.369455875628773,-2.867855509830818]],[4,[-1.8416562954789697,-3.1986661974113133]],[5,[2.926383173296813,-3.043438500228561]],[6,[1.706505264591101,-0.4025776799149554]],[7,null],[8,[-0.17558299039785652,3.511659807956093]],[9,[4.0931309699032,1.8711455862415676]],[10,[5.464020763447934,7.057693486120044]],[11,[4.036165212980222,0.14676964410837456]],[12,[4.9748513946045705,5.91129401005945]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11481949351661484921,{"inputs":[{"Node":{"node_id":15303587427289959766,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11553850607251055696,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[597.5967078189302,96.04389574759946]],[2,[596.631001371742,112.37311385459536]],[3,[594.085048010974,128.61454046639233]],[4,[608.570644718793,131.2482853223594]],[5,[619.2812071330591,124.6639231824417]],[6,[609.9753086419754,133.5308641975309]],[7,[591.5390946502059,128.7023319615912]],[8,[594.962962962963,111.93415637860085]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-4.126200274348321,7.1111111111111]],[3,[3.5534615822588194,4.6302681223374975]],[4,[4.038408779149563,-1.492455418381354]],[5,[0.0,0.0]],[6,[-7.286694101508829,3.0727023319615796]],[7,[-2.3703703703704377,-6.057613168724245]],[8,[4.1262002743484345,-6.935528120713329]]],"handle_end":[[1,[4.126200274348321,-7.111111111111114]],[2,[-2.8971193415636662,-3.7750342935528063]],[3,[-4.038408779149563,1.492455418381354]],[4,[0.0,0.0]],[5,[7.286694101508829,-3.0727023319615796]],[6,[2.3703703703704377,6.057613168724259]],[7,[-4.1262002743484345,6.935528120713272]],[8,[-0.0877914951989851,0.08779149519889984]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11565160497886435388,{"inputs":[{"Node":{"node_id":7893851488963635918,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11573595155909211511,{"inputs":[{"Node":{"node_id":10127467043900015225,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11590691579869262546,{"inputs":[{"Node":{"node_id":11553850607251055696,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[28.829432541238475,0.0,0.0,28.829432541238475,590.4517745918206,115.51863704018864]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11616089678400336955,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":2660652185019504730,"output_index":0}},{"Value":{"tagged_value":{"F64":1.8},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11630078441485655672,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[760.6913580246915,657.5802469135803]],[2,[751.4074074074075,685.0370370370371]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[4.543209876543187,-10.271604938271594]]],"handle_end":[[1,[7.111111111110972,-8.44444444444457]],[2,null]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11632506522064533635,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[40.66666666666663,1022.6666666666666]],[2,[113.33333333333331,859.3333333333333]],[3,[299.33333333333326,775.3333333333333]],[4,[397.3333333333333,770.6666666666666]],[5,[336.66666666666663,799.3333333333334]],[6,[208.0,903.0]],[7,[145.33333333333331,1022.6666666666666]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[58.666666666666686,-57.33333333333326]],[3,[65.33333333333337,-6.0]],[4,[0.0,0.0]],[5,[-40.66666666666663,12.0]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[1,[-58.666666666666686,57.333333333333144]],[2,[-65.33333333333337,6.0]],[3,[0.0,0.0]],[4,[40.66666666666663,-12.0]],[5,[35.666666666666686,-46.66666666666674]],[6,[18.00000000000003,-55.33333333333326]],[7,[0.0,1.3333333333333712]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11656581020969095354,{"inputs":[{"Node":{"node_id":8413863870096329943,"output_index":0}},{"Node":{"node_id":9698363115186534174,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11659756061767599421,{"inputs":[{"Node":{"node_id":8766106989344197438,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[50.76543209876547,0.0,0.0,50.76543209876547,146.5679012345679,211.41832431557876]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11666664915283969027,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[802.3703703703703,580.9382716049382]],[2,[751.4074074074075,685.0370370370371]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[20.740740740740534,-42.469135802469054]]],"handle_end":[[1,[27.259259259259125,-48.79012345678995]],[2,null]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11677503666435782605,{"inputs":[{"Node":{"node_id":12049041947382267086,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.0,0.0,0.0,1.0,0.0,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11804065810513502701,{"inputs":[{"Node":{"node_id":9782123335421401489,"output_index":0}},{"Node":{"node_id":17133591775058457007,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11899713172487274471,{"inputs":[{"Node":{"node_id":9954843247420111867,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[7.798812655825827,0.0,0.0,7.798812655825827,182.68014787145296,266.0770159687539]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12030171742672119253,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":12801133692316734622,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12049041947382267086,{"inputs":[{"Node":{"node_id":2959546142916532439,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[25.77777777777777,508.44444444444446]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[8.0,8.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12062649793560663566,{"inputs":[{"Node":{"node_id":5455777299776842371,"output_index":0}},{"Node":{"node_id":8934999452649011837,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12131058586835568367,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.6081211287919952,-0.2081641356766983]],[2,[1.0389965338526328,0.5311836299154763]],[3,[0.443655685420585,0.8388279058567918]],[4,[0.022131022857413415,0.4190687668825941]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.297407817404018,0.05174926937677715]],[2,[-0.06483434986356718,0.26682960488486684]],[3,[-0.29501938196342326,-0.04735956037402645]],[4,[0.021131345375600137,-0.27179882337964756]]],"handle_end":[[1,[0.07365905854782184,-0.30314821587423946]],[2,[0.2950193819634199,0.04735956037402589]],[3,[-0.02113134537560013,0.27179882337964756]],[4,[-0.38805268271111915,-0.0675215701634326]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12219771677493189964,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":5140869461760168364,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12224498203743157414,{"inputs":[{"Node":{"node_id":2878992817082507910,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[39.40740740740739,0.0,0.0,39.40740740740739,738.074074074074,947.5555555555557]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12313564802550122052,{"inputs":[{"Node":{"node_id":13557369662261607646,"output_index":0}},{"Node":{"node_id":9684857454501250999,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12385950900718181935,{"inputs":[{"Node":{"node_id":4372998635946271235,"output_index":0}},{"Node":{"node_id":615144098061106242,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12387541320114693418,{"inputs":[{"Node":{"node_id":5471152581000334146,"output_index":0}},{"Node":{"node_id":15460109068588328521,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12428327489525325219,{"inputs":[{"Node":{"node_id":14209241002058525241,"output_index":0}},{"Node":{"node_id":1984475088429379731,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12473080738469616517,{"inputs":[{"Node":{"node_id":17891208858820401648,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[28.44444444444457,0.0,0.0,28.44444444444457,808.8888888888888,742.962962962963]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12496143061817048445,{"inputs":[{"Node":{"node_id":7525593029671097583,"output_index":0}},{"Node":{"node_id":7654665057468818389,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12531351117929704587,{"inputs":[{"Node":{"node_id":11194653561109699287,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[21.474012644365416,0.0,0.0,21.474012644365416,602.0211862582411,87.35532685019162]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12554368619682347699,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":2594533001540454577,"output_index":0}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12594527670567285670,{"inputs":[{"Node":{"node_id":4663768795652429571,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[21.402696806889367,0.0,0.0,21.402696806889367,691.6593364197529,97.10714830056394]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12761901161949743155,{"inputs":[{"Node":{"node_id":7659717355245331967,"output_index":0}},{"Node":{"node_id":8091904580702893317,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12801133692316734622,{"inputs":[{"Node":{"node_id":17699121037850769131,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12838133055063962839,{"inputs":[{"Node":{"node_id":13644138583806412631,"output_index":0}},{"Node":{"node_id":6973438081601736688,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12876462860151722087,{"inputs":[{"Node":{"node_id":10619788176782820865,"output_index":0}},{"Node":{"node_id":10415872992231003638,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12880230498984021417,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":15949658764632267703,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13014628586360765651,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":2175432926627256613,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13014916927589286309,{"inputs":[{"Node":{"node_id":2044103368441997753,"output_index":0}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13035777574951374461,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[896.0,440.44444444444446]],[2,[833.7777777777778,573.3333333333333]],[3,[696.8888888888889,697.3333333333333]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[-68.0,92.88888888888891]]],"handle_end":[[1,[68.0,-92.88888888888891]],[2,[0.0,0.0]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13045087323693407920,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[19.0,494.0]],[2,[227.0,496.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-98.0,-55.0]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13045580349734858212,{"inputs":[{"Node":{"node_id":10795820039540504703,"output_index":0}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13163272246010991228,{"inputs":[{"Node":{"node_id":9740500978584792725,"output_index":0}},{"Node":{"node_id":10253927692147706615,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13231685386999438557,{"inputs":[{"Node":{"node_id":1659518581611333812,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[147.8430026544071,0.0,0.0,147.8430026544071,773.7942386831273,276.1284866093131]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13261814586176172586,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"remove":[],"delta":[[1,[799.1111111111112,188.14814814814815]],[2,[827.2592592592594,206.41975308641975]],[3,[851.1111111111111,237.7777777777778]],[4,[858.6666666666666,268.88888888888886]],[5,[829.8271604938273,345.08641975308643]],[6,[775.5061728395061,429.23456790123464]],[7,[680.4331323644109,506.0568995183343]],[8,[686.5302034429451,490.6109861193811]],[9,[758.716049382716,441.8765432098765]],[10,[755.3580246913581,432.5925925925926]],[11,[719.9999999999999,460.8395061728396]],[12,[715.8518518518517,452.14814814814815]],[13,[736.8888888888889,432.2962962962963]],[14,[782.8148148148148,378.96296296296293]],[15,[817.4814814814815,272.2962962962963]],[16,[809.1851851851852,207.1111111111111]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[9.086419753086489,9.086419753086432]],[4,[-2.5679012345678984,17.77777777777777]],[5,[-31.06481223802939,48.93526760703577]],[6,[-36.541158121167314,42.67873357730855]],[7,null],[8,[37.39536928167615,-11.787670751832536]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[20.148148148148152,-33.481481481481524]],[15,[5.925925925925867,-34.96296296296299]],[16,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-9.086419753086489,-9.086419753086432]],[3,[2.5679012345678984,-17.77777777777777]],[4,[31.06481223802939,-48.93526760703571]],[5,[18.3855550289378,-21.473654506216747]],[6,[22.320987654321016,-14.222222222222342]],[7,null],[8,[-11.555555555555657,17.18518518518522]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[-20.148148148148152,33.481481481481524]],[14,[-5.925925925925867,34.96296296296299]],[15,[6.51851851851859,11.851851851851848]],[16,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":16}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13269760558336088742,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[265.3333333333333,312.0]],[2,[447.1111111111111,332.44444444444446]],[3,[595.1111111111111,439.55555555555554]],[4,[698.2222222222222,483.1111111111111]],[5,[756.4444444444443,438.22222222222223]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,5]],"handle_primary":[[1,[0.0,0.0]],[2,[83.95959630801838,35.04735442215451]],[3,[20.8888888888888,20.444444444444457]],[4,[22.46059594926794,-9.800987323316916]]],"handle_end":[[1,[-96.88888888888886,-40.44444444444446]],[2,[-20.8888888888888,-20.444444444444457]],[3,[-48.888888888888914,21.33333333333331]],[4,[-22.222222222222285,23.111111111111143]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13302269488061286120,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[262.66666666666674,903.3333333333331]],[2,[565.3333333333335,756.6666666666666]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-200.66666666666652,64.66666666666663]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13352561089252322209,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[612.0,1025.3333333333333]],[2,[749.7777777777777,741.7777777777778]],[3,[752.4444444444443,739.1111111111111]],[4,[615.5555555555555,1025.7777777777778]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[-112.0,179.55555555555577]],[2,[0.0,0.0]],[3,[28.000000000000114,-107.55555555555544]],[4,[-0.4444444444444571,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13368990606109678244,{"inputs":[{"Node":{"node_id":421715625023770179,"output_index":0}},{"Node":{"node_id":15961046538654083626,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13444661581815146533,{"inputs":[{"Node":{"node_id":16450742929146919960,"output_index":0}},{"Node":{"node_id":10792166025753022402,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13475705179546695973,{"inputs":[{"Node":{"node_id":11451028343967836482,"output_index":0}},{"Node":{"node_id":501401493219507773,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13481022631108980683,{"inputs":[{"Node":{"node_id":9182448229950585507,"output_index":0}},{"Node":{"node_id":12224498203743157414,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13557369662261607646,{"inputs":[{"Node":{"node_id":3535178979443201645,"output_index":0}},{"Node":{"node_id":15177845878727456758,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13594670583065022897,{"inputs":[{"Node":{"node_id":13302269488061286120,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13644138583806412631,{"inputs":[{"Node":{"node_id":2641530639940889619,"output_index":0}},{"Node":{"node_id":12473080738469616517,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13907578809542898348,{"inputs":[{"Node":{"node_id":12313564802550122052,"output_index":0}},{"Node":{"node_id":15827578515555598997,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[13975451746581400000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[835.7333333333332,786.4000000000001]],[2,[901.6,572.8]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[-22.399999999999977,109.06666666666648]],[2,[47.4666666666667,-108.26666666666664]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14012583111791538162,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[248.00000000000009,884.0]],[2,[380.00000000000006,806.0]],[3,[603.3333333333335,744.6666666666666]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[70.80694036316174,-19.49756328840681]]],"handle_end":[[1,[-92.00000000000006,25.333333333333258]],[2,[-71.33333333333326,24.0]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14012648643507848353,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[610.080658436214,28.760493827160495]],[2,[613.7152263374486,29.076543209876547]],[3,[615.7168724279835,33.05349794238683]],[4,[613.6098765432099,30.393415637860084]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[1.5990193552247547,1.4582133097558128]],[3,[0.0,0.0]],[4,[-1.3168724279836397,-1.343209876543213]]],"handle_end":[[1,[-1.447323438899616,-1.3198753943965968]],[2,[-0.05267489711934559,-0.9218106995884768]],[3,[0.7962610294339356,0.812186250022549]],[4,[0.05267489711934559,0.02633744855966924]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14029368390543839187,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[604.8888888888889,523.5555555555557]],[2,[668.4444444444445,516.4444444444443]],[3,[808.0,413.33333333333337]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[23.1111111111112,-9.7777777777776]]],"handle_end":[[1,[-23.1111111111112,9.7777777777776]],[2,[-59.111111111111086,58.22222222222223]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14035980686649077716,{"inputs":[{"Node":{"node_id":6666260895482068061,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[3.311178848194458,0.0,0.0,3.311178848194458,643.0921942512911,145.3440351187959]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14057307926677215422,{"inputs":[{"Node":{"node_id":5861306074868809692,"output_index":0}},{"Node":{"node_id":7450965328305122110,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14079496619264986678,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[597.2345679012346,77.92592592592592]],[2,[608.9876543209878,75.25925925925925]],[3,[609.2839506172841,76.74074074074073]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[-6.222222222222172,-0.9876543209876588]],[2,[0.0,0.0]],[3,[8.09876543209873,0.2962962962962763]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14098374807212007572,{"inputs":[{"Node":{"node_id":17494926338451345058,"output_index":0}},{"Node":{"node_id":10336592647221792772,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14209241002058525241,{"inputs":[{"Node":{"node_id":16290933138334939444,"output_index":0}},{"Node":{"node_id":10918055532782314571,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14225285635863713990,{"inputs":[{"Node":{"node_id":8410534738018320047,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[25.333333333333485,12.641975308641918]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14285767317419627814,{"inputs":[{"Node":{"node_id":6749771744300551215,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[141.33333333333348,0.0,0.0,141.33333333333348,585.3333333333331,895.6111111111111]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14345191642063772510,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[880.8888888888888,556.4444444444443]],[2,[833.7777777777777,780.4444444444443]],[3,[813.3557395833334,961.1454375]],[4,[838.2222222222222,766.6666666666669]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-9.333333333333371,54.66666666666674]],[3,[0.0,0.0]],[4,[10.643023589139377,-58.51588472312813]]],"handle_end":[[1,[9.333333333333371,-54.66666666666674]],[2,[0.0,0.0]],[3,[-10.643023589139377,58.51588472312813]],[4,[-0.4444444444444571,-0.8888888888888005]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14537754528543289381,{"inputs":[{"Node":{"node_id":1689789805659535712,"output_index":0}},{"Node":{"node_id":17364155187784942740,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14539627480594383748,{"inputs":[{"Node":{"node_id":581013017684525986,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[48.444444444444684,0.0,0.0,48.444444444444684,803.5555555555553,754.8888888888888]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14598755603287563819,{"inputs":[{"Node":{"node_id":7466034304713056391,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[2.1784152500583787,0.0,0.0,2.1784152500583787,635.2478000597847,144.4283523826651]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14675232891471617236,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[652.8888888888889,822.6666666666666]],[2,[480.7407407407408,1026.6666666666663]],[3,[483.9506172839506,1026.7654320987656]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[26.66666666666669,-58.666666666666515]],[2,[0.0,0.0]],[3,[-143.85185185185185,150.07407407407413]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14778750092903591172,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[155.98219408731924,204.757705978404]],[2,[149.0793650793651,202.5537918871252]],[3,[146.5679012345679,204.44444444444449]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[-2.6135873853791907,-0.8494167367814498]],[2,[-2.2695727277346123,-0.643804298125275]],[3,[0.9278738161427498,1.2447087777524644]]],"handle_end":[[1,[1.7022700834823468,0.48287890620272833]],[2,[-1.156966490299823,-1.5520282186949146]],[3,[-0.32172621516085087,3.1233079488176827]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14797986717815207528,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[80.0,557.0]],[2,[425.0,650.0]],[3,[665.7777777777778,658.6666666666667]],[4,[826.6666666666665,552.4444444444443]],[5,[868.0,380.44444444444446]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,5]],"handle_primary":[[1,[134.0,-75.0]],[2,[105.59298295237464,48.735222901095995]],[3,[0.0,0.0]],[4,[59.11111111111131,-70.66666666666652]]],"handle_end":[[1,[-104.0,-48.0]],[2,[0.0,0.0]],[3,[-59.11111111111131,70.66666666666652]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14817659161913199655,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[796.148148148148,723.8518518518517]],[2,[725.3333333333333,985.7777777777776]],[3,[726.8148148148148,1023.9999999999998]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[9.777777777777828,-73.18518518518522]],[2,[0.0,0.0]],[3,[-75.55555555555566,240.59259259259304]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14831840560430171946,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[791.5555555555555,1026.6666666666663]],[2,[831.5555555555555,737.3333333333334]],[3,[889.7777777777777,516.8888888888889]],[4,[893.7613168724276,509.6296296296296]],[5,[833.4814814814815,746.3703703703703]],[6,[793.7777777777777,1027.2592592592591]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[19.555555555555543,-74.66666666666674]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-24.0,92.44444444444446]],[6,[0.0,0.0]]],"handle_end":[[1,[-26.4188207246807,100.8718609487812]],[2,[-22.22222222222217,89.77777777777783]],[3,[0.0,0.0]],[4,[24.0,-92.44444444444446]],[5,[0.0,0.0]],[6,[-0.14814814814815236,0.29629629629675946]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14862049226133442027,{"inputs":[{"Node":{"node_id":16614450796751955858,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[596.154891011329,0.0,0.0,596.154891011329,327.3333333333333,736.3333333333333]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14883504161508594099,{"inputs":[{"Node":{"node_id":13368990606109678244,"output_index":0}},{"Node":{"node_id":11025165626998987360,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14887821801874852671,{"inputs":[{"Node":{"node_id":8230694129617719636,"output_index":0}},{"Node":{"node_id":18279507457571359732,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14888395629683671889,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":4341772758799935306,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14894569344576297448,{"inputs":[{"Node":{"node_id":5555007473125503522,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[4.52049614488817,0.0,0.0,4.52049614488817,721.7241274196006,66.5361619515896]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14946189826912398678,{"inputs":[{"Node":{"node_id":10086073308516686449,"output_index":0}},{"Node":{"node_id":12030171742672119253,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14982414026754548178,{"inputs":[{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Node":{"node_id":13045580349734858212,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-25.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14991324592500870173,{"inputs":[{"Node":{"node_id":542361600097372754,"output_index":0}},{"Node":{"node_id":10860592954464951000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14993053984267866751,{"inputs":[{"Node":{"node_id":13907578809542898348,"output_index":0}},{"Node":{"node_id":9863310024364795214,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15038739378867834454,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[654.3978052126201,51.621399176954746]],[2,[667.4787379972565,58.20576131687244]],[3,[691.5336076817558,52.14814814814816]],[4,[704.965706447188,54.25514403292181]],[5,[704.6145404663924,55.39643347050756]],[6,[687.4951989026064,54.518518518518526]],[7,[662.3868312757203,59.61042524005489]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[6.145404663923159,-1.0534979423868336]],[3,[7.723134415788309,-0.2640387834457485]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[-10.156808190486911,1.6663513437517778]],[7,[-4.546573253919632,-2.2347563451469625]]],"handle_end":[[1,[-5.875074923313605,1.0071557011394745]],[2,[-10.271604938271594,0.35116598079560646]],[3,null],[4,[0.0,0.0]],[5,[11.237311385459408,-1.8436213991769537]],[6,[5.179698216735233,2.5459533607681664]],[7,[0.0,0.08779149519890694]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15126865253122550765,{"inputs":[{"Node":{"node_id":13014628586360765651,"output_index":0}},{"Node":{"node_id":4307303572241320716,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15177845878727456758,{"inputs":[{"Node":{"node_id":14225285635863713990,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[72.14814814814815,0.0,0.0,72.14814814814815,762.5185185185184,609.6543209876545]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15239301303367148581,{"inputs":[{"Node":{"node_id":11268046366284173800,"output_index":0}},{"Node":{"node_id":5269304445610080925,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15286091228862934481,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[623.1001371742112,22.694101508916333]],[2,[627.0946502057614,23.00137174211249]],[3,[638.5953360768175,27.56652949245542]],[4,[665.7229080932784,23.79149519890261]],[5,[684.554183813443,27.654320987654327]],[6,[661.2894375857338,26.381344307270236]],[7,[637.0589849108368,29.980795610425247]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[2.150891632373032,1.5802469135802468]],[3,[5.3991769547326385,0.13168724279836042]],[4,[6.672153635116501,-0.35116598079560646]],[5,[0.0,0.0]],[6,[-11.456790123456813,0.9657064471879302]],[7,[-6.089851956901498,-0.48236451143773706]]],"handle_end":[[1,[-2.150891632373032,-1.5802469135802468]],[2,[-5.486565700800156,-0.13381867562927496]],[3,[-6.672153635116501,0.35116598079560646]],[4,[-0.9218106995884908,-1.0534979423868336]],[5,[11.456790123456813,-0.9657064471879336]],[6,[4.433470507544598,0.35116598079561]],[7,[2.194787379972581,3.906721536351163]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15303587427289959766,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[610.6666666666666,706.6666666666666]],[2,[818.2222222222222,566.2222222222222]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-82.66666666666674,97.77777777777771]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15395954548128560685,{"inputs":[{"Node":{"node_id":13475705179546695973,"output_index":0}},{"Node":{"node_id":16767482995096345179,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15446793500614592278,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[694.3429355281208,73.8326474622771]],[2,[702.244170096022,76.11522633744856]],[3,[722.3484224965707,77.2565157750343]],[4,[725.5967078189301,90.3374485596708]],[5,[718.2222222222222,97.09739368998628]],[6,[724.6310013717421,85.86008230452676]],[7,[718.3100137174213,77.2565157750343]],[8,[697.5034293552812,77.4320987654321]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[5.267489711934218,-0.7023319615912129]],[3,[3.456189131014753,3.3025807251918877]],[4,[-1.9392278971834005,5.143169640356035]],[5,[0.0,0.0]],[6,[-0.7023319615914261,-5.091906721536347]],[7,[-6.236870142765838,-1.74052190030676]],[8,[-3.5116598079559935,-1.6680384087791396]]],"handle_end":[[1,[-5.267489711934218,0.7023319615912129]],[2,[-3.950617283950578,-3.775034293552821]],[3,[2.0192043895747247,-5.355281207133089]],[4,[0.0,0.0]],[5,[0.6823799889585871,4.947254919948108]],[6,[3.7750342935527215,1.0534979423868265]],[7,[3.5116598079559935,1.6680384087791396]],[8,[0.08779149519887142,0.08779149519891405]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15460109068588328521,{"inputs":[{"Node":{"node_id":5185036609290210853,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.79129803,"green":0.6038274,"blue":0.31854683,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.79129803,"green":0.6038274,"blue":0.31854683,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[35.016295332236496,0.0,0.0,35.016295332236496,687.846364883402,52.85840573083371]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15466714490303763249,{"inputs":[{"Node":{"node_id":10514847656270897393,"output_index":0}},{"Node":{"node_id":11659756061767599421,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15492651270767932214,{"inputs":[{"Node":{"node_id":6580280438672662494,"output_index":0}},{"Node":{"node_id":2698266912167150713,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15498700602024283966,{"inputs":[{"Node":{"node_id":15466714490303763249,"output_index":0}},{"Node":{"node_id":9847383247226990698,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15518174914032911052,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[851.5555555555557,370.66666666666663]],[2,[814.2222222222223,498.66666666666663]],[3,[639.1111111111112,614.6666666666666]],[4,[429.7777777777778,551.5555555555555]],[5,[262.6666666666667,423.5555555555556]],[6,[129.77777777777777,406.2222222222222]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6]],"handle_primary":[[1,[0.0,0.0]],[2,[-43.55555555555554,54.66666666666663]],[3,[-83.11111111111109,3.111111111111086]],[4,[-74.22222222222217,-57.77777777777783]],[5,[-58.2222222222222,-21.77777777777783]]],"handle_end":[[1,[43.55555555555554,-54.66666666666663]],[2,[83.11111111111109,-3.111111111111086]],[3,[74.22222222222217,57.77777777777783]],[4,[66.87431172777582,25.01405553176352]],[5,[57.333333333333314,-5.777777777777828]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15578929303912288394,{"inputs":[{"Node":{"node_id":10770443343193024138,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[55.20987654320993,0.0,0.0,55.20987654320993,616.0987654320988,28.1566834324036]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15637103575662751567,{"inputs":[{"Node":{"node_id":314278016428495768,"output_index":0}},{"Node":{"node_id":4350324834849900949,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15656854169166220905,{"inputs":[{"Node":{"node_id":7821977654068146599,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-5.0,22.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15735375935164094402,{"inputs":[{"Node":{"node_id":3414873131936208778,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[64.0,0.0,0.0,64.0,697.7777777777777,845.7777777777777]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15798070933198867970,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[595.1111111111111,513.3333333333333]],[2,[642.2222222222222,536.8888888888889]],[3,[598.6666666666666,547.1111111111111]],[4,[536.0,522.2222222222221]],[5,[449.99999999999994,445.3333333333333]],[6,[438.18064449587104,508.2403828865154]],[7,[384.7140020398532,440.0243218219409]],[8,[350.6666666666667,340.0]],[9,[424.44444444444446,340.0]],[10,[508.88888888888886,389.33333333333337]],[11,[588.6666666666665,453.3333333333333]],[12,[660.0,500.66666666666663]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-18.370370370370324,2.1728395061728634]],[4,[-25.28395061728401,-13.827160493827025]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[5.531031978208716,-44.24825582567013]],[8,[-46.969945387028645,-26.215783471829923]],[9,[24.0,8.0]],[10,[25.481481481481467,20.4444444444444]],[11,[22.666666666666856,18.0]],[12,[-31.999999999999886,10.666666666666686]]],"handle_end":[[1,[-58.22222222222217,-1.3333333333332575]],[2,[18.370370370370324,-2.1728395061728634]],[3,[25.283950617284063,13.827160493827025]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[-4.764895727801786,38.11916582241446]],[7,[28.6666666666668,16.000000000000057]],[8,[-24.0,-8.0]],[9,[-25.481481481481467,-20.4444444444444]],[10,[-23.199803616588156,-18.42337346023163]],[11,[-17.185185185185105,5.925925925925867]],[12,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15815816861435910950,{"inputs":[{"Node":{"node_id":4105711298139980122,"output_index":0}},{"Node":{"node_id":17815494794630739611,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15827578515555598997,{"inputs":[{"Node":{"node_id":15656854169166220905,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[91.07928909050132,0.0,0.0,91.07928909050132,825.9524005970999,667.6234646401286]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15857077552290328068,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[848.8888888888889,330.66666666666663]],[2,[820.8888888888889,395.55555555555554]],[3,[740.0,516.0]],[4,[702.2222222222222,621.3333333333333]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[-15.111111111111086,22.66666666666663]],[3,[-17.77777777777783,35.55555555555554]]],"handle_end":[[1,[15.111111111111086,-22.66666666666663]],[2,[17.77777777777783,-35.55555555555554]],[3,[6.222222222222172,-38.66666666666674]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15896921950407486754,{"inputs":[{"Node":{"node_id":13163272246010991228,"output_index":0}},{"Node":{"node_id":11199691961479466803,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15949658764632267703,{"inputs":[{"Node":{"node_id":14012583111791538162,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15961046538654083626,{"inputs":[{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Node":{"node_id":1889157037801767612,"output_index":0}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15982852655074258238,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[837.9999999999998,535.8024691358025]],[2,[798.222222222222,639.8024691358025]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[31.037037037037067,-61.11111111111131]]],"handle_end":[[1,[34.000000000000114,-59.77777777777783]],[2,null]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16051539163551573193,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[708.0000000000001,769.3333333333333]],[2,[609.7777777777777,896.0]],[3,[514.6666666666666,1025.7777777777778]],[4,[519.1111111111111,1026.2222222222222]],[5,[588.0,930.6666666666666]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-54.66666666666663,69.33333333333314]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[24.0,-29.77777777777783]]],"handle_end":[[1,[54.66666666666663,-69.33333333333326]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[-24.0,29.777777777777715]],[5,[-28.44444444444457,47.111111111111086]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16137033772363318157,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[688.566255144033,175.3371742112483]],[2,[720.417009602195,178.00603566529497]],[3,[720.1360768175583,181.58792866941016]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[29.423007364946784,-0.024697364703285984]],[2,[1.8041152263373303,2.00164609053499]],[3,[-1.1237311385458495,-3.125377229080982]]],"handle_end":[[1,null],[2,null],[3,[12.04499314128941,0.8076817558298615]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16175421708184657649,{"inputs":[{"Node":{"node_id":8698602280607307123,"output_index":0}},{"Node":{"node_id":514796034658094296,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16195626650123806176,{"inputs":[{"Node":{"node_id":14057307926677215422,"output_index":0}},{"Node":{"node_id":1869448627329502330,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16290933138334939444,{"inputs":[{"Node":{"node_id":17426609415699324395,"output_index":0}},{"Node":{"node_id":14888395629683671889,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16324258033206362312,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":16732130236852371275,"output_index":0}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16339345235172368839,{"inputs":[{"Node":{"node_id":14778750092903591172,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[9.829216243064453,0.0,0.0,9.829216243064453,146.1529778442548,204.3564697949558]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16434255153991868080,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":6124821161363551058,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16446146761452576438,{"inputs":[{"Node":{"node_id":12131058586835568367,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[619.1444612416404,54.266956717585614]},"exposed":false}},{"Value":{"tagged_value":{"F64":-35.05804989521759},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[5.617278800347149,2.5068847538738956]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[6.794509856837352e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16450742929146919960,{"inputs":[{"Node":{"node_id":14887821801874852671,"output_index":0}},{"Node":{"node_id":11899713172487274471,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16530658574540156160,{"inputs":[{"Node":{"node_id":11666664915283969027,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[23.70370370370381,12.641975308641918]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16536768589601337644,{"inputs":[{"Node":{"node_id":4222034829755771252,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[13.11273153873293,0.0,0.0,13.11273153873293,152.41813265879796,256.39506172839504]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16551385471328831128,{"inputs":[{"Node":{"node_id":14991324592500870173,"output_index":0}},{"Node":{"node_id":17207349373429328029,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16614450796751955858,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[902.6666666666666,446.6666666666667]],[2,[757.1358024691358,661.5308641975308]],[3,[481.33333333333337,826.6666666666666]],[4,[327.3333333333333,1024.6666666666663]],[5,[807.3333333333334,1026.0]],[6,[845.3333333333333,842.0000000000001]],[7,[918.6666666666664,604.6666666666666]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-138.41983388553547,108.26897897977506]],[3,[-131.33333333333337,78.66666666666652]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[49.4943341398548,-116.98660796692934]],[7,[16.000000000000227,-89.99999999999989]]],"handle_end":[[1,[134.66666666666686,-105.33333333333326]],[2,[143.2366194125077,-85.79655375977609]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-36.66666666666663,86.66666666666652]],[6,[-16.71260304301461,94.00839211695676]],[7,[3.3333333333333712,32.00000000000006]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16649851742084147477,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[870.6666666666665,383.55555555555554]],[2,[838.6666666666666,564.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[16.000000000000227,37.33333333333337]]],"handle_end":[[1,[48.44444444444446,-91.11111111111109]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16732130236852371275,{"inputs":[{"Node":{"node_id":4832236468224231783,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16756940771483104467,{"inputs":[{"Node":{"node_id":13975451746581400000,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[65.86666666666679,0.0,0.0,65.86666666666679,835.7333333333332,679.6]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16767482995096345179,{"inputs":[{"Node":{"node_id":6532401937876437300,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[17.70252644212519,0.0,0.0,17.70252644212519,632.728073038953,145.90043352311002]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16796171662855500935,{"inputs":[{"Node":{"node_id":14993053984267866751,"output_index":0}},{"Node":{"node_id":9371909264427723282,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16805628435335819723,{"inputs":[{"Node":{"node_id":10689298484366290551,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[6.565726185803328,0.0,0.0,6.565726185803328,151.19073539858246,249.65980592975225]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17064046832210629373,{"inputs":[{"Node":{"node_id":12219771677493189964,"output_index":0}},{"Node":{"node_id":11677503666435782605,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17078740291337047697,{"inputs":[{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.6877774,"green":0.2513463,"blue":0.12421187,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6877774,"green":0.2513463,"blue":0.12421187,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[2.0,0.0,0.0,2.0,-1.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17118107476414252025,{"inputs":[{"Node":{"node_id":6645255982686652881,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[74.2222222222222,480.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[40.0,40.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17133591775058457007,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":18067513817508158001,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17147975601187022720,{"inputs":[{"Node":{"node_id":18015048324114736039,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[213.31806909466547,0.0,0.0,213.31806909466547,593.575033756186,151.92592592592592]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17207349373429328029,{"inputs":[{"Node":{"node_id":17967471489196302183,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[234.07407407407413,0.0,0.0,234.07407407407413,334.8148148148148,905.4814814814812]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17207895962122263432,{"inputs":[{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Node":{"node_id":11573595155909211511,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17324767436949538365,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[503.11111111111114,614.6666666666666]],[2,[362.22222222222223,512.0]],[3,[158.66666666666669,419.55555555555554]],[4,[150.22222222222223,429.3333333333333]],[5,[119.1111111111111,456.44444444444446]],[6,[289.7777777777778,503.1111111111111]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-52.888888888888914,-48.44444444444446]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[89.85096850895411,61.20347364650138]]],"handle_end":[[1,[52.888888888888914,48.44444444444446]],[2,[76.0,-1.7777777777777717]],[3,[0.0,0.0]],[4,[7.1111111111111,-35.55555555555554]],[5,[-89.85096850895414,-61.20347364650138]],[6,[0.8888888888888005,-0.4444444444444571]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17336535036064625290,{"inputs":[{"Node":{"node_id":10421722418968896452,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[49.47996245659249,5.913900401382151]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9277405532359332,0.9277405532359332]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17364155187784942740,{"inputs":[{"Node":{"node_id":1378578509112405,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.79129803,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.79129803,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[12.68128551488246,0.0,0.0,12.68128551488246,590.0073290255841,62.91177564395671]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17378885078543074499,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[823.2222222222221,660.4444444444445]],[2,[745.5,826.0]],[3,[707.5,1026.5]],[4,[709.5555555555554,1026.6666666666667]],[5,[740.4444444444443,857.1111111111111]],[6,[725.7777777777779,1026.370370370371]],[7,[727.5555555555554,1026.6666666666663]],[8,[746.0000000000001,842.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-24.5,85.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[17.33333333333337,-84.99999999999989]]],"handle_end":[[1,[24.5,-85.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[-23.11111111111109,90.44444444444456]],[5,[-7.555555555555884,-59.25925925925992]],[6,[0.0,0.0]],[7,[-26.8034437596026,131.4399645903585]],[8,[1.772016460905547,0.9591220850479658]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17426609415699324395,{"inputs":[{"Node":{"node_id":15896921950407486754,"output_index":0}},{"Node":{"node_id":11464423670065789907,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17494926338451345058,{"inputs":[{"Node":{"node_id":1167210731467447244,"output_index":0}},{"Node":{"node_id":9529195152569434392,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17529660518597229229,{"inputs":[{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Node":{"node_id":3802858053991775169,"output_index":0}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17699121037850769131,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[531.1111111111111,364.0]],[2,[429.33333333333326,295.1111111111111]],[3,[282.2222222222222,277.3333333333333]],[4,[158.22222222222223,332.0]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[-56.8888888888888,-24.0]],[3,[-33.333333333333286,6.666666666666686]]],"handle_end":[[1,[56.8888888888888,24.0]],[2,[33.333333333333314,-6.666666666666686]],[3,[60.0,-41.77777777777777]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17815494794630739611,{"inputs":[{"Node":{"node_id":14079496619264986678,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[12.049382716049422,0.0,0.0,12.049382716049422,597.2345679012346,76.52749835097117]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17891208858820401648,{"inputs":[{"Node":{"node_id":1204243038352113866,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-7.407407407407391,4.740740740740762]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17945736750161448391,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[689.4327280262556,73.68042956754955]],[2,[688.3433248095167,92.67923984990472]],[3,[687.4660700953133,94.52064202140812]],[4,[687.6968543916372,70.6398816184091]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[-1.460603632035259,12.298077567102167]],[2,[0.0,0.0]],[3,[-0.975596082205584,-10.16276974584038]],[4,[0.0,0.0]]],"handle_end":[[1,null],[2,[0.6631784948407358,-0.4471776104951459]],[3,[0.0,0.0]],[4,[-0.3670368206467174,-1.6914035044494111]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17967471489196302183,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[339.25925925925924,1025.185185185185]],[2,[568.8888888888889,785.4814814814813]],[3,[334.8148148148148,1025.4814814814813]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[-209.77777777777777,108.44444444444468]],[2,[42.07407407407419,-157.6296296296293]],[3,null]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17971411534648521628,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":14862049226133442027,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18015048324114736039,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"delta":[[1,[687.4074074074074,99.1604938271605]],[2,[683.0617283950618,104.2962962962963]],[3,[675.3580246913581,68.74074074074075]],[4,[654.4197530864197,54.91358024691358]],[5,[639.8024691358025,44.24691358024691]],[6,[617.283950617284,44.641975308641975]],[7,[607.2098765432099,55.308641975308646]],[8,[613.3333333333334,44.24691358024691]],[9,[609.3827160493827,43.65432098765433]],[10,[597.530864197531,73.08641975308642]],[11,[596.9382716049383,85.13580246913581]],[12,[603.4567901234568,92.8395061728395]],[13,[616.2962962962963,115.16049382716052]],[14,[630.716049382716,132.3456790123457]],[15,[664.8888888888889,140.64197530864195]],[16,[672.5925925925926,176.5925925925926]],[17,[757.7283950617285,217.48148148148147]],[18,[799.2098765432099,253.23456790123456]],[19,[797.8271604938273,246.1234567901235]],[20,[805.1358024691358,260.34567901234567]],[21,[805.925925925926,230.9135802469136]],[22,[785.9753086419753,197.13580246913585]],[23,[760.8888888888889,175.80246913580248]],[24,[746.8641975308642,175.40740740740742]],[25,[737.7777777777778,170.07407407407408]],[26,[752.1975308641976,172.83950617283952]],[27,[722.1728395061729,147.1604938271605]],[28,[730.2716049382716,169.4814814814815]],[29,[705.1851851851852,106.27160493827162]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,1]],"handle_primary":[[1,[-2.1728395061728634,1.5802469135802255]],[2,[-8.120713305898448,-14.573388203017842]],[3,[-15.209876543209816,-1.7777777777777717]],[4,[-2.3703703703704377,-3.555555555555557]],[5,[-9.48148148148141,0.9876543209876516]],[6,[-8.09876543209873,4.740740740740733]],[7,[-0.9876543209876444,-4.740740740740733]],[8,[-1.1851851851851052,-1.1851851851851904]],[9,[-14.024691358024713,15.802469135802482]],[10,[-6.320987654320902,4.740740740740733]],[11,[3.3580246913580822,1.9753086419753176]],[12,[5.728395061728406,16.98765432098766]],[13,[2.370370370370324,7.308641975308632]],[14,[5.728395061728293,2.370370370370381]],[15,[6.913580246913625,9.87654320987656]],[16,[29.23456790123464,10.666666666666686]],[17,[20.594048174910657,8.937919170354007]],[18,[0.0,-2.172839506172835]],[19,[4.543209876543187,5.925925925925952]],[20,[0.0,0.0]],[21,[-2.5679012345678984,-9.481481481481469]],[22,[-7.506172839506121,-7.901234567901298]],[23,[-2.5679012345678984,-0.592592592592581]],[24,[-5.3333333333332575,-2.5679012345678984]],[25,[0.0,0.0]],[26,[0.0,0.0]],[27,[0.0,0.0]],[28,[0.0,0.0]],[29,[-13.234567901234527,-3.3580246913580396]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[2.3703703703704377,3.555555555555557]],[4,[9.48148148148141,-0.9876543209876444]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-3.3580246913580822,-1.9753086419753176]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[-5.728395061728293,-2.370370370370381]],[14,[-6.913580246913625,-9.876543209876502]],[15,[0.0,0.0]],[16,[-20.59404817491054,-8.937919170353979]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[0.0,0.0]],[20,[2.5679012345678984,9.481481481481438]],[21,[7.506172839506121,7.901234567901213]],[22,[2.5679012345678984,0.592592592592581]],[23,[5.3333333333332575,2.5679012345678984]],[24,[0.0,0.0]],[25,[-4.740740740740762,0.790123456790127]],[26,[19.35802469135808,26.864197530864203]],[27,[-3.7530864197531177,-7.506172839506178]],[28,[17.580246913580254,58.07407407407402]],[29,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0],[27,0],[28,0],[29,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":29}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18067513817508158001,{"inputs":[{"Node":{"node_id":16649851742084147477,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18190631752493248867,{"inputs":[{"Node":{"node_id":12428327489525325219,"output_index":0}},{"Node":{"node_id":10375238420217738812,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18207065424980079673,{"inputs":[{"Node":{"node_id":13035777574951374461,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18214377096178867498,{"inputs":[{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Node":{"node_id":7747398671834040298,"output_index":0}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":300.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[18279507457571359732,{"inputs":[{"Node":{"node_id":8697043784435445845,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[549.1992759930885,0.0,0.0,549.1992759930885,153.4367170487449,235.84305835298545]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[18319784717194273926,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[172.22222222222217,564.7777777777779]],[2,[150.22222222222223,568.4444444444445]],[3,[167.0,691.0]],[4,[574.6666666666666,712.4444444444443]],[5,[418.2222222222222,754.6666666666666]],[6,[443.1111111111111,783.1111111111111]],[7,[558.6666666666666,749.7777777777778]],[8,[706.6666666666666,687.5555555555554]],[9,[828.0,570.2222222222221]],[10,[610.6666666666666,712.4444444444443]],[11,[595.0,690.0]],[12,[437.99999999999994,690.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,1]],"handle_primary":[[1,[0.0,0.0]],[2,[18.111111111111057,85.22222222222229]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[32.888888888888914,-13.333333333333483]],[8,[60.44444444444446,-39.55555555555566]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[-98.22222222222224,-28.0]]],"handle_end":[[1,null],[2,null],[3,[-128.44444444444446,26.22222222222217]],[4,[54.22222222222223,-9.333333333333371]],[5,[-18.66666666666663,-4.888888888888914]],[6,[-32.888888888888914,13.333333333333483]],[7,[-60.44444444444446,39.55555555555566]],[8,[0.0,0.0]],[9,[145.77777777777771,-61.777777777777715]],[10,[-1.3333333333333712,21.77777777777783]],[11,[98.22222222222224,28.0]],[12,[161.33333333333337,34.66666666666674]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[18422317423856403288,{"inputs":[{"Node":{"node_id":10133176481349663495,"output_index":0}},{"Node":{"node_id":12594527670567285670,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[1378578509112405,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,61]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[172538270105470471,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[314278016428495768,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[421715625023770179,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[431994205232245356,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,7]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[454416440369338250,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,262]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[501401493219507773,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[514796034658094296,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[541002100261582638,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,277]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[542361600097372754,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[581013017684525986,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,157]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[615144098061106242,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[907841922684377912,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[952330505278607301,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1019037285881657884,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1157261387411722141,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1162381870526064378,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1167210731467447244,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1204243038352113866,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,154]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1235106489581249820,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,241]}}},"network_metadata":null}}],[1272070255512697108,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1384427686127078856,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1621196991038859321,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,265]}}},"network_metadata":null}}],[1659518581611333812,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,124]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1661691009086487874,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,238]}}},"network_metadata":null}}],[1689789805659535712,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1713644030979611623,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,211]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1785173043494067496,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,271]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1806828617441445250,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,226]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1869448627329502330,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1889157037801767612,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,298]}}},"network_metadata":null}}],[1984475088429379731,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2044103368441997753,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,319]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2087303479944421366,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,193]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2126710823743005151,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2175432926627256613,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,328]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2282726379014798660,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,262]}}},"network_metadata":null}}],[2394762731964337494,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-3,1]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,-3]}}},"network_metadata":null}}],[6,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-28,-3]}}},"network_metadata":null}}],[7,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2397243911096708995,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2422139482859833437,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2440895173483452224,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,244]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2594533001540454577,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,259]}}},"network_metadata":null}}],[2641530639940889619,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2659768650911099730,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,247]}}},"network_metadata":null}}],[2660652185019504730,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,226]}}},"network_metadata":null}}],[2682920349304670808,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2698266912167150713,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2780251074492832077,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,97]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2878992817082507910,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,169]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2959546142916532439,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,310]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3121275823460307102,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,190]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3150436463719911922,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3165571685352930240,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,43]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3170924135668664007,{"persistent_metadata":{"display_name":"Pointing Arm","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3226457726231232839,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3406722917122601552,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,208]}}},"network_metadata":null}}],[3414873131936208778,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,178]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3535178979443201645,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3627710206997006419,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,112]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3636653585682494814,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3649809135741361946,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,268]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3670529450440935325,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3686761601672683183,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,223]}}},"network_metadata":null}}],[3802858053991775169,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,307]}}},"network_metadata":null}}],[3827449344952693766,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,244]}}},"network_metadata":null}}],[3955326429435439190,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3970516859959908758,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,241]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3971837674569123876,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3992858139802231032,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,49]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4078100635676202528,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,82]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4105711298139980122,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4131094614457622424,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,289]}}},"network_metadata":null}}],[4222034829755771252,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,109]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4236845268521674740,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,199]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4248321400839848160,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,124]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4265165189651403984,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4307303572241320716,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,319]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4332145463108161926,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,292]}}},"network_metadata":null}}],[4341772758799935306,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,271]}}},"network_metadata":null}}],[4350324834849900949,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4372998635946271235,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4422453582814483232,{"persistent_metadata":{"display_name":"Hair and Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-7,4]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4453139144069993994,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4479074488343511985,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4493274523708782092,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4572557574846980832,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4577174813962563383,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,31]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4577638792388493935,{"persistent_metadata":{"display_name":"Head and Neck","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":78}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4663768795652429571,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,22]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4784708315242877950,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,202]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4787732047489141819,{"persistent_metadata":{"display_name":"Tucked Arm","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":24}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4832236468224231783,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,256]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4859656512650360562,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,223]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4909350123806022131,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5002654561220917457,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,304]}}},"network_metadata":null}}],[5009664118231399060,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5020096817747898028,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5040278174920511484,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5140869461760168364,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5174744389209053970,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5185036609290210853,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,10]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5213978458941436169,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,322]}}},"network_metadata":null}}],[5269304445610080925,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5278509881589546420,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,136]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5302437193964714993,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5326536612985524219,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,295]}}},"network_metadata":null}}],[5455777299776842371,{"persistent_metadata":{"display_name":"Beaded Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":78}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5471152581000334146,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5555007473125503522,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,7]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5861306074868809692,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6124821161363551058,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,253]}}},"network_metadata":null}}],[6282972142629473139,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6292009934909381201,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,88]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6416452251137958677,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6532401937876437300,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,49]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6580280438672662494,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6645255982686652881,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,313]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6666260895482068061,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,40]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6672826052605647592,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,67]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6749771744300551215,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,184]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6867142265138950838,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6973438081601736688,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6988349135757634271,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,100]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7141088190930752823,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,277]}}},"network_metadata":null}}],[7262199696924786895,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,280]}}},"network_metadata":null}}],[7320676248579211727,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7385465194555106679,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,211]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7447657690776686262,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,268]}}},"network_metadata":null}}],[7450965328305122110,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7466034304713056391,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,46]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7505360855062237520,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7525593029671097583,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7654665057468818389,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7659717355245331967,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7747398671834040298,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,301]}}},"network_metadata":null}}],[7821977654068146599,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,139]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7893851488963635918,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,250]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7922156219537051964,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8091904580702893317,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8230694129617719636,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8240895922641772563,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8375495949882478840,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,28]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8410534738018320047,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,145]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8413863870096329943,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8543051864256131356,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8595304668947966919,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,133]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8644924780109919177,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,274]}}},"network_metadata":null}}],[8697043784435445845,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,103]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8698602280607307123,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8699675339613677057,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,142]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8766106989344197438,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,115]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8814059393325469059,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8934999452649011837,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,130]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9182448229950585507,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9271343782272072828,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9276497172451351253,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,58]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9371909264427723282,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9374264173303233490,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,211]}}},"network_metadata":null}}],[9425359632144678256,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,52]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9470742171134780193,{"persistent_metadata":{"display_name":"Dotted Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":81}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9529195152569434392,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9684857454501250999,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9698363115186534174,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9740500978584792725,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9778375740427894463,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9782123335421401489,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9847383247226990698,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9863310024364795214,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9954843247420111867,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,100]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10086073308516686449,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10127467043900015225,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,214]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10133176481349663495,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10190227675276560561,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10253927692147706615,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10264089084180279094,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10270446074640675342,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10336592647221792772,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10375238420217738812,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10415872992231003638,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10420981328998103391,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,253]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10421722418968896452,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,37]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10424806499648491677,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10432831427187785843,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10514847656270897393,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10586744777717861556,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10587073897090054035,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10599660455959346550,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,274]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10619788176782820865,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10689298484366290551,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,106]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10770443343193024138,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,73]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10792166025753022402,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10795820039540504703,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,328]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10860592954464951000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10918055532782314571,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10928540355449103287,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11021243031011826737,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11025165626998987360,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11058365317860779469,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,307]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11194653561109699287,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,55]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11199691961479466803,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11268046366284173800,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11356586238302409958,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,289]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11417901103965737900,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,283]}}},"network_metadata":null}}],[11451028343967836482,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11464423670065789907,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11479098559726891734,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,19]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11481949351661484921,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,235]}}},"network_metadata":null}}],[11553850607251055696,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,64]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11565160497886435388,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,250]}}},"network_metadata":null}}],[11573595155909211511,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,214]}}},"network_metadata":null}}],[11590691579869262546,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11616089678400336955,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11630078441485655672,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,151]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11632506522064533635,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,304]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11656581020969095354,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11659756061767599421,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11666664915283969027,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,148]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11677503666435782605,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11804065810513502701,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11899713172487274471,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12030171742672119253,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12049041947382267086,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,310]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12062649793560663566,{"persistent_metadata":{"display_name":"Solid Red Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12131058586835568367,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,25]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12219771677493189964,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12224498203743157414,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12313564802550122052,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12385950900718181935,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12387541320114693418,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12428327489525325219,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12473080738469616517,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12496143061817048445,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12531351117929704587,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12554368619682347699,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12594527670567285670,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12761901161949743155,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12801133692316734622,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,286]}}},"network_metadata":null}}],[12838133055063962839,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12876462860151722087,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12880230498984021417,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13014628586360765651,{"persistent_metadata":{"display_name":"Dotted Aura","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13014916927589286309,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,319]}}},"network_metadata":null}}],[13035777574951374461,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,229]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13045087323693407920,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,247]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13045580349734858212,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,328]}}},"network_metadata":null}}],[13163272246010991228,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13231685386999438557,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13261814586176172586,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,322]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13269760558336088742,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,283]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13302269488061286120,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,217]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13352561089252322209,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,181]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13368990606109678244,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13444661581815146533,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,97]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13475705179546695973,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13481022631108980683,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13557369662261607646,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13594670583065022897,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,217]}}},"network_metadata":null}}],[13644138583806412631,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13907578809542898348,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13975451746581400000,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,130]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14012583111791538162,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,220]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14012648643507848353,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,79]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14029368390543839187,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,280]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14035980686649077716,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14057307926677215422,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14079496619264986678,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,76]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14098374807212007572,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14209241002058525241,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14225285635863713990,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,145]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14285767317419627814,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14345191642063772510,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,160]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14537754528543289381,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14539627480594383748,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14598755603287563819,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14675232891471617236,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,163]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14778750092903591172,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,118]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14797986717815207528,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,238]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14817659161913199655,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,172]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14831840560430171946,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,166]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14862049226133442027,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14883504161508594099,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,295]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14887821801874852671,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14888395629683671889,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14894569344576297448,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14946189826912398678,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14982414026754548178,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14991324592500870173,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14993053984267866751,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15038739378867834454,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,13]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15126865253122550765,{"persistent_metadata":{"display_name":"Dotted Bodice","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":21}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15177845878727456758,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15239301303367148581,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15286091228862934481,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,70]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15303587427289959766,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,235]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15395954548128560685,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15446793500614592278,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,16]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15460109068588328521,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15466714490303763249,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15492651270767932214,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15498700602024283966,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15518174914032911052,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,259]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15578929303912288394,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15637103575662751567,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15656854169166220905,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,139]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15735375935164094402,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15798070933198867970,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,295]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15815816861435910950,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15827578515555598997,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15857077552290328068,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,265]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15896921950407486754,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15949658764632267703,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,220]}}},"network_metadata":null}}],[15961046538654083626,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15982852655074258238,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,142]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16051539163551573193,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,187]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16137033772363318157,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,88]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16175421708184657649,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16195626650123806176,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16290933138334939444,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16324258033206362312,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16339345235172368839,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16434255153991868080,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16446146761452576438,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,25]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16450742929146919960,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16530658574540156160,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,148]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16536768589601337644,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16551385471328831128,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16614450796751955858,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,205]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16649851742084147477,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,232]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16732130236852371275,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,256]}}},"network_metadata":null}}],[16756940771483104467,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16767482995096345179,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16796171662855500935,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16805628435335819723,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17064046832210629373,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17078740291337047697,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,208]}}},"network_metadata":null}}],[17118107476414252025,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,313]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[-144.5,-72.5],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,206.0,449.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17133591775058457007,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17147975601187022720,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17207349373429328029,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17207895962122263432,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17324767436949538365,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,298]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17336535036064625290,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,37]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17364155187784942740,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17378885078543074499,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,175]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17426609415699324395,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17494926338451345058,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17529660518597229229,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17699121037850769131,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,286]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17815494794630739611,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17891208858820401648,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,154]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17945736750161448391,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,34]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17967471489196302183,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,196]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17971411534648521628,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18015048324114736039,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,91]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18067513817508158001,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,232]}}},"network_metadata":null}}],[18190631752493248867,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18207065424980079673,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,229]}}},"network_metadata":null}}],[18214377096178867498,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":"The points to place the copies at.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each placed copy.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized copy sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each placed copy, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized copy angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18279507457571359732,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18319784717194273926,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-45,301]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18422317423856403288,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[709.0808337143742,-713.6328227404273],"tilt":0.0,"zoom":0.6328125,"flip":false},"node_graph_to_viewport":[0.6328125,0.0,0.0,0.6328125,799.0,70.00000000000006],"node_graph_width":1981.0},"selection_undo_history":[[17426704671299246894],[2699408592782313690],[4493274523708782092],[14031411536409518176],[13263961817794116841],[835795066714655983],[11477846841203274509],[727544715487174952],[6480666310383891203],[15086626938904467381],[12994398686940961368],[15086626938904467381],[],[12994398686940961368],[],[5140869461760168364],[11677503666435782605],[776454851019809551],[],[10662978266497754900],[],[13201515093260842314],[],[3932608775253338292],[],[8090442493082590595],[],[17545135276965178247],[4332145463108161926],[],[4332145463108161926],[],[4332145463108161926],[],[11356586238302409958,10086073308516686449],[],[4332145463108161926],[],[3406722917122601552],[4332145463108161926],[],[4332145463108161926],[],[10086073308516686449],[17545135276965178247],[],[17078740291337047697],[3457800614598085282],[3457800614598085282,17426704671299246894],[3457800614598085282,17426704671299246894,2699408592782313690],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,15239301303367148581],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,15239301303367148581,13263961817794116841],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,15239301303367148581,13263961817794116841],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039,5102308641931177440],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039,5102308641931177440,14480644719732559657],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039,5102308641931177440,14480644719732559657,3601587624047636241],[],[17078740291337047697],[3406722917122601552],[],[9470742171134780193],[14883504161508594099],[],[13163272246010991228],[],[4332145463108161926],[17078740291337047697],[],[],[17078740291337047697,3406722917122601552],[],[9470742171134780193],[13368990606109678244],[9470742171134780193],[14883504161508594099],[421715625023770179],[3670529450440935325],[4265165189651403984],[17064046832210629373],[]],"selection_redo_history":[]}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"8fa46ba63a69bb5fa18a49194cf112d963a2d43b","document_ptz":{"pan":[-512.5,-515.648496025349],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":false,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":2394762731964337494,"output_index":0}}],"nodes":[[1378578509112405,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[602.6886145404666,50.91906721536352]],[2,[599.5281207133061,50.3923182441701]],[3,[590.4855967078191,66.80932784636488]],[4,[594.6410608139003,75.57872275567746]],[5,[593.3924706599604,60.59564090839812]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-1.843621399176982,0.5267489711934203]],[3,[1.9314128943758533,7.3257125438195345]],[4,[0.0,0.0]],[5,[1.248590153939972,-3.9798811156835896]]],"handle_end":[[1,[1.843621399176982,-0.5267489711934203]],[2,[-2.7532629181224593,-10.4429315732828]],[3,[0.0,0.0]],[4,[-1.704168058538812,5.432035686592322]],[5,[-4.379820149367788,0.9754610577655498]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[172538270105470471,{"inputs":[{"Node":{"node_id":9276497172451351253,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[2.170365521878466,0.0,0.0,2.170365521878466,604.9565968314213,108.54930650815425]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[314278016428495768,{"inputs":[{"Node":{"node_id":6282972142629473139,"output_index":0}},{"Node":{"node_id":5020096817747898028,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[421715625023770179,{"inputs":[{"Node":{"node_id":3670529450440935325,"output_index":0}},{"Node":{"node_id":18214377096178867498,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[431994205232245356,{"inputs":[{"Node":{"node_id":12387541320114693418,"output_index":0}},{"Node":{"node_id":14894569344576297448,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[454416440369338250,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[696.0,593.3333333333333]],[2,[733.7777777777778,518.6666666666666]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-18.666666666666515,26.66666666666663]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[501401493219507773,{"inputs":[{"Node":{"node_id":9425359632144678256,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[15.687661979265044,0.0,0.0,15.687661979265044,606.9205403814434,96.19238853662318]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[514796034658094296,{"inputs":[{"Node":{"node_id":13352561089252322209,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[140.4789165897198,0.0,0.0,140.4789165897198,611.9655278547245,882.4444444444445]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[541002100261582638,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[456.88888888888886,483.55555555555554]],[2,[536.8888888888889,544.4444444444445]],[3,[609.7777777777777,559.5555555555555]],[4,[648.4444444444443,543.5555555555555]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[25.777777777777715,11.555555555555545]],[3,[20.0,-7.555555555555543]]],"handle_end":[[1,[-25.777777777777715,-11.555555555555545]],[2,[-20.0,7.555555555555543]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[542361600097372754,{"inputs":[{"Node":{"node_id":17971411534648521628,"output_index":0}},{"Node":{"node_id":6867142265138950838,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[581013017684525986,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[803.5555555555554,878.6666666666665]],[2,[852.0,631.1111111111111]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-41.77777777777783,81.77777777777771]]],"handle_end":[[1,[-37.77777777777783,80.88888888888903]],[2,[0.0,-0.4444444444443434]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[615144098061106242,{"inputs":[{"Node":{"node_id":14675232891471617236,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[172.1481481481481,0.0,0.0,172.1481481481481,480.7407407407408,924.7160493827162]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[907841922684377912,{"inputs":[{"Node":{"node_id":17336535036064625290,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[14.365902961321694,0.0,0.0,14.365902961321694,677.3739621616585,81.79843186783222]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[952330505278607301,{"inputs":[{"Node":{"node_id":15038739378867834454,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[50.5679012345679,0.0,0.0,50.5679012345679,654.3978052126201,55.92742221093541]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1019037285881657884,{"inputs":[{"Node":{"node_id":11481949351661484921,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1157261387411722141,{"inputs":[{"Node":{"node_id":4577174813962563383,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[3.154467730526449,0.0,0.0,3.154467730526449,680.5268405773035,81.15750515555649]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1162381870526064378,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":9271343782272072828,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1167210731467447244,{"inputs":[{"Node":{"node_id":16551385471328831128,"output_index":0}},{"Node":{"node_id":10432831427187785843,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1204243038352113866,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[808.8888888888889,832.2962962962965]],[2,[837.3333333333334,653.6296296296296]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-26.22222222222217,80.29629629629608]]],"handle_end":[[1,[-22.22222222222217,79.40740740740739]],[2,[0.0,-0.4444444444443434]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1235106489581249820,{"inputs":[{"Node":{"node_id":3970516859959908758,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1272070255512697108,{"inputs":[{"Node":{"node_id":14012648643507848353,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[5.636213991769523,0.0,0.0,5.636213991769523,610.080658436214,30.724285999066343]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1384427686127078856,{"inputs":[{"Node":{"node_id":17064046832210629373,"output_index":0}},{"Node":{"node_id":17529660518597229229,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1621196991038859321,{"inputs":[{"Node":{"node_id":15857077552290328068,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1659518581611333812,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"delta":[[1,[889.8106995884773,368.4609053497942]],[2,[913.2510288065844,355.55555555555554]],[3,[917.991769547325,333.4320987654321]],[4,[869.1358024691356,247.17695473251027]],[5,[838.3209876543208,205.6954732510288]],[6,[812.2469135802468,182.5185185185185]],[7,[773.7942386831274,177.119341563786]],[8,[809.349794238683,192.0]],[9,[838.4526748971191,213.46502057613168]],[10,[856.2304526748969,234.40329218106996]],[11,[865.1851851851853,248.6255144032922]],[12,[858.1618655692731,310.6063100137174]],[13,[872.1207133058986,331.2373113854595]],[14,[885.9039780521264,331.0617283950617]],[15,[872.9108367626887,333.08093278463645]],[16,[854.5185185185187,346.46913580246917]],[17,[866.172839506173,375.11111111111114]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,1]],"handle_primary":[[1,[9.349794238683105,-4.213991769547306]],[2,[7.637860082304428,-3.423868312757179]],[3,[-10.72985850116538,-29.20905925317203]],[4,[-8.03292181069969,-10.008230452674894]],[5,[-6.320987654321016,-8.164609053497912]],[6,[-10.930041152263357,-4.213991769547334]],[7,[6.584362139917744,1.0534979423868265]],[8,[14.748971193415628,7.242798353909478]],[9,[6.189300411522595,6.97942386831275]],[10,[7.506172839506121,6.452674897119351]],[11,[1.9314128943758533,32.395061728395035]],[12,[6.935528120713343,13.080932784636502]],[13,[7.111111111111086,-2.72153635116598]],[14,[-5.267489711934104,0.0]],[15,[-5.267489711934104,1.4924554183813257]],[16,[0.0,0.0]],[17,[4.279835390946232,0.32921810699582466]]],"handle_end":[[1,[-7.637860082304542,3.423868312757179]],[2,[7.1111111111111995,19.35802469135808]],[3,[8.03292181069969,10.008230452674894]],[4,[6.320987654321016,8.164609053497912]],[5,[10.930041152263357,4.213991769547334]],[6,[0.0,0.0]],[7,[-14.748971193415628,-7.242798353909478]],[8,[-6.189300411522595,-6.97942386831275]],[9,[-7.506172839506121,-6.452674897119351]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[5.267489711934104,-1.4924554183813257]],[15,[0.0,0.0]],[16,[-8.098765432098958,-2.1728395061728634]],[17,[-9.349794238683105,4.213991769547306]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":17}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1661691009086487874,{"inputs":[{"Node":{"node_id":14797986717815207528,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1689789805659535712,{"inputs":[{"Node":{"node_id":15637103575662751567,"output_index":0}},{"Node":{"node_id":11590691579869262546,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1713644030979611623,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[404.0,882.6666666666666]],[2,[321.33333333333326,1022.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[30.96296296296316,-100.2222222222224]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1785173043494067496,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[566.6666666666666,576.0]],[2,[636.4444444444443,579.5555555555555]],[3,[712.0,519.1111111111111]],[4,[770.2222222222222,459.1111111111111]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[31.1111111111112,-17.33333333333337]],[3,[18.22222222222217,-21.777777777777715]]],"handle_end":[[1,[-31.1111111111112,17.33333333333337]],[2,[-18.22222222222217,21.777777777777715]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1806828617441445250,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[395.3333333333333,758.0]],[2,[304.6666666666667,765.3333333333333]],[3,[147.33333333333334,814.0000000000001]],[4,[32.0,1025.3333333333333]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[-32.666666666666686,0.6666666666667425]],[3,[-50.13723402627032,36.301698579412914]]],"handle_end":[[1,[32.666666666666686,-0.6666666666667425]],[2,[50.137234026270335,-36.301698579412914]],[3,[-0.6666666666666892,-122.66666666666686]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1869448627329502330,{"inputs":[{"Node":{"node_id":3827449344952693766,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1889157037801767612,{"inputs":[{"Node":{"node_id":17324767436949538365,"output_index":0}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":18},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1984475088429379731,{"inputs":[{"Node":{"node_id":1621196991038859321,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2044103368441997753,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[710.5185185185186,302.2222222222223]],[2,[723.3580246913581,337.97530864197535]],[3,[747.6543209876543,394.6666666666667]],[4,[796.4444444444446,278.12345679012356]],[5,[793.6790123456792,258.7654320987655]],[6,[756.7407407407409,223.40740740740748]],[7,[710.7160493827162,200.09876543209884]],[8,[694.5185185185187,204.8395061728396]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-5.135802469135797,-10.271604938271594]],[6,[-22.518518518518476,-12.641975308641976]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"handle_end":[[1,[1.3827160493826796,-12.641975308641976]],[2,[-10.864197530864203,-35.5555555555556]],[3,[-12.049382716049422,68.54320987654324]],[4,[5.135802469135797,10.271604938271594]],[5,[22.518518518518476,12.641975308641976]],[6,[0.0,0.0]],[7,[8.117474523314513,-0.7895812719984008]],[8,[7.111111111110972,-82.76543209876547]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2087303479944421366,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[365.6296296296296,1025.4814814814813]],[2,[443.2592592592592,882.0740740740739]],[3,[368.59259259259255,1025.1851851851852]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[-48.59259259259255,50.07407407407413]],[2,[31.111111111111143,-96.29629629629642]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2114821098684715755,{"inputs":[{"Node":{"node_id":7385465194555106679,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.6877774,"green":0.2513463,"blue":0.12421187,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.6877774,"green":0.2513463,"blue":0.12421187,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[2.0,0.0,0.0,2.0,-1.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2126710823743005151,{"inputs":[{"Node":{"node_id":14831840560430171946,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[102.21242730333596,0.0,0.0,102.21242730333596,791.5488895690917,768.4444444444443]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2175432926627256613,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":14982414026754548178,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2282726379014798660,{"inputs":[{"Node":{"node_id":454416440369338250,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2394762731964337494,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}},"exposed":true}},{"Node":{"node_id":4422453582814483232,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,1024.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"Generic":"T"}]},"import_index":1}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":2}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":3}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":4}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2397243911096708995,{"inputs":[{"Node":{"node_id":10587073897090054035,"output_index":0}},{"Node":{"node_id":7505360855062237520,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2422139482859833437,{"inputs":[{"Node":{"node_id":14537754528543289381,"output_index":0}},{"Node":{"node_id":172538270105470471,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2440895173483452224,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[93.037037037037,526.8148148148147]],[2,[30.814814814814767,578.0740740740739]],[3,[33.18518518518515,636.148148148148]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[-9.185185185185162,39.703703703703695]]],"handle_end":[[1,[9.185185185185162,-39.703703703703695]],[2,[0.0,0.0]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2594533001540454577,{"inputs":[{"Node":{"node_id":15518174914032911052,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2641530639940889619,{"inputs":[{"Node":{"node_id":5174744389209053970,"output_index":0}},{"Node":{"node_id":14539627480594383748,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2659768650911099730,{"inputs":[{"Node":{"node_id":13045087323693407920,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2660652185019504730,{"inputs":[{"Node":{"node_id":1806828617441445250,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2682920349304670808,{"inputs":[{"Node":{"node_id":10928540355449103287,"output_index":0}},{"Node":{"node_id":16324258033206362312,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2698266912167150713,{"inputs":[{"Node":{"node_id":3165571685352930240,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[3.0300890699983256,0.0,0.0,3.0300890699983256,639.0431812985823,145.8916382921529]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2780251074492832077,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[620.0443231093315,208.38630063890184]],[2,[644.0435005900861,214.94345295604788]],[3,[679.189837009989,239.99177480754585]],[4,[654.5349442975197,224.51689533908117]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[17.048596024579638,8.262011919603992]],[3,[0.0,0.0]],[4,[-14.688021190407198,-10.884872846462486]]],"handle_end":[[1,[-9.660678057982182,-4.68171321271447]],[2,[-15.868308607493532,-9.835728475719122]],[3,[13.4932102981968,9.999432631699392]],[4,[0.1311430463429133,0.13114304634288487]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2878992817082507910,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[777.4814814814814,867.5555555555555]],[2,[738.074074074074,1027.2592592592591]],[3,[741.6296296296296,1027.5555555555557]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-25.185185185185105,132.14814814814804]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2959546142916532439,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3121275823460307102,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[705.7777777777778,698.6666666666666]],[2,[612.0,780.0]],[3,[452.88888888888886,1025.3333333333333]],[4,[449.77777777777777,1025.7777777777778]],[5,[595.5555555555555,791.1111111111111]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-35.111111111111086,34.66666666666663]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[54.93054949731868,-52.22097082256312]]],"handle_end":[[1,[35.111111111111086,-34.66666666666663]],[2,[59.111111111111086,-144.8888888888889]],[3,[0.0,0.0]],[4,[-99.11111111111104,94.22222222222229]],[5,[-1.1368683772161605e-13,-0.5925925925926094]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3165571685352930240,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[639.0431812985823,135.02706332876082]],[2,[641.3926773385256,156.76403071818197]],[3,[642.0732703685807,156.78028060137643]],[4,[641.1783537148203,135.11412115589184]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-0.4020858660272779,-10.361367902183218]],[4,[0.0,0.0]]],"handle_end":[[1,[-0.08991158554488266,-10.211393405397416]],[2,[-0.29793124344723765,0.12588207707705124]],[3,null],[4,[1.0850699611588652,-0.2123114466060372]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3170924135668664007,{"inputs":[{"Node":{"node_id":4787732047489141819,"output_index":0}},{"Node":{"node_id":13444661581815146533,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3226457726231232839,{"inputs":[{"Node":{"node_id":4493274523708782092,"output_index":0}},{"Node":{"node_id":7922156219537051964,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3406722917122601552,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3414873131936208778,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[761.7777777777777,737.3333333333333]],[2,[697.7777777777777,954.2222222222222]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[26.22222222222217,-158.66666666666652]],[2,[-40.0,81.33333333333326]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3535178979443201645,{"inputs":[{"Node":{"node_id":12838133055063962839,"output_index":0}},{"Node":{"node_id":8240895922641772563,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3627710206997006419,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[152.49382716049382,262.71604938271605]],[2,[149.94787379972564,262.84773662551436]],[3,[154.2366898148148,257.4780574845679]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-0.2633744855966995,-0.4389574759944139]],[3,[4.31137018907981,-2.5386217986682027]]],"handle_end":[[1,[0.4650366425890411,0.7750610709815646]],[2,[-3.3775342902714556,1.988760370600971]],[3,[2.8421709430404014e-14,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3636653585682494814,{"inputs":[{"Node":{"node_id":11565160497886435388,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3649809135741361946,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[787.1111111111111,414.66666666666663]],[2,[841.3333333333333,336.8888888888889]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-21.333333333333258,48.888888888888914]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3670529450440935325,{"inputs":[{"Node":{"node_id":1384427686127078856,"output_index":0}},{"Node":{"node_id":8543051864256131356,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3686761601672683183,{"inputs":[{"Node":{"node_id":4859656512650360562,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3802858053991775169,{"inputs":[{"Node":{"node_id":11058365317860779469,"output_index":0}},{"Value":{"tagged_value":{"F64":25.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3827449344952693766,{"inputs":[{"Node":{"node_id":2440895173483452224,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3831999914273679591,{"inputs":[{"Node":{"node_id":14883504161508594099,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[2.0,0.0,0.0,2.0,-1.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3955326429435439190,{"inputs":[{"Node":{"node_id":18207065424980079673,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3970516859959908758,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[49.77777777777773,636.148148148148]],[2,[78.22222222222219,579.2592592592591]],[3,[170.96296296296293,544.5925925925925]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[27.259259259259252,-24.88888888888891]]],"handle_end":[[1,[-27.259259259259267,24.88888888888891]],[2,[-21.62962962962962,-2.0740740740740193]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3971837674569123876,{"inputs":[{"Node":{"node_id":4131094614457622424,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":3.3528},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3992858139802231032,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[634.615454961134,135.08184727937814]],[2,[635.8445358939186,153.225422953818]],[3,[648.9547325102881,151.8792866941015]],[4,[645.384545038866,135.90123456790124]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[6.203932327389111,7.491540923639718]],[3,[1.8143575674440624,-2.575217192501128]],[4,[0.0,0.0]]],"handle_end":[[1,[-6.203932327389111,-7.491540923639718]],[2,[-1.8143575674440624,2.575217192501128]],[3,[6.730681298582454,7.257430269775966]],[4,[9.247370827617717,-0.3511659807956278]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4078100635676202528,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],"remove":[],"delta":[[1,[606.3407407407408,47.76296296296296]],[2,[603.4962962962964,36.977777777777774]],[3,[613.4518518518519,35.43703703703703]],[4,[627.9111111111112,43.73333333333333]],[5,[653.9851851851852,38.99259259259259]],[6,[676.2666666666667,48.47407407407407]],[7,[684.4444444444445,46.1037037037037]],[8,[667.2592592592594,52.029629629629625]],[9,[642.4888888888889,44.44444444444444]],[10,[653.1555555555556,49.89629629629629]],[11,[665.4814814814815,56.05925925925925]],[12,[683.3777777777777,50.48888888888889]],[13,[707.0814814814814,53.33333333333333]],[14,[698.3111111111111,43.61481481481481]],[15,[677.925925925926,46.222222222222214]],[16,[661.0962962962963,35.792592592592584]],[17,[639.762962962963,37.45185185185185]],[18,[621.2740740740741,37.21481481481481]],[19,[613.4518518518519,26.429629629629623]],[20,[601.2444444444444,36.859259259259254]],[21,[605.3925925925926,49.42222222222222]],[22,[607.6312757201646,47.64444444444445]],[23,[608.5794238683127,44.82633744855967]],[24,[605.998353909465,33.79094650205761]],[25,[604.6288065843622,39.321810699588475]],[26,[607.3152263374486,46.38024691358025]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,1]],"handle_primary":[[1,[0.0,0.0]],[2,[2.1333333333333258,-5.68888888888889]],[3,[2.9629629629629335,4.385185185185186]],[4,[6.992592592592587,-0.23703703703703383]],[5,[10.311111111111131,0.5925925925925952]],[6,[4.5037037037037635,1.1851851851851831]],[7,[0.0,0.0]],[8,[-10.666666666666629,-0.7111111111111157]],[9,[0.0,0.0]],[10,[2.251851851851825,2.2518518518518533]],[11,[3.318518518518431,-0.11851851851851336]],[12,[6.9925925925927,-4.740740740740748]],[13,[0.0,0.0]],[14,[-10.90370370370374,-2.6074074074074076]],[15,[-2.844444444444548,-0.829629629629629]],[16,[-5.214814814814758,-1.3037037037037038]],[17,[-6.992592592592587,2.962962962962962]],[18,[-3.437037037037044,-4.148148148148145]],[19,[-3.3185185185185446,-1.1851851851851831]],[20,[-1.5407407407407163,8.651851851851852]],[21,[0.0,0.0]],[22,[0.0,0.0]],[23,[-2.2123456790121736,-2.3967078189300537]],[24,[0.0,0.0]],[25,[0.18814026836287212,2.510418336797158]],[26,[0.0,0.0]]],"handle_end":[[1,[-2.1333333333333258,5.68888888888889]],[2,[-2.9629629629629335,-4.385185185185186]],[3,[-6.992592592592587,0.23703703703703383]],[4,[-10.311111111111131,-0.5925925925925952]],[5,[-4.5037037037037635,-1.1851851851851904]],[6,[0.0,0.0]],[7,[10.666666666666629,0.7111111111111086]],[8,[9.36296296296291,-2.4888888888888943]],[9,[-2.251851851851825,-2.2518518518518533]],[10,[-3.318518518518431,0.11851851851851336]],[11,[-6.9925925925927,4.740740740740748]],[12,[-3.0814814814815463,-9.48148148148148]],[13,[10.90370370370374,2.6074074074074076]],[14,[2.844444444444548,0.829629629629629]],[15,[5.214814814814758,1.3037037037037038]],[16,[6.992592592592587,-2.962962962962962]],[17,[3.437037037037044,4.148148148148145]],[18,[3.3185185185185446,1.1851851851851831]],[19,[1.5407407407407163,-8.651851851851855]],[20,[0.0,0.0]],[21,[0.0,0.0]],[22,null],[23,[0.0,0.0]],[24,[-0.13898543393838736,-1.8545289902200464]],[25,[0.0,0.0]],[26,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":26}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4105711298139980122,{"inputs":[{"Node":{"node_id":1162381870526064378,"output_index":0}},{"Node":{"node_id":1272070255512697108,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4131094614457622424,{"inputs":[{"Node":{"node_id":11356586238302409958,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4222034829755771252,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[165.5308641975309,250.07407407407408]],[2,[155.25925925925927,256.7901234567901]],[3,[152.49382716049382,262.71604938271605]],[4,[161.6241426611797,258.3703703703704]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-1.9753086419753176,0.790123456790127]],[3,[0.0,0.0]],[4,[2.7654320987654444,-3.950617283950635]]],"handle_end":[[1,[1.9753086419753176,-0.790123456790127]],[2,[-0.3950617283950919,-1.7777777777777717]],[3,[-2.7654320987654444,3.950617283950635]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4236845268521674740,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[397.6296296296296,1025.185185185185]],[2,[568.8888888888889,785.4814814814813]],[3,[393.1851851851852,1025.4814814814813]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[-153.1851851851851,112.88888888888891]],[2,[33.777777777777885,-150.22222222222194]],[3,null]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4248321400839848160,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":13231685386999438557,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4265165189651403984,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":10264089084180279094,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4307303572241320716,{"inputs":[{"Node":{"node_id":4265165189651403984,"output_index":0}},{"Node":{"node_id":4572557574846980832,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4341772758799935306,{"inputs":[{"Node":{"node_id":1785173043494067496,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4350324834849900949,{"inputs":[{"Node":{"node_id":6672826052605647592,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[31.795691583088797,0.0,0.0,31.795691583088797,585.7296856459923,94.64457512806304]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4372998635946271235,{"inputs":[{"Node":{"node_id":13481022631108980683,"output_index":0}},{"Node":{"node_id":2126710823743005151,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4422453582814483232,{"inputs":[{"Node":{"node_id":4577638792388493935,"output_index":0}},{"Node":{"node_id":431994205232245356,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4453139144069993994,{"inputs":[{"Node":{"node_id":11804065810513502701,"output_index":0}},{"Node":{"node_id":3955326429435439190,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4479074488343511985,{"inputs":[{"Node":{"node_id":11479098559726891734,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33716366,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33716366,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[59.01589131000151,0.0,0.0,59.01589131000151,660.660265203475,82.39719554945893]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4493274523708782092,{"inputs":[{"Node":{"node_id":15239301303367148581,"output_index":0}},{"Node":{"node_id":12880230498984021417,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4572557574846980832,{"inputs":[{"Node":{"node_id":13014916927589286309,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-60.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4577174813962563383,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[681.3689965686843,65.32157692417977]],[2,[681.8346756482305,95.35045043533154]],[3,[682.7287205627164,97.04177207029592]],[4,[683.6813083078299,66.11925839089211]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-1.544754703853414,-12.605862910106907]],[4,[-1.0406539360374154,-1.1405457962673182]]],"handle_end":[[1,[-2.6406503472093164,-12.592334294499352]],[2,[-0.5302752037773644,-0.69223185792994]],[3,null],[4,[-1.1368683772161605e-13,-1.4210854715202004e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4577638792388493935,{"inputs":[{"Node":{"node_id":3170924135668664007,"output_index":0}},{"Node":{"node_id":6292009934909381201,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4663768795652429571,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[691.7530864197531,86.91358024691357]],[2,[696.6255144032922,96.92181069958846]],[3,[708.8285322359397,101.48696844993144]],[4,[713.0620332266423,107.3007163542143]],[5,[710.8379820149368,102.96966925773508]],[6,[706.633744855967,98.10699588477364]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[6.057613168724288,1.9753086419753032]],[3,[1.7753391251332005,4.7992684042066]],[4,[0.0,0.0]],[5,[-0.8974241731443726,-2.770309404054231]],[6,[-6.847736625514244,-2.3703703703703525]]],"handle_end":[[1,[-6.057613168724288,-1.9753086419753032]],[2,[-0.7886938944185431,-2.1320736046921525]],[3,[-0.9218106995884908,-0.3950617283950635]],[4,[0.786301337230384,2.4272780410153985]],[5,[2.9051419934493197,1.005626074655538]],[6,[1.1851851851849915,8.823045267489718]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4784708315242877950,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[902.6666666666669,446.66666666666674]],[2,[808.5333333333333,683.1555555555556]],[3,[592.4000000000001,852.3999999999999]],[4,[468.14814814814815,1025.382716049383]],[5,[464.5925925925926,1025.382716049383]],[6,[592.0,845.3333333333333]],[7,[807.0666666666666,680.1333333333332]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-81.33333333333337,100.88888888888891]],[3,[-91.33798434535026,86.27035509501377]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[93.94069526511169,-85.35957406301043]],[7,[62.39957279246403,-72.271586423759]]],"handle_end":[[1,[97.81027061870486,-121.32749415544254]],[2,[85.857044886376,-81.09351003138556]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-102.71604938271612,93.3333333333336]],[6,[-87.55555555555577,101.4074074074075]],[7,[-3.466666666666697,51.33333333333326]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4787732047489141819,{"inputs":[{"Node":{"node_id":12062649793560663566,"output_index":0}},{"Node":{"node_id":4248321400839848160,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4832236468224231783,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[232.44444444444443,332.8888888888889]],[2,[369.77777777777777,381.7777777777778]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-73.77777777777777,-53.77777777777777]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4859656512650360562,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[163.33333333333343,1025.3333333333333]],[2,[249.3333333333334,898.0]],[3,[416.66666666666663,803.3333333333333]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[40.66666666666666,-40.666666666666515]]],"handle_end":[[1,[-45.09988913511887,45.099889135118815]],[2,[-77.99999999999994,22.666666666666742]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4909350123806022131,{"inputs":[{"Node":{"node_id":15498700602024283966,"output_index":0}},{"Node":{"node_id":16536768589601337644,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5002654561220917457,{"inputs":[{"Node":{"node_id":11632506522064533635,"output_index":0}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}},{"Value":{"tagged_value":{"U32":206},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5009664118231399060,{"inputs":[{"Node":{"node_id":3226457726231232839,"output_index":0}},{"Node":{"node_id":17207895962122263432,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5020096817747898028,{"inputs":[{"Node":{"node_id":15286091228862934481,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[61.45404663923182,0.0,0.0,61.45404663923182,623.1001371742112,26.10940699520811]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5040278174920511484,{"inputs":[{"Node":{"node_id":14345191642063772510,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[67.53314930555541,0.0,0.0,67.53314930555541,813.3557395833334,758.7930074873279]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5174744389209053970,{"inputs":[{"Node":{"node_id":12385950900718181935,"output_index":0}},{"Node":{"node_id":5040278174920511484,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5185036609290210853,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"delta":[[1,[687.846364883402,65.58024691358025]],[2,[697.9423868312758,64.79012345679013]],[3,[703.7366255144034,54.694101508916326]],[4,[704.9657064471878,54.25514403292179]],[5,[705.102270995275,59.269013869836904]],[6,[695.152568206066,67.34583142813594]],[7,[701.785703398872,67.26779454351473]],[8,[709.8600823045268,50.83127572016461]],[9,[702.2222222222223,38.38683127572017]],[10,[696.5925925925927,33.728395061728385]],[11,[697.7283950617284,31.30864197530864]],[12,[698.2935528120714,34.35573845450388]],[13,[706.9556470050298,39.272062185642426]],[14,[711.9695168419447,48.57796067672611]],[15,[703.604938271605,68.21399176954733]],[16,[713.7448559670781,60.37860082304528]],[17,[713.3351623228167,47.46593507087334]],[18,[716.7736625514402,54.9135802469136]],[19,[705.9094650205762,70.25514403292182]],[20,[716.6907483615302,62.66361835086114]],[21,[716.1444901691814,49.82655083066605]],[22,[719.6171315348269,59.659198292943145]],[23,[711.5061728395062,69.99176954732509]],[24,[719.0123456790122,66.6337448559671]],[25,[719.8512421886905,54.19661636945587]],[26,[722.5825331504344,57.31809175430575]],[27,[718.680688919372,68.71147690900777]],[28,[702.2539247065995,73.00350556317633]],[29,[694.0600518213687,74.40816948635879]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,1]],"handle_primary":[[1,[0.0,0.0]],[2,[1.5646505637769224,-1.2302214356413188]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-1.1705532693187024,3.0044200579180043]],[6,[0.0,0.0]],[7,[3.3946044810244302,-1.8728852309099435]],[8,[1.1368683772161605e-13,-7.4135040390184415]],[9,[-3.823807346440958,-1.6387745770461848]],[10,[-0.04481007342064913,-1.8372595419893116]],[11,[0.0,0.0]],[12,[1.5089163237310004,2.3850022862368547]],[13,[2.1939750755697105,1.3128956217623369]],[14,[0.9193720469440904,5.347965249199831]],[15,[0.0,0.0]],[16,[2.9207548934437,-5.774876595401999]],[17,[0.0,0.0]],[18,[-0.7242798353908029,5.860082304526735]],[19,[0.0,0.0]],[20,[2.536198750190465,-6.516079865874104]],[21,[0.0,0.0]],[22,[-1.7948483462886315,6.047858558146615]],[23,[0.0,0.0]],[24,[2.106995884773596,-3.0044200579180256]],[25,[0.0,0.0]],[26,[0.8664211612748431,3.3573819999397045]],[27,[-4.128769232802142,3.294230770852593]],[28,[-7.920532726374063,-0.13055823175342596]],[29,[0.0,0.0]]],"handle_end":[[1,[-2.555707971345896,2.0094497789970944]],[2,[0.5267489711934559,6.320987654320987]],[3,[0.0,0.0]],[4,[1.1705532693187024,-3.0044200579180043]],[5,[6.516079865874076,-2.4581618655692807]],[6,[-3.208476806721251,1.7701941002599142]],[7,[-1.1368683772161605e-13,8.389895136005812]],[8,[5.150019007352512,2.2071510031511608]],[9,[0.04481007342064913,1.837259541989333]],[10,[0.0,0.0]],[11,[-0.8654907204776237,-1.3679998781853442]],[12,[-3.679926840420876,-2.202103337905797]],[13,[-0.7923207898123792,-4.608911119518574]],[14,[7.30864197530866,-5.333333333333336]],[15,[-3.84819387288519,7.608596250571544]],[16,[1.1705532693187024,1.8728852309099224]],[17,[0.667740598959881,-5.402628482494777]],[18,[9.169333942996444,-4.409083981100437]],[19,[-2.536198750190465,6.516079865874104]],[20,[1.638774577046206,1.5607376924249363]],[21,[1.7948483462886315,-6.047858558146615]],[22,[2.731290961743639,-1.326627038561199]],[23,[-2.1028230213785264,2.9984698638176326]],[24,[2.980033531474078,4.338363054412447]],[25,[-0.6242950769700428,-2.419143423258646]],[26,[3.66773357719876,-2.926383173296756]],[27,[7.101356500533598,0.11705532693187592]],[28,[0.0,0.0]],[29,[0.009754610577488164,0.048773052888265056]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0],[27,0],[28,0],[29,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":29}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5213978458941436169,{"inputs":[{"Node":{"node_id":13261814586176172586,"output_index":0}},{"Value":{"tagged_value":{"F64":7.0},"exposed":false}},{"Value":{"tagged_value":{"U32":10},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5269304445610080925,{"inputs":[{"Node":{"node_id":3686761601672683183,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5278509881589546420,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[899.1111111111111,600.0000000000001]],[2,[824.4444444444445,850.2222222222223]],[3,[823.7037037037037,861.8666666666667]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[39.55555555555554,-105.8222222222222]],[2,[0.0,0.0]],[3,[-26.31111111111113,120.79999999999984]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5302437193964714993,{"inputs":[{"Node":{"node_id":1235106489581249820,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5326536612985524219,{"inputs":[{"Node":{"node_id":15798070933198867970,"output_index":0}},{"Value":{"tagged_value":{"F64":27.0},"exposed":false}},{"Value":{"tagged_value":{"U32":9},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5455777299776842371,{"inputs":[{"Node":{"node_id":9470742171134780193,"output_index":0}},{"Node":{"node_id":2114821098684715755,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5471152581000334146,{"inputs":[{"Node":{"node_id":12761901161949743155,"output_index":0}},{"Node":{"node_id":952330505278607301,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5555007473125503522,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[721.7241274196006,63.248894985520494]],[2,[724.7285474775185,66.64349946654472]],[3,[723.7140679774425,72.106081390032]],[4,[725.0797134583142,72.96448712086573]],[5,[726.0551745160798,67.30681298582532]],[6,[724.0262155159273,62.468526139308025]],[7,[722.6215515927449,59.58116140832189]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.546258192348887,2.106995884773667]],[3,[-1.287608596250493,1.7558299039780536]],[4,[0.6633135192806776,-0.8584057308337094]],[5,[-0.585276634659408,-3.8628257887517066]],[6,[-0.03901844231063478,-1.2485901539399509]],[7,[-1.014479500076277,0.3901844231062413]]],"handle_end":[[1,[-0.501794076076294,-1.9354914362939013]],[2,[1.852405339488314,-2.526007281120613]],[3,[-0.6633135192806776,0.8584057308337094]],[4,[0.585276634659408,3.8628257887517066]],[5,[0.03901844231063478,1.2485901539399509]],[6,[1.014479500076277,-0.39018442310623414]],[7,[0.07803688462126956,-0.03901844231062768]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5861306074868809692,{"inputs":[{"Node":{"node_id":10190227675276560561,"output_index":0}},{"Node":{"node_id":3636653585682494814,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5951141753420874616,{"inputs":[{"Node":{"node_id":4307303572241320716,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[2.0,0.0,0.0,2.0,-1.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6124821161363551058,{"inputs":[{"Node":{"node_id":10420981328998103391,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6282972142629473139,{"inputs":[{"Node":{"node_id":15815816861435910950,"output_index":0}},{"Node":{"node_id":15578929303912288394,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6292009934909381201,{"inputs":[{"Node":{"node_id":10424806499648491677,"output_index":0}},{"Node":{"node_id":9778375740427894463,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6416452251137958677,{"inputs":[{"Node":{"node_id":9374264173303233490,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6532401937876437300,{"inputs":[{"Node":{"node_id":3992858139802231032,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6580280438672662494,{"inputs":[{"Node":{"node_id":15395954548128560685,"output_index":0}},{"Node":{"node_id":14598755603287563819,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6645255982686652881,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6666260895482068061,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[643.0921942512911,135.30336230847865]],[2,[645.6821893629258,155.3850506865855]],[3,[646.4033730994855,154.80329633678198]],[4,[645.3845450388659,135.9012345679012]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-0.2558402858584259,-10.083527774255913]],[4,[0.0,0.0]]],"handle_end":[[1,[-0.05703059647760256,-13.444628325495556]],[2,[-0.3446760851414865,0.611494768909921]],[3,[0.0,0.0]],[4,[1.68322954928135,-0.022087435068414152]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6672826052605647592,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[617.5253772290811,122.03017832647464]],[2,[614.2716726786227,123.52371759047573]],[3,[605.4979423868314,125.19067215363512]],[4,[600.0548696844994,115.53360768175584]],[5,[603.127572016461,99.64334705075449]],[6,[594.172839506173,82.87517146776406]],[7,[591.0123456790125,60.40054869684499]],[8,[585.8326474622772,72.60356652949247]],[9,[593.3827160493829,85.77229080932784]],[10,[599.4403292181071,108.68587105624144]],[11,[599.381801554641,127.00502972107913]],[12,[613.7991159884164,125.99055022100288]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-1.2820759681926577,0.7008681959453185]],[3,[-4.594421582076166,-1.1705532693187024]],[4,[0.8779149519890552,-4.477366255144034]],[5,[-0.8779149519890552,-4.477366255144048]],[6,[-6.145404663923159,-8.076817558299041]],[7,[0.0,0.0]],[8,[0.6346981736430735,5.019885555177211]],[9,[3.599451303154978,4.477366255144034]],[10,[-2.575217192501441,8.77914951989024]],[11,[3.960543177125487,4.094798878044912]],[12,[2.3801249809480396,-1.7168114616673904]]],"handle_end":[[1,[1.3006147436874471,-0.7110027265491681]],[2,[3.396564570446685,0.8653667695405147]],[3,[-0.8779149519890552,4.477366255144034]],[4,[0.8779149519890552,4.47736625514402]],[5,[6.145404663923159,8.076817558299041]],[6,[-6.057613168724288,9.305898491083669]],[7,[-0.9657064471879266,-7.637860082304528]],[8,[-3.599451303154978,-4.477366255144034]],[9,[3.3684073442221916,-11.48320685530176]],[10,[-4.118548609866821,-4.258160427150372]],[11,[-2.036412917146322,1.4688880058104417]],[12,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6749771744300551215,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[589.3333333333333,1025.3333333333333]],[2,[660.4444444444443,878.2222222222222]],[3,[726.6666666666666,765.3333333333333]],[4,[620.8888888888888,943.5555555555557]],[5,[585.3333333333333,1025.7777777777778]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[31.11111111111109,-50.66666666666663]],[3,[0.0,0.0]],[4,[-29.333333333333258,59.11111111111097]],[5,[0.0,0.0]]],"handle_end":[[1,[-31.863450886870623,51.89190573004646]],[2,[0.0,0.0]],[3,[29.333333333333258,-59.1111111111112]],[4,[0.0,0.0]],[5,[-0.4444444444443434,0.8888888888889142]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6867142265138950838,{"inputs":[{"Node":{"node_id":4784708315242877950,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[438.092053808256,0.0,0.0,438.092053808256,464.5925925925926,736.0246913580248]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6973438081601736688,{"inputs":[{"Node":{"node_id":11630078441485655672,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[9.28395061728395,0.0,0.0,9.28395061728395,751.4074074074075,671.3086419753087]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6988349135757634271,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[189.14614932392712,263.9984322947286]],[2,[188.0493827160494,269.116049382716]],[3,[183.0891632373113,268.771154223006]],[4,[184.5962505715592,263.55006858710567]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[1.552958476004363,1.9059035841873424]],[2,[-1.9972565157751203,0.9588085439937686]],[3,[-0.9800640224909783,-1.3570273385153655]],[4,[1.697261300324044,-1.9917992948792855]]],"handle_end":[[1,[3.459421910557637,-1.6607397492127802]],[2,[1.0091841400482906,1.3973479652491392]],[3,[-1.5959762231368018,1.872937487752267]],[4,[-1.464617942413156,-1.7974856565980986]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7141088190930752823,{"inputs":[{"Node":{"node_id":541002100261582638,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7262199696924786895,{"inputs":[{"Node":{"node_id":14029368390543839187,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7320676248579211727,{"inputs":[{"Node":{"node_id":14817659161913199655,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[70.81481481481478,0.0,0.0,70.81481481481478,725.3333333333333,873.9259259259258]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7385465194555106679,{"inputs":[{"Node":{"node_id":5009664118231399060,"output_index":0}},{"Node":{"node_id":6416452251137958677,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7447657690776686262,{"inputs":[{"Node":{"node_id":3649809135741361946,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7450965328305122110,{"inputs":[{"Node":{"node_id":2659768650911099730,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.4},"exposed":false}},{"Value":{"tagged_value":{"F64":2.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7466034304713056391,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[635.2478000597847,135.0597939750059]],[2,[635.5072483424783,152.80078149291265]],[3,[636.4372010299622,153.9035515500083]],[4,[637.4252384335797,135.01742888696126]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[1.020097146128478,-12.422679731687992]],[4,[0.0,0.0]]],"handle_end":[[1,[0.4153244360613826,-11.397946559213551]],[2,[-0.5579820762119425,-0.504231587867622]],[3,null],[4,[1.1169817316086892,-0.21205734949143107]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7505360855062237520,{"inputs":[{"Node":{"node_id":17945736750161448391,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[2.3475680335660627,0.0,0.0,2.3475680335660627,687.0851599926896,82.58026181990861]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7525593029671097583,{"inputs":[{"Node":{"node_id":16175421708184657649,"output_index":0}},{"Node":{"node_id":15735375935164094402,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7654665057468818389,{"inputs":[{"Node":{"node_id":17378885078543074499,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[115.75964755734378,0.0,0.0,115.75964755734378,707.5,843.5555555555557]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7659717355245331967,{"inputs":[{"Node":{"node_id":18422317423856403288,"output_index":0}},{"Node":{"node_id":4479074488343511985,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7747398671834040298,{"inputs":[{"Node":{"node_id":18319784717194273926,"output_index":0}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":47},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7821977654068146599,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[917.0,471.6]],[2,[826.5068586621596,856.9308484975209]],[3,[825.9524005971,863.6469292802573]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[94.89314133784036,-231.73084849752092]],[2,[0.0,0.0]],[3,[-0.39999999999997726,191.19999999999985]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7893851488963635918,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[125.0,420.0]],[2,[24.0,486.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[23.0,-70.0]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7922156219537051964,{"inputs":[{"Node":{"node_id":13594670583065022897,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8091904580702893317,{"inputs":[{"Node":{"node_id":15446793500614592278,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[32.09743050235909,0.0,0.0,32.09743050235909,694.3429355281208,85.46502057613168]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8230694129617719636,{"inputs":[{"Node":{"node_id":4909350123806022131,"output_index":0}},{"Node":{"node_id":16805628435335819723,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8240895922641772563,{"inputs":[{"Node":{"node_id":16530658574540156160,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[50.96296296296282,0.0,0.0,50.96296296296282,751.4074074074075,632.9876543209876]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8375495949882478840,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[616.0751917898693,61.31097901742621]],[2,[617.4278311233043,51.042625616013815]],[3,[628.5871056241429,46.71808159325306]],[4,[642.6077325610934,47.29035208047554]],[5,[650.6227709190673,52.93827160493828]],[6,[662.1234567901236,64.96570644718793]],[7,[673.0096021947875,65.84362139917695]],[8,[675.3580246913581,68.74074074074075]],[9,[662.1234567901236,66.9849108367627]],[10,[650.9056546258192,56.62876594015139]],[11,[641.3168724279836,48.02194787379973]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,1]],"handle_primary":[[1,[-0.7315957933242316,0.01300614743686168]],[2,[2.1833209230284183,-3.0691100638496778]],[3,[4.873654303444027,-0.3091793289098348]],[4,[2.784561671457709,0.5265657466421629]],[5,[3.160493827160508,4.6529492455418335]],[6,[5.4430727023319605,2.545953360768181]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[-4.389574759945162,-2.106995884773667]],[10,[-2.0025980353477735,-3.5689865976493422]],[11,[-8.252400548696869,-0.8779149519890339]]],"handle_end":[[1,[-2.4595700304455477,3.4574354386312436]],[2,[-5.145487535686698,0.32642413354457744]],[3,[-2.7845616714574817,-0.5265657466421203]],[4,[-3.160493827160508,-4.6529492455418335]],[5,[-5.4430727023319605,-2.545953360768181]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[4.389574759945162,2.106995884773667]],[9,[2.6272417822486887,4.682213077274824]],[10,[6.086554705109506,0.6475058196925048]],[11,[2.0257074632933154,-0.6893258141543512]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8410534738018320047,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[834.6666666666665,551.8024691358028]],[2,[762.5185185185184,667.5061728395063]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[44.88888888888857,-64.49382716049388]]],"handle_end":[[1,[47.85185185185162,-63.160493827160394]],[2,null]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8413863870096329943,{"inputs":[{"Node":{"node_id":16195626650123806176,"output_index":0}},{"Node":{"node_id":5302437193964714993,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8543051864256131356,{"inputs":[{"Node":{"node_id":5002654561220917457,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"F64":300.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8595304668947966919,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[810.1333333333333,731.4666666666668]],[2,[798.4000000000001,879.4666666666668]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[-1.8666666666665608,-67.46666666666658]],[2,[-18.13333333333333,82.66666666666674]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8644924780109919177,{"inputs":[{"Node":{"node_id":10599660455959346550,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8697043784435445845,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"remove":[],"delta":[[1,[699.5555555555554,303.55555555555554]],[2,[701.7777777777777,252.0]],[3,[679.9012345679013,198.716049382716]],[4,[647.5555555555554,171.55555555555557]],[5,[616.4444444444443,170.22222222222223]],[6,[553.7777777777777,195.11111111111111]],[7,[452.0,206.22222222222223]],[8,[413.77777777777777,199.55555555555551]],[9,[326.22222222222223,208.0]],[10,[271.1111111111111,207.55555555555551]],[11,[208.44444444444443,212.0]],[12,[199.11111111111111,214.51851851851853]],[13,[173.03703703703707,226.962962962963]],[14,[155.06172839506175,249.08641975308643]],[15,[155.85185185185185,253.03703703703707]],[16,[172.44444444444446,239.40740740740745]],[17,[183.50617283950615,231.70370370370372]],[18,[195.1604938271605,228.54320987654324]],[19,[205.23456790123456,227.55555555555557]],[20,[217.87654320987656,231.90123456790127]],[21,[216.8888888888889,238.22222222222223]],[22,[195.95061728395063,253.8271604938272]],[23,[185.37661941777165,263.56957780826093]],[24,[188.90085842299663,268.4351595864769]],[25,[201.87654320987656,262.12345679012344]],[26,[227.55555555555557,246.51851851851853]],[27,[251.06172839506175,233.283950617284]],[28,[278.9135802469136,223.80246913580248]],[29,[369.3827160493828,240.19753086419755]],[30,[425.4814814814815,246.71604938271605]],[31,[463.01234567901247,246.71604938271605]],[32,[526.0246913580247,240.79012345679013]],[33,[602.2716049382716,229.5308641975309]],[34,[647.5061728395062,240.79012345679013]],[35,[680.888888888889,281.48148148148147]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29],[30,30],[31,31],[32,32],[33,33],[34,34],[35,35]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,35],[35,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-2.913580246913398,-22.66666666666669]],[3,[-17.576025737442137,-14.306067460708704]],[4,[-10.222222222222172,-3.5555555555555713]],[5,[-12.0,3.555555555555543]],[6,[-23.11111111111109,9.777777777777771]],[7,[-8.444444444444457,-2.2222222222222285]],[8,[-25.33333333333331,1.7777777777778567]],[9,[-30.22222222222223,1.3333333333333712]],[10,[-12.888888888888856,1.7777777777778567]],[11,[0.0,0.0]],[12,[-5.53086419753086,3.3580246913580254]],[13,[-9.28395061728395,7.703703703703695]],[14,[-1.61975308641982,1.935802469135723]],[15,[3.7530864197531177,-1.580246913580254]],[16,[5.530864197530889,-7.111111111111143]],[17,[2.7654320987654444,-0.790123456790127]],[18,[4.148148148148124,-1.3827160493827364]],[19,[4.74074074074079,0.9876543209876728]],[20,[2.3703703703704093,1.185185185185162]],[21,[-3.753086419753061,3.5555555555555713]],[22,[-8.16460905349794,4.4115226337448235]],[23,[-0.9364426154549506,2.4191434232586175]],[24,[3.3430068414448044,-0.5735531240474074]],[25,[4.938271604938279,-3.160493827160451]],[26,[8.493827160493822,-2.765432098765416]],[27,[6.518518518518505,-6.518518518518562]],[28,[14.81481481481478,1.9753086419753176]],[29,[29.4320987654321,3.358024691358054]],[30,[11.061728395061778,0.7901234567900985]],[31,[19.753086419753004,-4.543209876543159]],[32,[23.90123456790127,-2.765432098765416]],[33,[24.098765432098844,-2.5679012345678984]],[34,[10.074074074074131,11.85185185185182]],[35,[10.469135802469168,11.851851851851848]]],"handle_end":[[1,[2.822923929132685,21.961391245287817]],[2,[8.493827160493879,6.913580246913597]],[3,[10.222222222222172,3.5555555555555713]],[4,[12.0,-3.555555555555543]],[5,[23.11111111111109,-9.777777777777745]],[6,[8.444444444444457,2.222222222222257]],[7,[25.33333333333331,-1.777777777777743]],[8,[30.22222222222223,-1.3333333333333712]],[9,[12.888888888888856,-1.777777777777743]],[10,[20.88888888888889,-1.4814814814814952]],[11,[5.530864197530917,-3.3580246913580254]],[12,[9.283950617283978,-7.703703703703695]],[13,[1.4782632300064904,-1.7667048358613044]],[14,[-3.7530864197531177,1.580246913580254]],[15,[-5.530864197530889,7.111111111111086]],[16,[-2.765432098765416,0.790123456790127]],[17,[-4.148148148148152,1.3827160493827648]],[18,[-4.740740740740705,-0.9876543209876728]],[19,[-2.3703703703704093,-1.185185185185162]],[20,[3.753086419753089,-3.5555555555556]],[21,[9.952891875905069,-5.377772223271279]],[22,[0.752878950104872,-1.9449372877709263]],[23,[-1.24660051630255,0.213876804468498]],[24,[-4.938271604938279,3.160493827160451]],[25,[-8.493827160493822,2.765432098765416]],[26,[-6.518518518518505,6.518518518518505]],[27,[-14.81481481481478,-1.9753086419753176]],[28,[-29.4320987654321,-3.358024691357997]],[29,[-11.061728395061778,-0.790123456790127]],[30,[-19.753086419753004,4.543209876543187]],[31,[-23.90123456790127,2.7654320987653875]],[32,[-24.098765432098844,2.5679012345678984]],[33,[-10.074074074074131,-11.851851851851848]],[34,[-10.469135802469168,-11.851851851851848]],[35,[0.0,5.684341886080804e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0],[27,0],[28,0],[29,0],[30,0],[31,0],[32,0],[33,0],[34,0],[35,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":35}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8698602280607307123,{"inputs":[{"Node":{"node_id":14098374807212007572,"output_index":0}},{"Node":{"node_id":14285767317419627814,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8699675339613677057,{"inputs":[{"Node":{"node_id":15982852655074258238,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[40.2222222222224,-10.469135802469168]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8766106989344197438,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[197.33333333333337,212.5432098765432]],[2,[172.64197530864195,208.98765432098767]],[3,[153.58712172411558,204.8434307274338]],[4,[146.5679012345679,204.44444444444449]],[5,[155.85185185185185,211.55555555555557]],[6,[184.49382716049385,218.2716049382716]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-7.703703703703667,-1.1851851851851904]],[3,[-5.834035304362487,0.7861989021958493]],[4,[0.0,0.0]],[5,[8.493827160493822,2.3703703703703525]],[6,[3.160493827160479,-0.9876543209876444]]],"handle_end":[[1,[7.703703703703724,1.1851851851852189]],[2,[5.834035304362487,-0.7861989021958493]],[3,[0.0,0.0]],[4,[-8.493827160493794,-2.370370370370381]],[5,[-3.1604938271605363,0.9876543209877012]],[6,[-3.160493827160479,1.9753086419753456]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8814059393325469059,{"inputs":[{"Node":{"node_id":15492651270767932214,"output_index":0}},{"Node":{"node_id":14035980686649077716,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8934999452649011837,{"inputs":[{"Node":{"node_id":16796171662855500935,"output_index":0}},{"Node":{"node_id":16756940771483104467,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9182448229950585507,{"inputs":[{"Node":{"node_id":12496143061817048445,"output_index":0}},{"Node":{"node_id":7320676248579211727,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9271343782272072828,{"inputs":[{"Node":{"node_id":4078100635676202528,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[106.27046609198636,0.0,0.0,106.27046609198636,600.9797653894951,41.120899996830225]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9276497172451351253,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[606.8928516994359,102.3453741807651]],[2,[607.1269623532997,114.75323883554336]],[3,[605.1760402377686,111.78783721993597]],[4,[605.9173906416706,103.71101966163694]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-0.585276634659408,-2.419143423258646]],[4,[0.27360881696279193,-0.7182231445274425]]],"handle_end":[[1,[-1.3656454808717626,-5.306508154244753]],[2,[0.585276634659408,2.4191434232586317]],[3,[-0.6242950769699291,1.6387745770462772]],[4,[0.0,0.03901844231063478]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9371909264427723282,{"inputs":[{"Node":{"node_id":8595304668947966919,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[12.829171621085834,0.0,0.0,12.829171621085834,797.3041617122475,805.4666666666668]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9374264173303233490,{"inputs":[{"Node":{"node_id":1713644030979611623,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9425359632144678256,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[610.2608816540582,107.73159867034722]],[2,[615.0086877000457,93.76131687242795]],[3,[622.6042778031804,84.90413046791649]],[4,[612.3749428440786,88.61088248742568]],[5,[606.9918024691358,101.68414814814815]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[3.21902149062646,-3.511659807956093]],[3,[-0.6242950769699291,-0.9364426154549648]],[4,[-3.0889600162577153,2.952395468170536]],[5,[0.0,0.0]]],"handle_end":[[1,[-3.21902149062646,3.5116598079561214]],[2,[0.15607376924265282,0.7543565513387165]],[3,[2.992367941940074,-2.86007378029646]],[4,[-0.5623782142248501,-6.258066225952547]],[5,[-2.1454520955559246,-3.1101486881290583]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9470742171134780193,{"inputs":[{"Node":{"node_id":15126865253122550765,"output_index":0}},{"Node":{"node_id":3831999914273679591,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9529195152569434392,{"inputs":[{"Node":{"node_id":3121275823460307102,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[256.00000000000006,0.0,0.0,256.00000000000006,449.77777777777777,862.2190365185486]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9684857454501250999,{"inputs":[{"Node":{"node_id":8699675339613677057,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[39.77777777777783,0.0,0.0,39.77777777777783,798.222222222222,587.8024691358025]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9698363115186534174,{"inputs":[{"Node":{"node_id":1661691009086487874,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9740500978584792725,{"inputs":[{"Node":{"node_id":14946189826912398678,"output_index":0}},{"Node":{"node_id":10586744777717861556,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9778375740427894463,{"inputs":[{"Node":{"node_id":16137033772363318157,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[32.687652153449335,0.0,0.0,32.687652153449335,688.566255144033,178.46243924343128]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9782123335421401489,{"inputs":[{"Node":{"node_id":11656581020969095354,"output_index":0}},{"Node":{"node_id":1019037285881657884,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9847383247226990698,{"inputs":[{"Node":{"node_id":3627710206997006419,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[5.873866597229892,0.0,0.0,5.873866597229892,149.912263026184,260.06491040411356]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9863310024364795214,{"inputs":[{"Node":{"node_id":5278509881589546420,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[75.40740740740739,0.0,0.0,75.40740740740739,823.7037037037037,730.9333333333334]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9954843247420111867,{"inputs":[{"Node":{"node_id":6988349135757634271,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.14046639231827385,0.1473642955124319]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10086073308516686449,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":3971837674569123876,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10127467043900015225,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[258.00000000000006,994.6666666666664]],[2,[644.0,726.6666666666666]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-328.66666666666674,129.33333333333337]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10133176481349663495,{"inputs":[{"Node":{"node_id":12876462860151722087,"output_index":0}},{"Node":{"node_id":11021243031011826737,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10190227675276560561,{"inputs":[{"Node":{"node_id":2682920349304670808,"output_index":0}},{"Node":{"node_id":16434255153991868080,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10253927692147706615,{"inputs":[{"Node":{"node_id":7262199696924786895,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10264089084180279094,{"inputs":[{"Node":{"node_id":5213978458941436169,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":60.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10336592647221792772,{"inputs":[{"Node":{"node_id":16051539163551573193,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[193.3333333333336,0.0,0.0,193.3333333333336,514.6666666666665,897.7777777777777]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10375238420217738812,{"inputs":[{"Node":{"node_id":2282726379014798660,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10415872992231003638,{"inputs":[{"Node":{"node_id":8375495949882478840,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[59.8324854389341,0.0,0.0,59.8324854389341,615.525539252424,57.682808471458216]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10420981328998103391,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[859.5555555555554,375.1111111111111]],[2,[844.4444444444443,460.44444444444434]],[3,[694.2222222222222,623.5555555555554]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[-11.999999999999886,30.6666666666668]]],"handle_end":[[1,[11.055745483535702,-28.253571791258253]],[2,[76.88888888888891,-30.666666666666742]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10421722418968896452,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[677.8673982624599,66.19478737997257]],[2,[683.3689986282578,99.49702789208962]],[3,[691.7384545038866,78.07590306355738]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[-0.49434169374126213,0.7369041683249975]],[2,[0.34676700844204333,0.512429191350904]],[3,[0.12630166293718048,-1.7247569518707309]]],"handle_end":[[1,[-7.636184307015128,-11.284244620129414]],[2,[-1.4537474229852023,19.852161212683583]],[3,[5.6142033131263815,-8.368968014727507]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10424806499648491677,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":17147975601187022720,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10432831427187785843,{"inputs":[{"Node":{"node_id":2087303479944421366,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[77.62962962962956,0.0,0.0,77.62962962962956,365.6296296296296,953.7777777777776]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10514847656270897393,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":16339345235172368839,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10586744777717861556,{"inputs":[{"Node":{"node_id":11417901103965737900,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10587073897090054035,{"inputs":[{"Node":{"node_id":8814059393325469059,"output_index":0}},{"Node":{"node_id":907841922684377912,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10599660455959346550,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[478.2222222222222,515.1111111111111]],[2,[572.0,570.2222222222222]],[3,[654.6666666666666,546.6666666666666]],[4,[745.3333333333333,471.55555555555554]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[31.555555555555543,7.555555555555543]],[3,[26.222222222222285,-16.0]]],"handle_end":[[1,[-31.555555555555543,-7.555555555555543]],[2,[-26.222222222222285,16.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10619788176782820865,{"inputs":[{"Node":{"node_id":2397243911096708995,"output_index":0}},{"Node":{"node_id":1157261387411722141,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10689298484366290551,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[156.93571992954355,246.07901729349]],[2,[151.22962962962964,252.1283950617284]],[3,[155.85185185185185,253.03703703703707]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[-2.071522398679349,1.8617234472507391]],[2,[-0.4744436253241133,1.2651830008642833]],[3,[1.0949818244169762,-0.3546380887060252]]],"handle_end":[[1,[0.9481481481481068,-2.5283950617284177]],[2,[-1.0949818244169762,0.3546380887060252]],[3,[1.9215307714004553,1.0902372408288272]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10770443343193024138,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[616.0987654320988,23.01234567901235]],[2,[621.0370370370372,23.01234567901235]],[3,[634.172839506173,30.814814814814817]],[4,[656.6913580246915,28.049382716049383]],[5,[671.3086419753088,28.641975308641975]],[6,[656.4609053497943,30.375857338820303]],[7,[634.1618655692731,33.7997256515775]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[1.1851851851851052,1.5802469135802468]],[3,[6.024691358024711,0.4938271604938329]],[4,[4.345679012345727,-0.39506172839505993]],[5,[0.0,0.0]],[6,[-10.31550068587103,2.4142661179698237]],[7,[-6.408779149519887,-0.8340192043895769]]],"handle_end":[[1,[-1.1851851851851052,-1.5802469135802468]],[2,[-6.024691358024711,-0.49382716049382935]],[3,[-4.345679012345727,0.39506172839506704]],[4,[-0.39506172839503506,-0.5925925925925917]],[5,[10.31550068587103,-2.4142661179698237]],[6,[6.408779149519887,0.8340192043895769]],[7,[4.455418381344316,5.4759945130315515]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10792166025753022402,{"inputs":[{"Node":{"node_id":2780251074492832077,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[59.145513900657534,0.0,0.0,59.145513900657534,620.0443231093315,224.18903772322383]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10795820039540504703,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[1,[569.1851851851852,61.629629629629605]],[2,[591.1111111111111,92.44444444444444]],[3,[590.2222222222222,113.18518518518518]],[4,[604.4444444444445,138.96296296296293]],[5,[574.5185185185185,169.18518518518516]],[6,[518.2222222222222,175.7037037037037]],[7,[485.6296296296296,153.48148148148147]],[8,[447.7037037037037,131.25925925925924]],[9,[418.074074074074,116.14814814814814]],[10,[396.14814814814815,88.29629629629629]],[11,[350.8679463145693,59.25925925925925]],[12,[332.131357712622,16.970215357579164]],[13,[376.7623479921926,0.4130988647245317]],[14,[418.0913936876638,12.121582398270874]],[15,[432.1308820290171,20.740740740740748]],[16,[451.9827338808689,43.25925925925927]],[17,[478.3481748953775,55.407407407407405]],[18,[498.66666666666663,63.70370370370368]],[19,[540.4444444444445,70.22222222222221]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,1]],"handle_primary":[[1,[12.848891737595522,5.11227609582204]],[2,[0.0,0.0]],[3,[-6.518518518518476,13.3333333333333]],[4,[18.370370370370324,0.2962962962963047]],[5,[-13.629629629629562,5.925925925925924]],[6,[-14.222222222222172,-11.851851851851848]],[7,[-15.407407407407447,4.444444444444457]],[8,[-9.481481481481524,-12.740740740740762]],[9,[-13.629629629629562,-7.407407407407419]],[10,[-13.333333333333371,-8.59259259259261]],[11,[-11.259259259259125,-10.962962962962962]],[12,[4.019883543587866,-14.744727738229416]],[13,[41.32904569547122,11.708483533546342]],[14,[0.0,0.0]],[15,[20.148148148148152,6.8148148148148096]],[16,[7.703703703703695,6.814814814814817]],[17,[10.962962962963047,12.148148148148124]],[18,[13.333333333333371,4.148148148148152]],[19,[11.555555555555545,-3.851851851851848]]],"handle_end":[[1,[-24.88888888888891,-10.666666666666655]],[2,[6.518518518518476,-13.333333333333314]],[3,[-18.370370370370324,-0.2962962962963047]],[4,[13.629629629629562,-5.925925925925924]],[5,[14.222222222222172,11.85185185185182]],[6,[15.407407407407334,-4.444444444444457]],[7,[9.481481481481524,12.740740740740762]],[8,[13.629629629629562,7.407407407407419]],[9,[13.333333333333371,8.59259259259261]],[10,[11.259259259259238,10.962962962963076]],[11,[-2.7704748413796665,10.16196036497552]],[12,null],[13,null],[14,[-20.14814814814821,-6.814814814814827]],[15,[-7.703703703703695,-6.8148148148148096]],[16,[-10.96296296296299,-12.148148148148188]],[17,[-13.333333333333371,-4.148148148148152]],[18,[-11.555555555555545,3.851851851851848]],[19,[-12.030418259761518,-4.786624476892754]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10860592954464951000,{"inputs":[{"Node":{"node_id":4236845268521674740,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[175.7037037037037,0.0,0.0,175.7037037037037,393.1851851851852,905.4814814814812]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10918055532782314571,{"inputs":[{"Node":{"node_id":7447657690776686262,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10928540355449103287,{"inputs":[{"Node":{"node_id":18190631752493248867,"output_index":0}},{"Node":{"node_id":12554368619682347699,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11021243031011826737,{"inputs":[{"Node":{"node_id":16446146761452576438,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0338089636220242,0.0,0.0,1.0338089636220242,0.020141360952104084,0.3178290940614066]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11025165626998987360,{"inputs":[{"Node":{"node_id":5326536612985524219,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-15.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11058365317860779469,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[181.0,1023.0]],[2,[242.0,917.0]],[3,[352.0,833.0]],[4,[397.3333333333333,770.6666666666666]],[5,[479.00000000000006,817.0]],[6,[368.0,902.6666666666669]],[7,[311.3333333333333,1018.6666666666666]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[40.0718943376238,-39.16116946631416]],[3,[37.4110841377784,-16.935189837826556]],[4,[0.0,0.0]],[5,[-35.31654570364651,23.463149348287175]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[1,[-40.071894337623746,39.16116946631416]],[2,[-37.4110841377784,16.935189837826556]],[3,[0.0,0.0]],[4,[35.31654570364611,-23.463149348286947]],[5,[45.99999999999994,-52.00000000000023]],[6,[18.0,-55.33333333333326]],[7,[0.0,1.3333333333337123]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11194653561109699287,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[604.3716161316235,95.4260819221956]],[2,[607.4000914494741,86.85505258344766]],[3,[623.4951989026065,81.23639689071788]],[4,[605.761316872428,82.28989483310471]],[5,[602.0316509633005,90.5516059992284]],[6,[603.4567901234567,92.83950617283948]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[3.687242798354191,-3.4531321444901835]],[3,[-0.7803688462123546,-2.7117817405883216]],[4,[-3.2460274482192517,2.85650415443304]],[5,[0.0,0.0]],[6,[0.3965701826469967,0.8240731861035471]]],"handle_end":[[1,[-3.3249738510837687,3.113864400221118]],[2,[-1.0144795000761633,1.6192653558908745]],[3,[4.389574759945049,-3.862825788751721]],[4,[-0.10095077423932251,-1.27829797882373]],[5,[-0.3896135191956773,-0.8096172333722365]],[6,[-2.273736754432321e-13,-4.263256414560601e-14]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11199691961479466803,{"inputs":[{"Node":{"node_id":7141088190930752823,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11268046366284173800,{"inputs":[{"Node":{"node_id":4453139144069993994,"output_index":0}},{"Node":{"node_id":11616089678400336955,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11356586238302409958,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[811.5555555555555,250.96296296296296]],[2,[783.1111111111111,348.74074074074065]],[3,[732.148148148148,432.2962962962963]],[4,[777.7777777777778,375.7037037037037]],[5,[811.8518518518518,273.18518518518516]],[6,[792.2962962962963,188.74074074074073]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6]],"handle_primary":[[1,[0.0,0.0]],[2,[-14.6604291210798,34.80924611318039]],[3,[0.0,0.0]],[4,[10.310300340717504,-19.181954122264813]],[5,[3.7834358363461433,-27.565032521950258]]],"handle_end":[[1,[14.6604291210798,-34.809246113180336]],[2,[26.666666666666515,-35.555555555555486]],[3,[-12.740740740740875,23.703703703703695]],[4,[-4.148148148148152,30.22222222222223]],[5,[26.074074074074133,33.18518518518516]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11417901103965737900,{"inputs":[{"Node":{"node_id":13269760558336088742,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11451028343967836482,{"inputs":[{"Node":{"node_id":2422139482859833437,"output_index":0}},{"Node":{"node_id":12531351117929704587,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11464423670065789907,{"inputs":[{"Node":{"node_id":8644924780109919177,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11479098559726891734,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[660.660265203475,61.39551897576588]],[2,[669.2053040695015,63.20987654320987]],[3,[686.5294924554183,63.38545953360767]],[4,[704.5560128029263,81.29492455418381]],[5,[718.310013717421,90.01554641060812]],[6,[717.9588477366254,99.32144490169182]],[7,[710.5648529187624,103.39887212315196]],[8,[709.979576284103,102.93065081542449]],[9,[717.5491540923639,95.80978509373573]],[10,[712.047553726566,86.56241426611797]],[11,[694.9574759945133,76.78829446730683]],[12,[683.3104709647919,64.0877914951989]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,1]],"handle_primary":[[1,[0.0,0.0]],[2,[5.4430727023319605,-0.6438042981252892]],[3,[3.4531321444902687,2.1655235482396193]],[4,[8.369455875628773,2.867855509830818]],[5,[1.1120256058526363,1.9314128943758817]],[6,[-1.9184335509834227,1.995170893022717]],[7,[-0.585276634659408,-0.4682213077274753]],[8,[0.0,0.0]],[9,[0.17558299039785652,-3.5116598079561214]],[10,[-4.096936442615174,-1.872885230909901]],[11,[-5.618655692729931,-7.257430269775952]],[12,[-12.8760859625055,-0.4682213077274682]]],"handle_end":[[1,[-5.4430727023319605,0.6438042981252892]],[2,[-3.4853769593560173,-2.1857448728164144]],[3,[-8.369455875628773,-2.867855509830818]],[4,[-1.8416562954789697,-3.1986661974113133]],[5,[2.926383173296813,-3.043438500228561]],[6,[1.706505264591101,-0.4025776799149554]],[7,null],[8,[-0.17558299039785652,3.511659807956093]],[9,[4.0931309699032,1.8711455862415676]],[10,[5.464020763447934,7.057693486120044]],[11,[4.036165212980222,0.14676964410837456]],[12,[4.9748513946045705,5.91129401005945]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11481949351661484921,{"inputs":[{"Node":{"node_id":15303587427289959766,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11553850607251055696,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[597.5967078189302,96.04389574759946]],[2,[596.631001371742,112.37311385459536]],[3,[594.085048010974,128.61454046639233]],[4,[608.570644718793,131.2482853223594]],[5,[619.2812071330591,124.6639231824417]],[6,[609.9753086419754,133.5308641975309]],[7,[591.5390946502059,128.7023319615912]],[8,[594.962962962963,111.93415637860085]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-4.126200274348321,7.1111111111111]],[3,[3.5534615822588194,4.6302681223374975]],[4,[4.038408779149563,-1.492455418381354]],[5,[0.0,0.0]],[6,[-7.286694101508829,3.0727023319615796]],[7,[-2.3703703703704377,-6.057613168724245]],[8,[4.1262002743484345,-6.935528120713329]]],"handle_end":[[1,[4.126200274348321,-7.111111111111114]],[2,[-2.8971193415636662,-3.7750342935528063]],[3,[-4.038408779149563,1.492455418381354]],[4,[0.0,0.0]],[5,[7.286694101508829,-3.0727023319615796]],[6,[2.3703703703704377,6.057613168724259]],[7,[-4.1262002743484345,6.935528120713272]],[8,[-0.0877914951989851,0.08779149519889984]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11565160497886435388,{"inputs":[{"Node":{"node_id":7893851488963635918,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11573595155909211511,{"inputs":[{"Node":{"node_id":10127467043900015225,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11590691579869262546,{"inputs":[{"Node":{"node_id":11553850607251055696,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[28.829432541238475,0.0,0.0,28.829432541238475,590.4517745918206,115.51863704018864]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11616089678400336955,{"inputs":[{"Node":{"node_id":2660652185019504730,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.8},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11630078441485655672,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[760.6913580246915,657.5802469135803]],[2,[751.4074074074075,685.0370370370371]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[4.543209876543187,-10.271604938271594]]],"handle_end":[[1,[7.111111111110972,-8.44444444444457]],[2,null]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11632506522064533635,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[40.66666666666663,1022.6666666666666]],[2,[113.33333333333331,859.3333333333333]],[3,[299.33333333333326,775.3333333333333]],[4,[397.3333333333333,770.6666666666666]],[5,[336.66666666666663,799.3333333333334]],[6,[208.0,903.0]],[7,[145.33333333333331,1022.6666666666666]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[58.666666666666686,-57.33333333333326]],[3,[65.33333333333337,-6.0]],[4,[0.0,0.0]],[5,[-40.66666666666663,12.0]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[1,[-58.666666666666686,57.333333333333144]],[2,[-65.33333333333337,6.0]],[3,[0.0,0.0]],[4,[40.66666666666663,-12.0]],[5,[35.666666666666686,-46.66666666666674]],[6,[18.00000000000003,-55.33333333333326]],[7,[0.0,1.3333333333333712]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11656581020969095354,{"inputs":[{"Node":{"node_id":8413863870096329943,"output_index":0}},{"Node":{"node_id":9698363115186534174,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11659756061767599421,{"inputs":[{"Node":{"node_id":8766106989344197438,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[50.76543209876547,0.0,0.0,50.76543209876547,146.5679012345679,211.41832431557876]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11666664915283969027,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[802.3703703703703,580.9382716049382]],[2,[751.4074074074075,685.0370370370371]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[20.740740740740534,-42.469135802469054]]],"handle_end":[[1,[27.259259259259125,-48.79012345678995]],[2,null]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11804065810513502701,{"inputs":[{"Node":{"node_id":9782123335421401489,"output_index":0}},{"Node":{"node_id":17133591775058457007,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11899713172487274471,{"inputs":[{"Node":{"node_id":9954843247420111867,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[7.798812655825827,0.0,0.0,7.798812655825827,182.68014787145296,266.0770159687539]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12030171742672119253,{"inputs":[{"Node":{"node_id":12801133692316734622,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12049041947382267086,{"inputs":[{"Node":{"node_id":2959546142916532439,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[25.77777777777777,508.44444444444446]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[8.0,8.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12062649793560663566,{"inputs":[{"Node":{"node_id":5455777299776842371,"output_index":0}},{"Node":{"node_id":8934999452649011837,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12131058586835568367,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.6081211287919952,-0.2081641356766983]],[2,[1.0389965338526328,0.5311836299154763]],[3,[0.443655685420585,0.8388279058567918]],[4,[0.022131022857413415,0.4190687668825941]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.297407817404018,0.05174926937677715]],[2,[-0.06483434986356718,0.26682960488486684]],[3,[-0.29501938196342326,-0.04735956037402645]],[4,[0.021131345375600137,-0.27179882337964756]]],"handle_end":[[1,[0.07365905854782184,-0.30314821587423946]],[2,[0.2950193819634199,0.04735956037402589]],[3,[-0.02113134537560013,0.27179882337964756]],[4,[-0.38805268271111915,-0.0675215701634326]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12219771677493189964,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":17118107476414252025,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12224498203743157414,{"inputs":[{"Node":{"node_id":2878992817082507910,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[39.40740740740739,0.0,0.0,39.40740740740739,738.074074074074,947.5555555555557]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12313564802550122052,{"inputs":[{"Node":{"node_id":13557369662261607646,"output_index":0}},{"Node":{"node_id":9684857454501250999,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12385950900718181935,{"inputs":[{"Node":{"node_id":4372998635946271235,"output_index":0}},{"Node":{"node_id":615144098061106242,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12387541320114693418,{"inputs":[{"Node":{"node_id":5471152581000334146,"output_index":0}},{"Node":{"node_id":15460109068588328521,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12428327489525325219,{"inputs":[{"Node":{"node_id":14209241002058525241,"output_index":0}},{"Node":{"node_id":1984475088429379731,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12473080738469616517,{"inputs":[{"Node":{"node_id":17891208858820401648,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[28.44444444444457,0.0,0.0,28.44444444444457,808.8888888888888,742.962962962963]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12496143061817048445,{"inputs":[{"Node":{"node_id":7525593029671097583,"output_index":0}},{"Node":{"node_id":7654665057468818389,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12531351117929704587,{"inputs":[{"Node":{"node_id":11194653561109699287,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[21.474012644365416,0.0,0.0,21.474012644365416,602.0211862582411,87.35532685019162]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12554368619682347699,{"inputs":[{"Node":{"node_id":2594533001540454577,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12594527670567285670,{"inputs":[{"Node":{"node_id":4663768795652429571,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[21.402696806889367,0.0,0.0,21.402696806889367,691.6593364197529,97.10714830056394]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12761901161949743155,{"inputs":[{"Node":{"node_id":7659717355245331967,"output_index":0}},{"Node":{"node_id":8091904580702893317,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12801133692316734622,{"inputs":[{"Node":{"node_id":17699121037850769131,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12838133055063962839,{"inputs":[{"Node":{"node_id":13644138583806412631,"output_index":0}},{"Node":{"node_id":6973438081601736688,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12876462860151722087,{"inputs":[{"Node":{"node_id":10619788176782820865,"output_index":0}},{"Node":{"node_id":10415872992231003638,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12880230498984021417,{"inputs":[{"Node":{"node_id":15949658764632267703,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13014628586360765651,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":13594126018052902276,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13014916927589286309,{"inputs":[{"Node":{"node_id":2044103368441997753,"output_index":0}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13035777574951374461,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[896.0,440.44444444444446]],[2,[833.7777777777778,573.3333333333333]],[3,[696.8888888888889,697.3333333333333]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[-68.0,92.88888888888891]]],"handle_end":[[1,[68.0,-92.88888888888891]],[2,[0.0,0.0]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13045087323693407920,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[19.0,494.0]],[2,[227.0,496.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-98.0,-55.0]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13045580349734858212,{"inputs":[{"Node":{"node_id":10795820039540504703,"output_index":0}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::ScatterPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13163272246010991228,{"inputs":[{"Node":{"node_id":9740500978584792725,"output_index":0}},{"Node":{"node_id":10253927692147706615,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13231685386999438557,{"inputs":[{"Node":{"node_id":1659518581611333812,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[147.8430026544071,0.0,0.0,147.8430026544071,773.7942386831273,276.1284866093131]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13261814586176172586,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"remove":[],"delta":[[1,[799.1111111111112,188.14814814814815]],[2,[827.2592592592594,206.41975308641975]],[3,[851.1111111111111,237.7777777777778]],[4,[858.6666666666666,268.88888888888886]],[5,[829.8271604938273,345.08641975308643]],[6,[775.5061728395061,429.23456790123464]],[7,[680.4331323644109,506.0568995183343]],[8,[686.5302034429451,490.6109861193811]],[9,[758.716049382716,441.8765432098765]],[10,[755.3580246913581,432.5925925925926]],[11,[719.9999999999999,460.8395061728396]],[12,[715.8518518518517,452.14814814814815]],[13,[736.8888888888889,432.2962962962963]],[14,[782.8148148148148,378.96296296296293]],[15,[817.4814814814815,272.2962962962963]],[16,[809.1851851851852,207.1111111111111]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[9.086419753086489,9.086419753086432]],[4,[-2.5679012345678984,17.77777777777777]],[5,[-31.06481223802939,48.93526760703577]],[6,[-36.541158121167314,42.67873357730855]],[7,null],[8,[37.39536928167615,-11.787670751832536]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[20.148148148148152,-33.481481481481524]],[15,[5.925925925925867,-34.96296296296299]],[16,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-9.086419753086489,-9.086419753086432]],[3,[2.5679012345678984,-17.77777777777777]],[4,[31.06481223802939,-48.93526760703571]],[5,[18.3855550289378,-21.473654506216747]],[6,[22.320987654321016,-14.222222222222342]],[7,null],[8,[-11.555555555555657,17.18518518518522]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[-20.148148148148152,33.481481481481524]],[14,[-5.925925925925867,34.96296296296299]],[15,[6.51851851851859,11.851851851851848]],[16,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":16}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13269760558336088742,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[265.3333333333333,312.0]],[2,[447.1111111111111,332.44444444444446]],[3,[595.1111111111111,439.55555555555554]],[4,[698.2222222222222,483.1111111111111]],[5,[756.4444444444443,438.22222222222223]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,5]],"handle_primary":[[1,[0.0,0.0]],[2,[83.95959630801838,35.04735442215451]],[3,[20.8888888888888,20.444444444444457]],[4,[22.46059594926794,-9.800987323316916]]],"handle_end":[[1,[-96.88888888888886,-40.44444444444446]],[2,[-20.8888888888888,-20.444444444444457]],[3,[-48.888888888888914,21.33333333333331]],[4,[-22.222222222222285,23.111111111111143]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13302269488061286120,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[262.66666666666674,903.3333333333331]],[2,[565.3333333333335,756.6666666666666]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-200.66666666666652,64.66666666666663]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13352561089252322209,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[612.0,1025.3333333333333]],[2,[749.7777777777777,741.7777777777778]],[3,[752.4444444444443,739.1111111111111]],[4,[615.5555555555555,1025.7777777777778]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[-112.0,179.55555555555577]],[2,[0.0,0.0]],[3,[28.000000000000114,-107.55555555555544]],[4,[-0.4444444444444571,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13368990606109678244,{"inputs":[{"Node":{"node_id":421715625023770179,"output_index":0}},{"Node":{"node_id":15961046538654083626,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13444661581815146533,{"inputs":[{"Node":{"node_id":16450742929146919960,"output_index":0}},{"Node":{"node_id":10792166025753022402,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13475705179546695973,{"inputs":[{"Node":{"node_id":11451028343967836482,"output_index":0}},{"Node":{"node_id":501401493219507773,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13481022631108980683,{"inputs":[{"Node":{"node_id":9182448229950585507,"output_index":0}},{"Node":{"node_id":12224498203743157414,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13557369662261607646,{"inputs":[{"Node":{"node_id":3535178979443201645,"output_index":0}},{"Node":{"node_id":15177845878727456758,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13594126018052902276,{"inputs":[{"Node":{"node_id":2175432926627256613,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[2.0,0.0,0.0,2.0,-1.0,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13594670583065022897,{"inputs":[{"Node":{"node_id":13302269488061286120,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13644138583806412631,{"inputs":[{"Node":{"node_id":2641530639940889619,"output_index":0}},{"Node":{"node_id":12473080738469616517,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13907578809542898348,{"inputs":[{"Node":{"node_id":12313564802550122052,"output_index":0}},{"Node":{"node_id":15827578515555598997,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13975451746581400000,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[835.7333333333332,786.4000000000001]],[2,[901.6,572.8]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[-22.399999999999977,109.06666666666648]],[2,[47.4666666666667,-108.26666666666664]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14012583111791538162,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[248.00000000000009,884.0]],[2,[380.00000000000006,806.0]],[3,[603.3333333333335,744.6666666666666]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[70.80694036316174,-19.49756328840681]]],"handle_end":[[1,[-92.00000000000006,25.333333333333258]],[2,[-71.33333333333326,24.0]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14012648643507848353,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[610.080658436214,28.760493827160495]],[2,[613.7152263374486,29.076543209876547]],[3,[615.7168724279835,33.05349794238683]],[4,[613.6098765432099,30.393415637860084]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[1.5990193552247547,1.4582133097558128]],[3,[0.0,0.0]],[4,[-1.3168724279836397,-1.343209876543213]]],"handle_end":[[1,[-1.447323438899616,-1.3198753943965968]],[2,[-0.05267489711934559,-0.9218106995884768]],[3,[0.7962610294339356,0.812186250022549]],[4,[0.05267489711934559,0.02633744855966924]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14029368390543839187,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[604.8888888888889,523.5555555555557]],[2,[668.4444444444445,516.4444444444443]],[3,[808.0,413.33333333333337]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[23.1111111111112,-9.7777777777776]]],"handle_end":[[1,[-23.1111111111112,9.7777777777776]],[2,[-59.111111111111086,58.22222222222223]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14035980686649077716,{"inputs":[{"Node":{"node_id":6666260895482068061,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[3.311178848194458,0.0,0.0,3.311178848194458,643.0921942512911,145.3440351187959]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14057307926677215422,{"inputs":[{"Node":{"node_id":5861306074868809692,"output_index":0}},{"Node":{"node_id":7450965328305122110,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14079496619264986678,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[597.2345679012346,77.92592592592592]],[2,[608.9876543209878,75.25925925925925]],[3,[609.2839506172841,76.74074074074073]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[-6.222222222222172,-0.9876543209876588]],[2,[0.0,0.0]],[3,[8.09876543209873,0.2962962962962763]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14098374807212007572,{"inputs":[{"Node":{"node_id":17494926338451345058,"output_index":0}},{"Node":{"node_id":10336592647221792772,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14209241002058525241,{"inputs":[{"Node":{"node_id":16290933138334939444,"output_index":0}},{"Node":{"node_id":10918055532782314571,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14225285635863713990,{"inputs":[{"Node":{"node_id":8410534738018320047,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[25.333333333333485,12.641975308641918]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14285767317419627814,{"inputs":[{"Node":{"node_id":6749771744300551215,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[141.33333333333348,0.0,0.0,141.33333333333348,585.3333333333331,895.6111111111111]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14345191642063772510,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[880.8888888888888,556.4444444444443]],[2,[833.7777777777777,780.4444444444443]],[3,[813.3557395833334,961.1454375]],[4,[838.2222222222222,766.6666666666669]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-9.333333333333371,54.66666666666674]],[3,[0.0,0.0]],[4,[10.643023589139377,-58.51588472312813]]],"handle_end":[[1,[9.333333333333371,-54.66666666666674]],[2,[0.0,0.0]],[3,[-10.643023589139377,58.51588472312813]],[4,[-0.4444444444444571,-0.8888888888888005]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14537754528543289381,{"inputs":[{"Node":{"node_id":1689789805659535712,"output_index":0}},{"Node":{"node_id":17364155187784942740,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14539627480594383748,{"inputs":[{"Node":{"node_id":581013017684525986,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[48.444444444444684,0.0,0.0,48.444444444444684,803.5555555555553,754.8888888888888]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14598755603287563819,{"inputs":[{"Node":{"node_id":7466034304713056391,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[2.1784152500583787,0.0,0.0,2.1784152500583787,635.2478000597847,144.4283523826651]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14675232891471617236,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[652.8888888888889,822.6666666666666]],[2,[480.7407407407408,1026.6666666666663]],[3,[483.9506172839506,1026.7654320987656]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[26.66666666666669,-58.666666666666515]],[2,[0.0,0.0]],[3,[-143.85185185185185,150.07407407407413]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14778750092903591172,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[155.98219408731924,204.757705978404]],[2,[149.0793650793651,202.5537918871252]],[3,[146.5679012345679,204.44444444444449]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[-2.6135873853791907,-0.8494167367814498]],[2,[-2.2695727277346123,-0.643804298125275]],[3,[0.9278738161427498,1.2447087777524644]]],"handle_end":[[1,[1.7022700834823468,0.48287890620272833]],[2,[-1.156966490299823,-1.5520282186949146]],[3,[-0.32172621516085087,3.1233079488176827]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14797986717815207528,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[80.0,557.0]],[2,[425.0,650.0]],[3,[665.7777777777778,658.6666666666667]],[4,[826.6666666666665,552.4444444444443]],[5,[868.0,380.44444444444446]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,5]],"handle_primary":[[1,[134.0,-75.0]],[2,[105.59298295237464,48.735222901095995]],[3,[0.0,0.0]],[4,[59.11111111111131,-70.66666666666652]]],"handle_end":[[1,[-104.0,-48.0]],[2,[0.0,0.0]],[3,[-59.11111111111131,70.66666666666652]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14817659161913199655,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[796.148148148148,723.8518518518517]],[2,[725.3333333333333,985.7777777777776]],[3,[726.8148148148148,1023.9999999999998]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[9.777777777777828,-73.18518518518522]],[2,[0.0,0.0]],[3,[-75.55555555555566,240.59259259259304]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14831840560430171946,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[791.5555555555555,1026.6666666666663]],[2,[831.5555555555555,737.3333333333334]],[3,[889.7777777777777,516.8888888888889]],[4,[893.7613168724276,509.6296296296296]],[5,[833.4814814814815,746.3703703703703]],[6,[793.7777777777777,1027.2592592592591]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[19.555555555555543,-74.66666666666674]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-24.0,92.44444444444446]],[6,[0.0,0.0]]],"handle_end":[[1,[-26.4188207246807,100.8718609487812]],[2,[-22.22222222222217,89.77777777777783]],[3,[0.0,0.0]],[4,[24.0,-92.44444444444446]],[5,[0.0,0.0]],[6,[-0.14814814814815236,0.29629629629675946]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14862049226133442027,{"inputs":[{"Node":{"node_id":16614450796751955858,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[596.154891011329,0.0,0.0,596.154891011329,327.3333333333333,736.3333333333333]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14883504161508594099,{"inputs":[{"Node":{"node_id":13368990606109678244,"output_index":0}},{"Node":{"node_id":11025165626998987360,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14887821801874852671,{"inputs":[{"Node":{"node_id":8230694129617719636,"output_index":0}},{"Node":{"node_id":18279507457571359732,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14888395629683671889,{"inputs":[{"Node":{"node_id":4341772758799935306,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14894569344576297448,{"inputs":[{"Node":{"node_id":5555007473125503522,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[4.52049614488817,0.0,0.0,4.52049614488817,721.7241274196006,66.5361619515896]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14946189826912398678,{"inputs":[{"Node":{"node_id":10086073308516686449,"output_index":0}},{"Node":{"node_id":12030171742672119253,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14982414026754548178,{"inputs":[{"Node":{"node_id":13045580349734858212,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-25.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14991324592500870173,{"inputs":[{"Node":{"node_id":542361600097372754,"output_index":0}},{"Node":{"node_id":10860592954464951000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14993053984267866751,{"inputs":[{"Node":{"node_id":13907578809542898348,"output_index":0}},{"Node":{"node_id":9863310024364795214,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15038739378867834454,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[654.3978052126201,51.621399176954746]],[2,[667.4787379972565,58.20576131687244]],[3,[691.5336076817558,52.14814814814816]],[4,[704.965706447188,54.25514403292181]],[5,[704.6145404663924,55.39643347050756]],[6,[687.4951989026064,54.518518518518526]],[7,[662.3868312757203,59.61042524005489]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[6.145404663923159,-1.0534979423868336]],[3,[7.723134415788309,-0.2640387834457485]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[-10.156808190486911,1.6663513437517778]],[7,[-4.546573253919632,-2.2347563451469625]]],"handle_end":[[1,[-5.875074923313605,1.0071557011394745]],[2,[-10.271604938271594,0.35116598079560646]],[3,null],[4,[0.0,0.0]],[5,[11.237311385459408,-1.8436213991769537]],[6,[5.179698216735233,2.5459533607681664]],[7,[0.0,0.08779149519890694]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15126865253122550765,{"inputs":[{"Node":{"node_id":13014628586360765651,"output_index":0}},{"Node":{"node_id":5951141753420874616,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15177845878727456758,{"inputs":[{"Node":{"node_id":14225285635863713990,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[72.14814814814815,0.0,0.0,72.14814814814815,762.5185185185184,609.6543209876545]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15239301303367148581,{"inputs":[{"Node":{"node_id":11268046366284173800,"output_index":0}},{"Node":{"node_id":5269304445610080925,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15286091228862934481,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[623.1001371742112,22.694101508916333]],[2,[627.0946502057614,23.00137174211249]],[3,[638.5953360768175,27.56652949245542]],[4,[665.7229080932784,23.79149519890261]],[5,[684.554183813443,27.654320987654327]],[6,[661.2894375857338,26.381344307270236]],[7,[637.0589849108368,29.980795610425247]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[2.150891632373032,1.5802469135802468]],[3,[5.3991769547326385,0.13168724279836042]],[4,[6.672153635116501,-0.35116598079560646]],[5,[0.0,0.0]],[6,[-11.456790123456813,0.9657064471879302]],[7,[-6.089851956901498,-0.48236451143773706]]],"handle_end":[[1,[-2.150891632373032,-1.5802469135802468]],[2,[-5.486565700800156,-0.13381867562927496]],[3,[-6.672153635116501,0.35116598079560646]],[4,[-0.9218106995884908,-1.0534979423868336]],[5,[11.456790123456813,-0.9657064471879336]],[6,[4.433470507544598,0.35116598079561]],[7,[2.194787379972581,3.906721536351163]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15303587427289959766,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[610.6666666666666,706.6666666666666]],[2,[818.2222222222222,566.2222222222222]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-82.66666666666674,97.77777777777771]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15395954548128560685,{"inputs":[{"Node":{"node_id":13475705179546695973,"output_index":0}},{"Node":{"node_id":16767482995096345179,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15446793500614592278,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[694.3429355281208,73.8326474622771]],[2,[702.244170096022,76.11522633744856]],[3,[722.3484224965707,77.2565157750343]],[4,[725.5967078189301,90.3374485596708]],[5,[718.2222222222222,97.09739368998628]],[6,[724.6310013717421,85.86008230452676]],[7,[718.3100137174213,77.2565157750343]],[8,[697.5034293552812,77.4320987654321]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[5.267489711934218,-0.7023319615912129]],[3,[3.456189131014753,3.3025807251918877]],[4,[-1.9392278971834005,5.143169640356035]],[5,[0.0,0.0]],[6,[-0.7023319615914261,-5.091906721536347]],[7,[-6.236870142765838,-1.74052190030676]],[8,[-3.5116598079559935,-1.6680384087791396]]],"handle_end":[[1,[-5.267489711934218,0.7023319615912129]],[2,[-3.950617283950578,-3.775034293552821]],[3,[2.0192043895747247,-5.355281207133089]],[4,[0.0,0.0]],[5,[0.6823799889585871,4.947254919948108]],[6,[3.7750342935527215,1.0534979423868265]],[7,[3.5116598079559935,1.6680384087791396]],[8,[0.08779149519887142,0.08779149519891405]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15460109068588328521,{"inputs":[{"Node":{"node_id":5185036609290210853,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.79129803,"green":0.6038274,"blue":0.31854683,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.79129803,"green":0.6038274,"blue":0.31854683,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[35.016295332236496,0.0,0.0,35.016295332236496,687.846364883402,52.85840573083371]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15466714490303763249,{"inputs":[{"Node":{"node_id":10514847656270897393,"output_index":0}},{"Node":{"node_id":11659756061767599421,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15492651270767932214,{"inputs":[{"Node":{"node_id":6580280438672662494,"output_index":0}},{"Node":{"node_id":2698266912167150713,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15498700602024283966,{"inputs":[{"Node":{"node_id":15466714490303763249,"output_index":0}},{"Node":{"node_id":9847383247226990698,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15518174914032911052,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[851.5555555555557,370.66666666666663]],[2,[814.2222222222223,498.66666666666663]],[3,[639.1111111111112,614.6666666666666]],[4,[429.7777777777778,551.5555555555555]],[5,[262.6666666666667,423.5555555555556]],[6,[129.77777777777777,406.2222222222222]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6]],"handle_primary":[[1,[0.0,0.0]],[2,[-43.55555555555554,54.66666666666663]],[3,[-83.11111111111109,3.111111111111086]],[4,[-74.22222222222217,-57.77777777777783]],[5,[-58.2222222222222,-21.77777777777783]]],"handle_end":[[1,[43.55555555555554,-54.66666666666663]],[2,[83.11111111111109,-3.111111111111086]],[3,[74.22222222222217,57.77777777777783]],[4,[66.87431172777582,25.01405553176352]],[5,[57.333333333333314,-5.777777777777828]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15578929303912288394,{"inputs":[{"Node":{"node_id":10770443343193024138,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[55.20987654320993,0.0,0.0,55.20987654320993,616.0987654320988,28.1566834324036]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15637103575662751567,{"inputs":[{"Node":{"node_id":314278016428495768,"output_index":0}},{"Node":{"node_id":4350324834849900949,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15656854169166220905,{"inputs":[{"Node":{"node_id":7821977654068146599,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-5.0,22.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15735375935164094402,{"inputs":[{"Node":{"node_id":3414873131936208778,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[64.0,0.0,0.0,64.0,697.7777777777777,845.7777777777777]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15798070933198867970,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[595.1111111111111,513.3333333333333]],[2,[642.2222222222222,536.8888888888889]],[3,[598.6666666666666,547.1111111111111]],[4,[536.0,522.2222222222221]],[5,[449.99999999999994,445.3333333333333]],[6,[438.18064449587104,508.2403828865154]],[7,[384.7140020398532,440.0243218219409]],[8,[350.6666666666667,340.0]],[9,[424.44444444444446,340.0]],[10,[508.88888888888886,389.33333333333337]],[11,[588.6666666666665,453.3333333333333]],[12,[660.0,500.66666666666663]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-18.370370370370324,2.1728395061728634]],[4,[-25.28395061728401,-13.827160493827025]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[5.531031978208716,-44.24825582567013]],[8,[-46.969945387028645,-26.215783471829923]],[9,[24.0,8.0]],[10,[25.481481481481467,20.4444444444444]],[11,[22.666666666666856,18.0]],[12,[-31.999999999999886,10.666666666666686]]],"handle_end":[[1,[-58.22222222222217,-1.3333333333332575]],[2,[18.370370370370324,-2.1728395061728634]],[3,[25.283950617284063,13.827160493827025]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[-4.764895727801786,38.11916582241446]],[7,[28.6666666666668,16.000000000000057]],[8,[-24.0,-8.0]],[9,[-25.481481481481467,-20.4444444444444]],[10,[-23.199803616588156,-18.42337346023163]],[11,[-17.185185185185105,5.925925925925867]],[12,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15815816861435910950,{"inputs":[{"Node":{"node_id":4105711298139980122,"output_index":0}},{"Node":{"node_id":17815494794630739611,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15827578515555598997,{"inputs":[{"Node":{"node_id":15656854169166220905,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[91.07928909050132,0.0,0.0,91.07928909050132,825.9524005970999,667.6234646401286]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15857077552290328068,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[848.8888888888889,330.66666666666663]],[2,[820.8888888888889,395.55555555555554]],[3,[740.0,516.0]],[4,[702.2222222222222,621.3333333333333]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[-15.111111111111086,22.66666666666663]],[3,[-17.77777777777783,35.55555555555554]]],"handle_end":[[1,[15.111111111111086,-22.66666666666663]],[2,[17.77777777777783,-35.55555555555554]],[3,[6.222222222222172,-38.66666666666674]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15896921950407486754,{"inputs":[{"Node":{"node_id":13163272246010991228,"output_index":0}},{"Node":{"node_id":11199691961479466803,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15949658764632267703,{"inputs":[{"Node":{"node_id":14012583111791538162,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15961046538654083626,{"inputs":[{"Node":{"node_id":1889157037801767612,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15982852655074258238,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[837.9999999999998,535.8024691358025]],[2,[798.222222222222,639.8024691358025]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[31.037037037037067,-61.11111111111131]]],"handle_end":[[1,[34.000000000000114,-59.77777777777783]],[2,null]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16051539163551573193,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[708.0000000000001,769.3333333333333]],[2,[609.7777777777777,896.0]],[3,[514.6666666666666,1025.7777777777778]],[4,[519.1111111111111,1026.2222222222222]],[5,[588.0,930.6666666666666]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-54.66666666666663,69.33333333333314]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[24.0,-29.77777777777783]]],"handle_end":[[1,[54.66666666666663,-69.33333333333326]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[-24.0,29.777777777777715]],[5,[-28.44444444444457,47.111111111111086]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16137033772363318157,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[688.566255144033,175.3371742112483]],[2,[720.417009602195,178.00603566529497]],[3,[720.1360768175583,181.58792866941016]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[29.423007364946784,-0.024697364703285984]],[2,[1.8041152263373303,2.00164609053499]],[3,[-1.1237311385458495,-3.125377229080982]]],"handle_end":[[1,null],[2,null],[3,[12.04499314128941,0.8076817558298615]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16175421708184657649,{"inputs":[{"Node":{"node_id":8698602280607307123,"output_index":0}},{"Node":{"node_id":514796034658094296,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16195626650123806176,{"inputs":[{"Node":{"node_id":14057307926677215422,"output_index":0}},{"Node":{"node_id":1869448627329502330,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16290933138334939444,{"inputs":[{"Node":{"node_id":17426609415699324395,"output_index":0}},{"Node":{"node_id":14888395629683671889,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16324258033206362312,{"inputs":[{"Node":{"node_id":16732130236852371275,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16339345235172368839,{"inputs":[{"Node":{"node_id":14778750092903591172,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[9.829216243064453,0.0,0.0,9.829216243064453,146.1529778442548,204.3564697949558]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16434255153991868080,{"inputs":[{"Node":{"node_id":6124821161363551058,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16446146761452576438,{"inputs":[{"Node":{"node_id":12131058586835568367,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[619.1444612416404,54.266956717585614]},"exposed":false}},{"Value":{"tagged_value":{"F64":-35.05804989521759},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[5.617278800347149,2.5068847538738956]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[6.794509856837352e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16450742929146919960,{"inputs":[{"Node":{"node_id":14887821801874852671,"output_index":0}},{"Node":{"node_id":11899713172487274471,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16530658574540156160,{"inputs":[{"Node":{"node_id":11666664915283969027,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[23.70370370370381,12.641975308641918]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16536768589601337644,{"inputs":[{"Node":{"node_id":4222034829755771252,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[13.11273153873293,0.0,0.0,13.11273153873293,152.41813265879796,256.39506172839504]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16551385471328831128,{"inputs":[{"Node":{"node_id":14991324592500870173,"output_index":0}},{"Node":{"node_id":17207349373429328029,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16614450796751955858,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[902.6666666666666,446.6666666666667]],[2,[757.1358024691358,661.5308641975308]],[3,[481.33333333333337,826.6666666666666]],[4,[327.3333333333333,1024.6666666666663]],[5,[807.3333333333334,1026.0]],[6,[845.3333333333333,842.0000000000001]],[7,[918.6666666666664,604.6666666666666]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-138.41983388553547,108.26897897977506]],[3,[-131.33333333333337,78.66666666666652]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[49.4943341398548,-116.98660796692934]],[7,[16.000000000000227,-89.99999999999989]]],"handle_end":[[1,[134.66666666666686,-105.33333333333326]],[2,[143.2366194125077,-85.79655375977609]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-36.66666666666663,86.66666666666652]],[6,[-16.71260304301461,94.00839211695676]],[7,[3.3333333333333712,32.00000000000006]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16649851742084147477,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[870.6666666666665,383.55555555555554]],[2,[838.6666666666666,564.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[16.000000000000227,37.33333333333337]]],"handle_end":[[1,[48.44444444444446,-91.11111111111109]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16732130236852371275,{"inputs":[{"Node":{"node_id":4832236468224231783,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16756940771483104467,{"inputs":[{"Node":{"node_id":13975451746581400000,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.68668544,"green":0.25015837,"blue":0.1221388,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[65.86666666666679,0.0,0.0,65.86666666666679,835.7333333333332,679.6]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16767482995096345179,{"inputs":[{"Node":{"node_id":6532401937876437300,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[17.70252644212519,0.0,0.0,17.70252644212519,632.728073038953,145.90043352311002]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16796171662855500935,{"inputs":[{"Node":{"node_id":14993053984267866751,"output_index":0}},{"Node":{"node_id":9371909264427723282,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16805628435335819723,{"inputs":[{"Node":{"node_id":10689298484366290551,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5271152,"green":0.02121901,"blue":0.015996292,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[6.565726185803328,0.0,0.0,6.565726185803328,151.19073539858246,249.65980592975225]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17064046832210629373,{"inputs":[{"Node":{"node_id":12219771677493189964,"output_index":0}},{"Node":{"node_id":12049041947382267086,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17118107476414252025,{"inputs":[{"Node":{"node_id":6645255982686652881,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[74.2222222222222,480.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[40.0,40.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17133591775058457007,{"inputs":[{"Node":{"node_id":18067513817508158001,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17147975601187022720,{"inputs":[{"Node":{"node_id":18015048324114736039,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[213.31806909466547,0.0,0.0,213.31806909466547,593.575033756186,151.92592592592592]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17207349373429328029,{"inputs":[{"Node":{"node_id":17967471489196302183,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[234.07407407407413,0.0,0.0,234.07407407407413,334.8148148148148,905.4814814814812]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17207895962122263432,{"inputs":[{"Node":{"node_id":11573595155909211511,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17324767436949538365,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[503.11111111111114,614.6666666666666]],[2,[362.22222222222223,512.0]],[3,[158.66666666666669,419.55555555555554]],[4,[150.22222222222223,429.3333333333333]],[5,[119.1111111111111,456.44444444444446]],[6,[289.7777777777778,503.1111111111111]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-52.888888888888914,-48.44444444444446]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[89.85096850895411,61.20347364650138]]],"handle_end":[[1,[52.888888888888914,48.44444444444446]],[2,[76.0,-1.7777777777777717]],[3,[0.0,0.0]],[4,[7.1111111111111,-35.55555555555554]],[5,[-89.85096850895414,-61.20347364650138]],[6,[0.8888888888888005,-0.4444444444444571]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17336535036064625290,{"inputs":[{"Node":{"node_id":10421722418968896452,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[49.47996245659249,5.913900401382151]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9277405532359332,0.9277405532359332]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17364155187784942740,{"inputs":[{"Node":{"node_id":1378578509112405,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.79129803,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.79129803,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[12.68128551488246,0.0,0.0,12.68128551488246,590.0073290255841,62.91177564395671]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17378885078543074499,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[823.2222222222221,660.4444444444445]],[2,[745.5,826.0]],[3,[707.5,1026.5]],[4,[709.5555555555554,1026.6666666666667]],[5,[740.4444444444443,857.1111111111111]],[6,[725.7777777777779,1026.370370370371]],[7,[727.5555555555554,1026.6666666666663]],[8,[746.0000000000001,842.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-24.5,85.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[17.33333333333337,-84.99999999999989]]],"handle_end":[[1,[24.5,-85.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[-23.11111111111109,90.44444444444456]],[5,[-7.555555555555884,-59.25925925925992]],[6,[0.0,0.0]],[7,[-26.8034437596026,131.4399645903585]],[8,[1.772016460905547,0.9591220850479658]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17426609415699324395,{"inputs":[{"Node":{"node_id":15896921950407486754,"output_index":0}},{"Node":{"node_id":11464423670065789907,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17494926338451345058,{"inputs":[{"Node":{"node_id":1167210731467447244,"output_index":0}},{"Node":{"node_id":9529195152569434392,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17529660518597229229,{"inputs":[{"Node":{"node_id":3802858053991775169,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17699121037850769131,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[531.1111111111111,364.0]],[2,[429.33333333333326,295.1111111111111]],[3,[282.2222222222222,277.3333333333333]],[4,[158.22222222222223,332.0]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[-56.8888888888888,-24.0]],[3,[-33.333333333333286,6.666666666666686]]],"handle_end":[[1,[56.8888888888888,24.0]],[2,[33.333333333333314,-6.666666666666686]],[3,[60.0,-41.77777777777777]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17815494794630739611,{"inputs":[{"Node":{"node_id":14079496619264986678,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[12.049382716049422,0.0,0.0,12.049382716049422,597.2345679012346,76.52749835097117]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17891208858820401648,{"inputs":[{"Node":{"node_id":1204243038352113866,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-7.407407407407391,4.740740740740762]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17945736750161448391,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[689.4327280262556,73.68042956754955]],[2,[688.3433248095167,92.67923984990472]],[3,[687.4660700953133,94.52064202140812]],[4,[687.6968543916372,70.6398816184091]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[-1.460603632035259,12.298077567102167]],[2,[0.0,0.0]],[3,[-0.975596082205584,-10.16276974584038]],[4,[0.0,0.0]]],"handle_end":[[1,null],[2,[0.6631784948407358,-0.4471776104951459]],[3,[0.0,0.0]],[4,[-0.3670368206467174,-1.6914035044494111]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17967471489196302183,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[339.25925925925924,1025.185185185185]],[2,[568.8888888888889,785.4814814814813]],[3,[334.8148148148148,1025.4814814814813]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[-209.77777777777777,108.44444444444468]],[2,[42.07407407407419,-157.6296296296293]],[3,null]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17971411534648521628,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":14862049226133442027,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18015048324114736039,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"delta":[[1,[687.4074074074074,99.1604938271605]],[2,[683.0617283950618,104.2962962962963]],[3,[675.3580246913581,68.74074074074075]],[4,[654.4197530864197,54.91358024691358]],[5,[639.8024691358025,44.24691358024691]],[6,[617.283950617284,44.641975308641975]],[7,[607.2098765432099,55.308641975308646]],[8,[613.3333333333334,44.24691358024691]],[9,[609.3827160493827,43.65432098765433]],[10,[597.530864197531,73.08641975308642]],[11,[596.9382716049383,85.13580246913581]],[12,[603.4567901234568,92.8395061728395]],[13,[616.2962962962963,115.16049382716052]],[14,[630.716049382716,132.3456790123457]],[15,[664.8888888888889,140.64197530864195]],[16,[672.5925925925926,176.5925925925926]],[17,[757.7283950617285,217.48148148148147]],[18,[799.2098765432099,253.23456790123456]],[19,[797.8271604938273,246.1234567901235]],[20,[805.1358024691358,260.34567901234567]],[21,[805.925925925926,230.9135802469136]],[22,[785.9753086419753,197.13580246913585]],[23,[760.8888888888889,175.80246913580248]],[24,[746.8641975308642,175.40740740740742]],[25,[737.7777777777778,170.07407407407408]],[26,[752.1975308641976,172.83950617283952]],[27,[722.1728395061729,147.1604938271605]],[28,[730.2716049382716,169.4814814814815]],[29,[705.1851851851852,106.27160493827162]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,1]],"handle_primary":[[1,[-2.1728395061728634,1.5802469135802255]],[2,[-8.120713305898448,-14.573388203017842]],[3,[-15.209876543209816,-1.7777777777777717]],[4,[-2.3703703703704377,-3.555555555555557]],[5,[-9.48148148148141,0.9876543209876516]],[6,[-8.09876543209873,4.740740740740733]],[7,[-0.9876543209876444,-4.740740740740733]],[8,[-1.1851851851851052,-1.1851851851851904]],[9,[-14.024691358024713,15.802469135802482]],[10,[-6.320987654320902,4.740740740740733]],[11,[3.3580246913580822,1.9753086419753176]],[12,[5.728395061728406,16.98765432098766]],[13,[2.370370370370324,7.308641975308632]],[14,[5.728395061728293,2.370370370370381]],[15,[6.913580246913625,9.87654320987656]],[16,[29.23456790123464,10.666666666666686]],[17,[20.594048174910657,8.937919170354007]],[18,[0.0,-2.172839506172835]],[19,[4.543209876543187,5.925925925925952]],[20,[0.0,0.0]],[21,[-2.5679012345678984,-9.481481481481469]],[22,[-7.506172839506121,-7.901234567901298]],[23,[-2.5679012345678984,-0.592592592592581]],[24,[-5.3333333333332575,-2.5679012345678984]],[25,[0.0,0.0]],[26,[0.0,0.0]],[27,[0.0,0.0]],[28,[0.0,0.0]],[29,[-13.234567901234527,-3.3580246913580396]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[2.3703703703704377,3.555555555555557]],[4,[9.48148148148141,-0.9876543209876444]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-3.3580246913580822,-1.9753086419753176]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[-5.728395061728293,-2.370370370370381]],[14,[-6.913580246913625,-9.876543209876502]],[15,[0.0,0.0]],[16,[-20.59404817491054,-8.937919170353979]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[0.0,0.0]],[20,[2.5679012345678984,9.481481481481438]],[21,[7.506172839506121,7.901234567901213]],[22,[2.5679012345678984,0.592592592592581]],[23,[5.3333333333332575,2.5679012345678984]],[24,[0.0,0.0]],[25,[-4.740740740740762,0.790123456790127]],[26,[19.35802469135808,26.864197530864203]],[27,[-3.7530864197531177,-7.506172839506178]],[28,[17.580246913580254,58.07407407407402]],[29,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0],[27,0],[28,0],[29,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":29}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18067513817508158001,{"inputs":[{"Node":{"node_id":16649851742084147477,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18190631752493248867,{"inputs":[{"Node":{"node_id":12428327489525325219,"output_index":0}},{"Node":{"node_id":10375238420217738812,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18207065424980079673,{"inputs":[{"Node":{"node_id":13035777574951374461,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"core_types::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18214377096178867498,{"inputs":[{"Node":{"node_id":7747398671834040298,"output_index":0}},{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":300.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"core_types::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18279507457571359732,{"inputs":[{"Node":{"node_id":8697043784435445845,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.78353786,"green":0.6038274,"blue":0.33245158,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[549.1992759930885,0.0,0.0,549.1992759930885,153.4367170487449,235.84305835298545]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18319784717194273926,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[172.22222222222217,564.7777777777779]],[2,[150.22222222222223,568.4444444444445]],[3,[167.0,691.0]],[4,[574.6666666666666,712.4444444444443]],[5,[418.2222222222222,754.6666666666666]],[6,[443.1111111111111,783.1111111111111]],[7,[558.6666666666666,749.7777777777778]],[8,[706.6666666666666,687.5555555555554]],[9,[828.0,570.2222222222221]],[10,[610.6666666666666,712.4444444444443]],[11,[595.0,690.0]],[12,[437.99999999999994,690.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,1]],"handle_primary":[[1,[0.0,0.0]],[2,[18.111111111111057,85.22222222222229]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[32.888888888888914,-13.333333333333483]],[8,[60.44444444444446,-39.55555555555566]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[-98.22222222222224,-28.0]]],"handle_end":[[1,null],[2,null],[3,[-128.44444444444446,26.22222222222217]],[4,[54.22222222222223,-9.333333333333371]],[5,[-18.66666666666663,-4.888888888888914]],[6,[-32.888888888888914,13.333333333333483]],[7,[-60.44444444444446,39.55555555555566]],[8,[0.0,0.0]],[9,[145.77777777777771,-61.777777777777715]],[10,[-1.3333333333333712,21.77777777777783]],[11,[98.22222222222224,28.0]],[12,[161.33333333333337,34.66666666666674]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18422317423856403288,{"inputs":[{"Node":{"node_id":10133176481349663495,"output_index":0}},{"Node":{"node_id":12594527670567285670,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[1378578509112405,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[172538270105470471,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[314278016428495768,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[421715625023770179,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[431994205232245356,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,7]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[454416440369338250,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[501401493219507773,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[514796034658094296,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[541002100261582638,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[542361600097372754,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[581013017684525986,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[615144098061106242,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[907841922684377912,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[952330505278607301,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1019037285881657884,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1157261387411722141,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1162381870526064378,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1167210731467447244,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1204243038352113866,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1235106489581249820,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1272070255512697108,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1384427686127078856,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1621196991038859321,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1659518581611333812,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1661691009086487874,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1689789805659535712,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1713644030979611623,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1785173043494067496,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1806828617441445250,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1869448627329502330,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1889157037801767612,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1984475088429379731,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2044103368441997753,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2087303479944421366,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2114821098684715755,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2126710823743005151,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2175432926627256613,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,328]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2282726379014798660,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2394762731964337494,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-3,1]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2397243911096708995,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2422139482859833437,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2440895173483452224,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2594533001540454577,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2641530639940889619,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2659768650911099730,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2660652185019504730,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2682920349304670808,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2698266912167150713,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2780251074492832077,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2878992817082507910,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2959546142916532439,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3121275823460307102,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3165571685352930240,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3170924135668664007,{"persistent_metadata":{"display_name":"Pointing Arm","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3226457726231232839,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3406722917122601552,{"persistent_metadata":{"display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,209]}}},"network_metadata":null}}],[3414873131936208778,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3535178979443201645,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3627710206997006419,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3636653585682494814,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3649809135741361946,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3670529450440935325,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3686761601672683183,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3802858053991775169,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3827449344952693766,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3831999914273679591,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3955326429435439190,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3970516859959908758,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3971837674569123876,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3992858139802231032,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4078100635676202528,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4105711298139980122,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4131094614457622424,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4222034829755771252,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4236845268521674740,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4248321400839848160,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,124]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4265165189651403984,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4307303572241320716,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,319]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4341772758799935306,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4350324834849900949,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4372998635946271235,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4422453582814483232,{"persistent_metadata":{"display_name":"Hair and Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-7,4]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4453139144069993994,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4479074488343511985,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4493274523708782092,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4572557574846980832,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4577174813962563383,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4577638792388493935,{"persistent_metadata":{"display_name":"Head and Neck","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":78}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4663768795652429571,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4784708315242877950,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4787732047489141819,{"persistent_metadata":{"display_name":"Tucked Arm","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":24}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4832236468224231783,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4859656512650360562,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4909350123806022131,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5002654561220917457,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5009664118231399060,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5020096817747898028,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5040278174920511484,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5174744389209053970,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5185036609290210853,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5213978458941436169,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5269304445610080925,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5278509881589546420,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5302437193964714993,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5326536612985524219,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5455777299776842371,{"persistent_metadata":{"display_name":"Beaded Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":78}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5471152581000334146,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5555007473125503522,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5861306074868809692,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5951141753420874616,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6124821161363551058,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6282972142629473139,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6292009934909381201,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,88]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6416452251137958677,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6532401937876437300,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6580280438672662494,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6645255982686652881,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6666260895482068061,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6672826052605647592,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6749771744300551215,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6867142265138950838,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6973438081601736688,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6988349135757634271,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7141088190930752823,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7262199696924786895,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7320676248579211727,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7385465194555106679,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,211]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7447657690776686262,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7450965328305122110,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7466034304713056391,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7505360855062237520,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7525593029671097583,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7654665057468818389,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7659717355245331967,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7747398671834040298,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7821977654068146599,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7893851488963635918,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7922156219537051964,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8091904580702893317,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8230694129617719636,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8240895922641772563,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8375495949882478840,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8410534738018320047,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8413863870096329943,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8543051864256131356,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8595304668947966919,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8644924780109919177,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8697043784435445845,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8698602280607307123,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8699675339613677057,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8766106989344197438,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8814059393325469059,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8934999452649011837,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,130]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9182448229950585507,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9271343782272072828,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9276497172451351253,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9371909264427723282,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9374264173303233490,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9425359632144678256,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9470742171134780193,{"persistent_metadata":{"display_name":"Dotted Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":81}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9529195152569434392,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9684857454501250999,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9698363115186534174,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9740500978584792725,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9778375740427894463,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9782123335421401489,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9847383247226990698,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9863310024364795214,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9954843247420111867,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10086073308516686449,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10127467043900015225,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10133176481349663495,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10190227675276560561,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10253927692147706615,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10264089084180279094,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10336592647221792772,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10375238420217738812,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10415872992231003638,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10420981328998103391,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10421722418968896452,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10424806499648491677,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10432831427187785843,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10514847656270897393,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10586744777717861556,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10587073897090054035,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10599660455959346550,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10619788176782820865,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10689298484366290551,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10770443343193024138,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10792166025753022402,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10795820039540504703,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10860592954464951000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10918055532782314571,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10928540355449103287,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11021243031011826737,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11025165626998987360,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11058365317860779469,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11194653561109699287,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11199691961479466803,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11268046366284173800,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11356586238302409958,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11417901103965737900,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11451028343967836482,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11464423670065789907,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11479098559726891734,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11481949351661484921,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11553850607251055696,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11565160497886435388,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11573595155909211511,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11590691579869262546,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11616089678400336955,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11630078441485655672,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11632506522064533635,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11656581020969095354,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11659756061767599421,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11666664915283969027,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11804065810513502701,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11899713172487274471,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12030171742672119253,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12049041947382267086,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12062649793560663566,{"persistent_metadata":{"display_name":"Solid Red Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12131058586835568367,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12219771677493189964,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12224498203743157414,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12313564802550122052,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12385950900718181935,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12387541320114693418,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12428327489525325219,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12473080738469616517,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12496143061817048445,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12531351117929704587,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12554368619682347699,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12594527670567285670,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12761901161949743155,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12801133692316734622,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12838133055063962839,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12876462860151722087,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12880230498984021417,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13014628586360765651,{"persistent_metadata":{"display_name":"Dotted Aura","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13014916927589286309,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13035777574951374461,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13045087323693407920,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13045580349734858212,{"persistent_metadata":{"display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13163272246010991228,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13231685386999438557,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13261814586176172586,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13269760558336088742,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13302269488061286120,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13352561089252322209,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13368990606109678244,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13444661581815146533,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,97]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13475705179546695973,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13481022631108980683,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13557369662261607646,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13594126018052902276,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13594670583065022897,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13644138583806412631,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13907578809542898348,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[13975451746581400000,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14012583111791538162,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14012648643507848353,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14029368390543839187,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14035980686649077716,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14057307926677215422,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14079496619264986678,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14098374807212007572,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14209241002058525241,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14225285635863713990,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14285767317419627814,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14345191642063772510,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14537754528543289381,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14539627480594383748,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14598755603287563819,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14675232891471617236,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14778750092903591172,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14797986717815207528,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14817659161913199655,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14831840560430171946,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14862049226133442027,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14883504161508594099,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,295]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14887821801874852671,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14888395629683671889,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14894569344576297448,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14946189826912398678,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14982414026754548178,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14991324592500870173,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14993053984267866751,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15038739378867834454,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15126865253122550765,{"persistent_metadata":{"display_name":"Dotted Bodice","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":21}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15177845878727456758,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15239301303367148581,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15286091228862934481,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15303587427289959766,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15395954548128560685,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15446793500614592278,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15460109068588328521,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15466714490303763249,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15492651270767932214,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15498700602024283966,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15518174914032911052,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15578929303912288394,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15637103575662751567,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15656854169166220905,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15735375935164094402,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15798070933198867970,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15815816861435910950,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15827578515555598997,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15857077552290328068,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15896921950407486754,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15949658764632267703,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15961046538654083626,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15982852655074258238,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16051539163551573193,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16137033772363318157,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16175421708184657649,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16195626650123806176,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16290933138334939444,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16324258033206362312,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16339345235172368839,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16434255153991868080,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16446146761452576438,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16450742929146919960,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16530658574540156160,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16536768589601337644,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16551385471328831128,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16614450796751955858,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16649851742084147477,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16732130236852371275,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16756940771483104467,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16767482995096345179,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16796171662855500935,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16805628435335819723,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17064046832210629373,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17118107476414252025,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[-144.5,-72.5],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,206.0,449.0],"node_graph_width":0.0}}}}}],[17133591775058457007,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17147975601187022720,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17207349373429328029,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17207895962122263432,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17324767436949538365,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17336535036064625290,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17364155187784942740,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17378885078543074499,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17426609415699324395,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17494926338451345058,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17529660518597229229,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17699121037850769131,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17815494794630739611,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17891208858820401648,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17945736750161448391,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17967471489196302183,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17971411534648521628,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18015048324114736039,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18067513817508158001,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18190631752493248867,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18207065424980079673,{"persistent_metadata":{"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Separation","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Quantity","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Start Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stop Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18214377096178867498,{"persistent_metadata":{"display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18279507457571359732,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18319784717194273926,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[18422317423856403288,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[536.189658588631,-3318.035048010952],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1526.0,-2738.0],"node_graph_width":1980.0}}}},"collapsed":[[2394762731964337494,4422453582814483232],[2394762731964337494,4577638792388493935],[2394762731964337494,3170924135668664007],[2394762731964337494,4787732047489141819],[2394762731964337494,12062649793560663566],[2394762731964337494,5455777299776842371],[2394762731964337494,9470742171134780193],[2394762731964337494,15126865253122550765],[2394762731964337494,13014628586360765651]],"properties_panel_collapsed_sections":[],"commit_hash":"","document_ptz":{"pan":[-512.5,-511.648496025349],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":false,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/valley-of-spires.graphite b/demo-artwork/valley-of-spires.graphite index ec217dc18f..b2a1a03a2b 100644 --- a/demo-artwork/valley-of-spires.graphite +++ b/demo-artwork/valley-of-spires.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":16815500381887058038,"output_index":0}}],"nodes":[[74,{"inputs":[{"Node":{"node_id":75,"output_index":0}},{"Node":{"node_id":81,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[75,{"inputs":[{"Node":{"node_id":76,"output_index":0}},{"Node":{"node_id":161,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[76,{"inputs":[{"Node":{"node_id":77,"output_index":0}},{"Node":{"node_id":16164610528699022118,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[77,{"inputs":[{"Node":{"node_id":78,"output_index":0}},{"Node":{"node_id":448,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[78,{"inputs":[{"Node":{"node_id":79,"output_index":0}},{"Node":{"node_id":477,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[79,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":493,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[81,{"inputs":[{"Node":{"node_id":82,"output_index":0}},{"Node":{"node_id":87,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[82,{"inputs":[{"Node":{"node_id":83,"output_index":0}},{"Node":{"node_id":102,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[83,{"inputs":[{"Node":{"node_id":85,"output_index":0}},{"Node":{"node_id":117,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[85,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":155,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[87,{"inputs":[{"Node":{"node_id":88,"output_index":0}},{"Node":{"node_id":90,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[88,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":96,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[90,{"inputs":[{"Node":{"node_id":93,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5999119243817099,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5999119243817099,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.8142009530188992,0.0,0.0,0.8142009530188968,0.32017597146452564,0.5902044022091886]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[93,{"inputs":[{"Node":{"node_id":94,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[851.1666666666667,668.5377104806669]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[39.677869315599935,39.67786931560005]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[94,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[96,{"inputs":[{"Node":{"node_id":99,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.7594724231651877,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.7594724231651877,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.124294480293808,0.0,0.0,1.3099840420120037,-0.039177362759659246,0.5000000000000018]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[99,{"inputs":[{"Node":{"node_id":100,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[827.4018790826805,704.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[74.57030178326477,63.99999999999989]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[100,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.03917736275965821,1.5785983631388945e-15]],[2,[0.9501947601024644,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[102,{"inputs":[{"Node":{"node_id":103,"output_index":0}},{"Node":{"node_id":105,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[103,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":111,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[105,{"inputs":[{"Node":{"node_id":108,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.7721675713724807,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.7721675713724807,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[390.761295413478,-4.263256414560601e-14,0.0,346.777200769983,958.6167473835268,450.925897956864]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[108,{"inputs":[{"Node":{"node_id":109,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[858.7905598373798,601.6041802310946]},"exposed":false}},{"Value":{"tagged_value":{"F64":7.016709876377979e-15},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.1014123874504275,0.11427520552998474]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[7.90668593248704e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[109,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"remove":[],"delta":[[1,[865.1205730638582,195.5865278374037]],[2,[910.288570576692,217.7758226144784]],[3,[943.8009280356002,277.78154080585364]],[4,[956.3057818366484,357.1601779777255]],[5,[914.9853953636192,333.78153826272217]],[6,[838.3252046702362,291.37377319829744]],[7,[758.9465674983644,277.2378515101559]],[8,[810.5970505896508,321.8203737573716]],[9,[770.907732003715,320.7329951659761]],[10,[670.8689015953286,344.1116348809794]],[11,[730.1310348263835,333.2378489670244]],[12,[783.956275100461,383.2572641712176]],[13,[885.0824841002429,442.5193974022726]],[14,[783.956275100461,458.8300762732051]],[15,[728.4999669392903,519.7232773913535]],[16,[763.8397711596442,482.7524052839062]],[17,[813.8591863638374,482.2087159882085]],[18,[909.5485024066418,487.10191964948825]],[19,[988.3834502828158,483.83978387530175]],[20,[969.8980142290924,494.7135697892568]],[21,[990.5582074656068,498.5193948591411]],[22,[1000.3446147881664,518.0922095042602]],[23,[972.616460707581,519.7232773913535]],[24,[1014.480536476308,543.1019171063567]],[25,[1110.71354181481,529.509684713913]],[26,[1143.3348995566753,518.6358987999579]],[27,[1093.315484352482,509.93687006879384]],[28,[1134.0921815298134,465.8980371172759]],[29,[1205.8591685619167,441.9757081065748]],[30,[1277.62615559402,478.946580214022]],[31,[1336.888288825075,539.8397813321702]],[32,[1323.839745728329,479.4902695097197]],[33,[1284.1504271423933,435.99512585389954]],[34,[1256.9659623575055,413.8640589204806]],[35,[1281.975669959602,393.04367149377714]],[36,[1387.451393324966,404.4611467034299]],[37,[1302.6358631961166,363.1407602304008]],[38,[1223.8009153199428,370.7524103701693]],[39,[1145.5096567394662,398.4805644507546]],[40,[1180.3057716641222,344.11163488097947]],[41,[1216.7329544758718,262.5582405263166]],[42,[1287.4125629165796,203.2961072952616]],[43,[1210.2086829274988,227.76212560166044]],[44,[1156.927131949119,259.8397940478278]],[45,[1105.8203381535304,315.83979150469634]],[46,[1098.7523773094597,263.6456191177121]],[47,[1073.742669707363,200.0339715210751]],[48,[1078.092184072945,124.46115941908752]],[49,[1038.402865487009,182.635914058747]],[50,[1016.655293659099,296.810666155275]],[51,[994.3640325354912,266.3640655962009]],[52,[939.3251404063708,207.7548507796705]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29],[30,30],[31,31],[32,32],[33,33],[34,34],[35,35],[36,36],[37,37],[38,38],[39,39],[40,40],[41,41],[42,42],[43,43],[44,44],[45,45],[46,46],[47,47],[48,48],[49,49],[50,50],[51,51],[52,52]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,35],[35,36],[36,37],[37,38],[38,39],[39,40],[40,41],[41,42],[42,43],[43,44],[44,45],[45,46],[46,47],[47,48],[48,49],[49,50],[50,51],[51,52],[52,1]],"handle_primary":[[1,[0.0,0.0]],[2,[16.937999067312603,14.3156740497256]],[3,[7.06796084407074,48.3883473171]],[4,[0.0,0.0]],[5,[-19.02912534942118,-15.766989575234843]],[6,[-25.00970760209657,-1.0873785913954634]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[-26.64077548918988,2.7184464784887723]],[10,[0.0,0.0]],[11,[26.097086193492142,5.980582252675276]],[12,[41.864075768726934,30.606794749262978]],[13,[0.0,0.0]],[14,[-44.03883295151786,20.11650394081687]],[15,[0.0,0.0]],[16,[14.13592168814148,-1.631067887093252]],[17,[31.53397915046969,11.961164505350553]],[18,[18.485436053723447,-2.7184464784887723]],[19,[0.0,0.0]],[20,[0.0,0.0]],[21,[0.0,0.0]],[22,[0.0,0.0]],[23,[0.0,0.0]],[24,[39.145629290237935,9.786407322559626]],[25,[14.679610983839666,-8.155339435466317]],[26,[0.0,0.0]],[27,[0.0,0.0]],[28,[0.0,0.0]],[29,[20.116503940816983,1.631067887093252]],[30,[26.097086193492032,5.436892956977488]],[31,[0.0,0.0]],[32,[-24.466018306398837,-28.81553267198086]],[33,[-13.048543096746243,-19.57281464511908]],[34,[0.0,0.0]],[35,[8.699028731163935,-10.3300966182573]],[36,[0.0,0.0]],[37,[-48.38834731709994,-2.174757182791041]],[38,[-17.941746758026056,-1.0873785913955205]],[39,[0.0,0.0]],[40,[12.504853801048512,-14.135921688141591]],[41,[15.427586663144211,-29.493915679540574]],[42,[0.0,0.0]],[43,[-16.310678870932634,13.048543096746071]],[44,[-21.74757182791018,14.135921688141591]],[45,[0.0,0.0]],[46,[-6.524271548372781,-16.310678870932577]],[47,[-1.6310678870931952,-7.611650139768528]],[48,[0.0,0.0]],[49,[-10.873785913954862,28.81553267198086]],[50,[0.0,0.0]],[51,[-18.48543605372367,-25.009707602096626]],[52,[-26.097086193492142,-12.504853801048256]]],"handle_end":[[1,[-14.628148339931158,-12.363432230293256]],[2,[-7.067960844070626,-48.3883473171]],[3,[5.436892956977545,-25.553396897794357]],[4,[19.02912534942141,15.766989575234843]],[5,[25.00970760209657,1.0873785913954634]],[6,[0.0,0.0]],[7,[-5.436892956977545,-19.029125349421292]],[8,[26.64077548918988,-2.7184464784887723]],[9,[27.18446478488761,-22.291261123607853]],[10,[-26.097086193492142,-5.980582252675276]],[11,[-41.864075768726934,-30.606794749263088]],[12,[-31.533979150469577,-8.15533943546626]],[13,[44.03883295151786,-20.11650394081687]],[14,[0.0,0.0]],[15,[-14.13592168814148,1.631067887093252]],[16,[-31.53397915046969,-11.961164505350553]],[17,[-18.48543605372356,2.7184464784887723]],[18,[-11.41747520965282,-9.242718026861724]],[19,[3.805825069884008,-5.436892956977601]],[20,[-4.8932036612795855,-5.980582252675276]],[21,[-4.3495143655819675,-3.262135774186504]],[22,[3.805825069884122,-4.3495143655819675]],[23,[-39.14562929023816,-9.786407322559626]],[24,[-14.67961098383944,8.155339435466317]],[25,[-12.504853801048284,-3.262135774186504]],[26,[30.446600559074568,-5.980582252675276]],[27,[-8.15533943546643,25.00970760209657]],[28,[-20.11650394081721,-1.6310678870931952]],[29,[-26.097086193492032,-5.436892956977488]],[30,[-0.5436892956979591,-24.46601830639895]],[31,[24.466018306399064,28.81553267198086]],[32,[13.048543096746243,19.57281464511908]],[33,[0.0,0.0]],[34,[-8.699028731163935,10.330096618257244]],[35,[-71.76698703210332,-41.864075768726934]],[36,[48.388347317099715,2.174757182790927]],[37,[17.941746758026056,1.0873785913955205]],[38,[0.0,0.0]],[39,[-9.034630967226803,10.21306109338667]],[40,[-18.48543605372356,35.33980422035398]],[41,[-32.07766844616731,15.223300279537028]],[42,[16.310678870932634,-13.048543096746071]],[43,[21.74757182791018,-14.135921688141565]],[44,[0.0,0.0]],[45,[6.524271548372553,16.310678870932577]],[46,[1.6310678870931952,7.611650139768528]],[47,[-22.83495041930587,36.42718281174942]],[48,[10.87378591395509,-28.81553267198086]],[49,[-5.98058225267539,-75.02912280628982]],[50,[18.48543605372356,25.009707602096626]],[51,[26.097086193492032,12.50485380104834]],[52,[21.791261123607796,0.5873785913955203]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0],[27,0],[28,0],[29,0],[30,0],[31,0],[32,0],[33,0],[34,0],[35,0],[36,0],[37,0],[38,0],[39,0],[40,0],[41,0],[42,0],[43,0],[44,0],[45,0],[46,0],[47,0],[48,0],[49,0],[50,0],[51,0],[52,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":52}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[111,{"inputs":[{"Node":{"node_id":114,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.0438400201708171,0.0,0.0,1.0438400201708171,-0.04384002017081715,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[114,{"inputs":[{"Node":{"node_id":115,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[926.5490676442352,657.3888888888888]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[97.92901234567933,111.111111111111]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[115,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.04384002017081715,1.8188575645616826e-15]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[117,{"inputs":[{"Node":{"node_id":118,"output_index":0}},{"Node":{"node_id":122,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[118,{"inputs":[{"Node":{"node_id":119,"output_index":0}},{"Node":{"node_id":128,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[119,{"inputs":[{"Node":{"node_id":120,"output_index":0}},{"Node":{"node_id":134,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[120,{"inputs":[{"Node":{"node_id":1635416892097245588,"output_index":0}},{"Node":{"node_id":140,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[122,{"inputs":[{"Node":{"node_id":126,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[19.5555555555556,-4.839506172839606,4.839506172839606,19.5555555555556,188.35185185185185,705.4876543209876]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[126,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"delta":[[1,[83.98971193415636,727.8086419753087]],[2,[79.11728395061729,724.0555555555555]],[3,[94.12962962962963,696.9938271604938]],[4,[102.03086419753087,696.7962962962963]],[5,[115.66049382716052,719.5123456790124]],[6,[123.75925925925928,720.3024691358024]],[7,[131.06790123456793,702.1296296296296]],[8,[148.8456790123457,665.3888888888888]],[9,[158.40763603109284,655.1124066453283]],[10,[158.3271604938272,661.4382716049382]],[11,[162.67283950617286,705.2901234567901]],[12,[169.3888888888889,709.0432098765432]],[13,[177.0925925925926,696.4012345679012]],[14,[188.5493827160494,680.4012345679012]],[15,[196.05555555555557,678.8209876543209]],[16,[211.0679012345679,719.5123456790124]],[17,[209.09259259259255,727.8086419753085]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,1]],"handle_primary":[[1,[-3.7139917695473343,-0.22427983539080287]],[2,[3.2490948717098007,-6.29142916067417]],[3,[2.3703703703704093,-2.5679012345678984]],[4,[3.753086419753103,4.9382716049382225]],[5,[0.9523778763475974,1.643318688599834]],[6,[0.0,0.0]],[7,[2.962962962962962,-6.320987654321016]],[8,[2.172839506172835,-5.3333333333332575]],[9,[1.416857186404485,0.2219173906416927]],[10,[-0.24572721430195088,3.082066920469856]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[3.555555555555543,-7.308641975308547]],[14,[2.3703703703703525,-2.5679012345678984]],[15,[2.370370370370381,3.950617283950692]],[16,[0.0,0.0]],[17,[-3.028806584362002,2.897119341564121]]],"handle_end":[[1,[-2.4142661179698734,4.6748971193414945]],[2,[-2.3703703703703525,2.5679012345678984]],[3,[-3.753086419753074,-4.9382716049382225]],[4,[-1.119341563786023,-1.9314128943758533]],[5,[-4.148148148148167,0.5925925925926094]],[6,[-2.962962962962962,6.320987654321016]],[7,[-2.172839506172835,5.3333333333332575]],[8,[-2.3218581751052625,-0.3636645334502191]],[9,[0.31458619112936503,-3.9457399786616634]],[10,[1.1851851851851904,-8.296296296296305]],[11,[-4.148148148148152,-0.39506172839503506]],[12,[-3.5555555555555713,7.308641975308547]],[13,[-2.370370370370381,2.5679012345678984]],[14,[-2.370370370370381,-3.950617283950692]],[15,[-3.753086419753089,-24.493827160493765]],[16,[3.77785186523289,-3.613597436310215]],[17,[4.846281557722946,0.29265633783461453]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":17}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[128,{"inputs":[{"Node":{"node_id":132,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[19.56336972417776,0.0,0.0,19.56336972417776,153.3152310988675,686.8790742342209]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[132,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[172.61522633744855,706.3436213991771]],[2,[158.95389422344155,655.6901143957208]],[3,[153.6522633744856,666.8374485596709]],[4,[158.12962962962962,718.0637860082305]],[5,[170.5082304526749,714.508230452675]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-1.8436213991769537,9.744855967078138]],[4,[0.0,0.0]],[5,[3.160493827160508,-3.5555555555554292]]],"handle_end":[[1,[10.930041152263357,25.448559670781947]],[2,[1.8436213991768968,-9.744855967078138]],[3,[0.0,0.0]],[4,[-3.403056460676396,3.828438518260782]],[5,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[134,{"inputs":[{"Node":{"node_id":138,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[37.1348988785971,0.0,0.0,37.1348988785971,90.03336397017412,704.4077331232154]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[138,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[126.55144032921808,714.7983539094649]],[2,[105.84979423868312,685.0102880658435]],[3,[90.17901234567904,708.7139917695472]],[4,[116.38477366255144,723.5946502057614]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-2.4237705319430347,10.543401813951732]],[4,[0.0,0.0]]],"handle_end":[[1,[16.460905349794245,13.695473251028716]],[2,[2.6337448559670804,-11.456790123456472]],[3,[0.0,0.0]],[4,[3.6604938271605647,11.166666666666742]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[140,{"inputs":[{"Node":{"node_id":143,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[1.0,0.0,0.0,1.0,0.0,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[143,{"inputs":[{"Node":{"node_id":144,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[22.81427346112025,718.7256085656885]},"exposed":false}},{"Value":{"tagged_value":{"F64":-1.6569586493181607},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[114.60967448512612,10.883703174332329]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.14452841816522286,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[144,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[155,{"inputs":[{"Node":{"node_id":159,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.5271152,"green":0.095307484,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.37123775,"green":0.082282715,"blue":0.036889445,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.5271152,"green":0.095307484,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.37123775,"green":0.082282715,"blue":0.036889445,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-2.710412887146333,-23.1111111111112,23.1111111111112,-2.710412887146333,242.68216655522804,730.7222222222223]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[159,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[-2.6666666666667,581.3333333333333]],[2,[153.0925925925926,632.7962962962963]],[3,[266.2777777777779,704.4077331232156]],[4,[249.09259259259255,770.8703703703704]],[5,[-2.6666666666666856,770.8703703703704]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[69.92592592592595,31.40740740740773]],[3,[8.273042653236644,16.012340619167617]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[-105.44980253803315,-47.36304690267639]],[2,[-9.18518518518522,-17.777777777777715]],[3,[19.407407407407447,-32.148148148148266]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[161,{"inputs":[{"Node":{"node_id":162,"output_index":0}},{"Node":{"node_id":168,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[162,{"inputs":[{"Node":{"node_id":164,"output_index":0}},{"Node":{"node_id":274,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[164,{"inputs":[{"Node":{"node_id":165,"output_index":0}},{"Node":{"node_id":318,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[165,{"inputs":[{"Node":{"node_id":166,"output_index":0}},{"Node":{"node_id":16821952675128396603,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[166,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":393,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[168,{"inputs":[{"Node":{"node_id":169,"output_index":0}},{"Node":{"node_id":184,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[169,{"inputs":[{"Node":{"node_id":170,"output_index":0}},{"Node":{"node_id":190,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[170,{"inputs":[{"Node":{"node_id":171,"output_index":0}},{"Node":{"node_id":196,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[171,{"inputs":[{"Node":{"node_id":172,"output_index":0}},{"Node":{"node_id":202,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[172,{"inputs":[{"Node":{"node_id":173,"output_index":0}},{"Node":{"node_id":208,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[173,{"inputs":[{"Node":{"node_id":174,"output_index":0}},{"Node":{"node_id":214,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[174,{"inputs":[{"Node":{"node_id":175,"output_index":0}},{"Node":{"node_id":220,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[175,{"inputs":[{"Node":{"node_id":176,"output_index":0}},{"Node":{"node_id":226,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[176,{"inputs":[{"Node":{"node_id":177,"output_index":0}},{"Node":{"node_id":232,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[177,{"inputs":[{"Node":{"node_id":178,"output_index":0}},{"Node":{"node_id":238,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[178,{"inputs":[{"Node":{"node_id":179,"output_index":0}},{"Node":{"node_id":244,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[179,{"inputs":[{"Node":{"node_id":180,"output_index":0}},{"Node":{"node_id":250,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[180,{"inputs":[{"Node":{"node_id":181,"output_index":0}},{"Node":{"node_id":256,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[181,{"inputs":[{"Node":{"node_id":182,"output_index":0}},{"Node":{"node_id":262,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[182,{"inputs":[{"Node":{"node_id":12768614558324028960,"output_index":0}},{"Node":{"node_id":268,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[184,{"inputs":[{"Node":{"node_id":188,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[39.72222222222206,0.0,0.0,39.72222222222206,987.6111111111112,567.0288370950365]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[188,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[1027.3333333333333,523.5555555555555]],[2,[987.6111111111112,593.3888888888889]],[3,[1026.2777777777778,610.4999999999999]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[28.22222222222217,-65.11111111111109]],[2,[-16.66666666666663,0.22222222222228535]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[190,{"inputs":[{"Node":{"node_id":193,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.804747218052076,-0.016814875394240036,0.016814875394240036,0.804747218052076,-0.00958710463040996,0.42190817007030024]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[191,{"inputs":[{"Node":{"node_id":194,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[193,{"inputs":[{"Node":{"node_id":191,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[965.2687196297846,544.9034434174798]},"exposed":false}},{"Value":{"tagged_value":{"F64":-98.54705053700596},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[17.59013219658168,55.471003102038694]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925513,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[194,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[-0.15531318767467384,0.11366419216517]],[2,[0.2647731761418837,0.17920265855050785]],[3,[0.7287108039915611,0.06963660702488284]],[4,[0.9388148027481048,0.674134940686276]],[5,[0.038029134760865314,0.7285470752399478]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.12249986382303002,-0.04615791866776875]],[3,[-0.06001521816071698,0.06545334966568245]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[-0.1993257782423989,0.03454533724430142]],[2,[-0.2265909018579063,0.03511994027079236]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[196,{"inputs":[{"Node":{"node_id":200,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[38.43682365493032,0.0,0.0,38.43682365493032,972.0555555555557,551.3395061728395]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[200,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[1004.392496062592,536.8475080018289]],[2,[993.9814814814814,530.7222222222222]],[3,[974.574074074074,539.3148148148148]],[4,[972.0555555555557,547.0185185185185]],[5,[990.3271604938273,558.7222222222222]],[6,[988.3518518518518,565.8333333333333]],[7,[988.9444444444443,571.9567901234568]],[8,[994.0802469135804,561.8388203017832]],[9,[1001.2407407407406,568.2037037037037]],[10,[1010.492379210486,553.0791800030486]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[5.818749999999909,2.0456767733078323]],[5,[1.1368683772161605e-13,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[5.171433893884796,-5.185320665887616]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[1.1368683772161605e-13,0.0]],[9,[0.0,0.0]],[10,[2.600823045267589,7.538372631948732]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[202,{"inputs":[{"Node":{"node_id":206,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[53.32716049382714,0.0,0.0,53.32716049382714,956.3024691358024,514.3048777331495]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[206,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"delta":[[1,[1009.6296296296296,552.8888888888889]],[2,[988.351851851852,494.72222222222223]],[3,[971.3148148148148,466.5740740740741]],[4,[956.3024691358024,462.55639384240214]],[5,[963.3148148148148,466.8703703703703]],[6,[967.9074074074072,482.8703703703703]],[7,[965.9814814814814,501.38888888888886]],[8,[972.5274348422496,495.6732967535437]],[9,[973.0925925925924,496.5]],[10,[968.2037037037036,504.05555555555554]],[11,[975.1666666666664,511.3148148148148]],[12,[981.6851851851852,523.1666666666666]],[13,[967.3148148148148,531.9074074074074]],[14,[974.574074074074,539.3148148148148]],[15,[1001.8333333333334,567.0185185185184]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-6.51851851851859,-12.148148148148152]],[3,[-4.395061728394808,-4.740740740740705]],[4,[0.0,0.0]],[5,[2.814814814814781,3.7037037037036953]],[6,[-5.333333333333144,8.296296296296305]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[3.703703703703809,-0.7407407407407618]],[12,[-4.888888888889028,8.59259259259261]],[13,[0.0,0.0]],[14,[0.0,0.0]],[15,[0.0,0.0]]],"handle_end":[[1,[6.51851851851859,12.148148148148152]],[2,[3.786081133230596,4.083862795394623]],[3,[3.265062349348341,-2.124337414689535]],[4,[-2.814814814814781,-3.7037037037036953]],[5,[5.333333333333485,-8.296296296296305]],[6,[-1.7777777777778283,-0.8888888888889142]],[7,[-2.6666666666667425,0.740740740740705]],[8,[-0.009144947416189098,-0.38774577046183367]],[9,[0.7407407407407618,-4.0]],[10,[-3.7037037037035816,0.7407407407407618]],[11,[4.8888888888888005,-8.59259259259261]],[12,[0.0,0.0]],[13,[-4.296296296296418,-2.6666666666666288]],[14,[-3.4074074074073906,-0.7407407407407618]],[15,[-3.796296296296191,11.166666666666517]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":15}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[208,{"inputs":[{"Node":{"node_id":212,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[68.04938271604942,0.0,0.0,68.04938271604942,922.2777777777778,505.7818923114924]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[212,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[957.8271604938273,462.1234567901235]],[2,[948.746913580247,472.10493827160496]],[3,[925.6111111111112,527.7098765432099]],[4,[922.2777777777778,549.4629629629628]],[5,[977.4876543209878,545.4876543209878]],[6,[990.3271604938273,526.5246913580247]],[7,[984.9112747301664,495.90740740740745]],[8,[965.6358024691358,465.1913580246914]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-6.123456790123441,10.962962962962932]],[3,[-2.469135802469168,9.975308641975287]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"handle_end":[[1,[6.123456790123441,-10.96296296296299]],[2,[2.469135802468827,-9.975308641975287]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[7.407407407407391,6.814814814814838]],[8,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[214,{"inputs":[{"Node":{"node_id":218,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[29.119951226947137,0.0,0.0,29.119951226947137,872.8621399176955,536.8690494335212]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[218,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[901.9820911446426,504.0199918711579]],[2,[890.7057613168722,514.4753086419753]],[3,[872.8621399176955,563.858024691358]],[4,[874.0473251028807,569.7181069958847]],[5,[880.5,566.7222222222222]],[6,[888.3518518518518,541.9814814814815]],[7,[886.574074074074,540.0555555555557]],[8,[891.0185185185185,531.9074074074074]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-3.0946502057612406,7.835390946502002]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"handle_end":[[1,[3.0946502057612406,-7.835390946502002]],[2,[7.111111111111086,-11.522633744855966]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[-7.693415637860312,3.5987654320987303]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[220,{"inputs":[{"Node":{"node_id":224,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[145.16013555673453,0.0,0.0,145.16013555673453,732.4135245596606,570.5314602982482]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[224,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[1,[741.4602194787379,611.9677640603566]],[2,[773.1090534979423,610.0802469135801]],[3,[779.9567901234567,598.5451457288699]],[4,[790.0967078189299,592.170781893004]],[5,[819.0679012345677,520.2695473251028]],[6,[819.3312757201645,537.1255144032921]],[7,[817.6193415637858,545.6851851851851]],[8,[825.5205761316871,544.7633744855966]],[9,[825.2572016460904,550.6893004115226]],[10,[827.364197530864,555.9567901234567]],[11,[830.3930041152262,568.5987654320987]],[12,[837.1090534979422,574.2613168724279]],[13,[852.648148148148,535.9403292181069]],[14,[864.6316872427983,543.3148148148147]],[15,[874.7716049382715,566.491769547325]],[16,[858.4423868312756,599.2818930041151]],[17,[877.4053497942385,607.1831275720164]],[18,[876.3518518518517,620.2201646090534]],[19,[742.2503429355281,620.0445816186556]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,1]],"handle_primary":[[1,[0.0,0.0]],[2,[4.609053497942341,-0.9218106995883772]],[3,[5.530864197530832,-1.8969975807218589]],[4,[1.0534979423869115,-4.345679012345613]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[1.4485596707819468,2.633744855967052]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[1.7119341563786747,1.316872427983526]],[11,[0.658436213991763,2.1698525002639144]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[3.68724279835385,7.90123456790127]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[-1.843621399176982,1.975308641975289]],[19,[-21.66213092273972,1.775584501863932]]],"handle_end":[[1,[-4.609053497942341,0.9218106995883772]],[2,[-5.530864197530832,1.8969975807218589]],[3,[-1.0534979423869115,4.345679012345613]],[4,[-16.987654320987644,28.049382716049426]],[5,[-0.39506172839503506,-3.160493827160508]],[6,[-1.4485596707819468,-2.633744855967052]],[7,[-5.135802469135797,4.609053497942341]],[8,[1.1851851851852189,-2.502057613168745]],[9,[-1.7119341563786747,-1.316872427983526]],[10,[-0.658436213991763,-2.1698525002639144]],[11,[-2.10699588477371,-0.3950617283951487]],[12,[-7.637860082304542,12.641975308641918]],[13,[-3.68724279835385,-7.90123456790127]],[14,[0.0,0.0]],[15,[2.765432098765359,-11.851851851851848]],[16,[-5.1358024691359105,-5.00411522633749]],[17,[1.843621399176982,-1.975308641975289]],[18,[21.421124828532356,-1.7558299039781105]],[19,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[226,{"inputs":[{"Node":{"node_id":229,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.7228903109591287,-0.010680583205747385,0.010680583205747385,0.7228903109591287,0.25213664357755855,0.5632721316369947]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[227,{"inputs":[{"Node":{"node_id":230,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[229,{"inputs":[{"Node":{"node_id":227,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[829.8099807176391,565.8945401302792]},"exposed":false}},{"Value":{"tagged_value":{"F64":-112.21561764131614},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[3.920156284886552,12.362329004080864]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925541,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[230,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.03624142718978522,-0.003682959682299257]],[2,[0.935534758874228,0.06746859421299994]],[3,[1.134036317002156,1.0722882682186752]],[4,[0.2700473236113544,1.0652669412541609]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[232,{"inputs":[{"Node":{"node_id":236,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[15.749262654177755,0.0,0.0,15.749262654177755,826.522342284094,570.6026733733062]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[236,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[842.2716049382717,560.2962962962963]],[2,[837.9320987654322,560.7962962962963]],[3,[832.8950617283951,560.829218106996]],[4,[828.8127572016463,566.4259259259259]],[5,[826.9691358024693,580.1543209876544]],[6,[838.425925925926,581.0432098765433]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[-4.339506172839492,0.5]],[2,[0.0,0.0]],[3,[-2.1728395061728634,1.4814814814815236]],[4,[-3.649513397469832,2.8283728830390373]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,null],[2,[2.1728395061728634,-1.4814814814815236]],[3,[2.633744855967052,-2.0411522633744426]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[238,{"inputs":[{"Node":{"node_id":242,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[29.700274348422568,0.0,0.0,29.700274348422568,812.5713305898489,550.9150457057716]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[242,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[842.2716049382715,561.8070416095107]],[2,[821.8187014174667,518.4112940100595]],[3,[819.0679012345677,520.2695473251028]],[4,[812.5713305898489,549.7821216278006]],[5,[837.913808870599,583.4355281207133]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-1.4046639231823974,2.1801554641060648]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[10.88614540466392,16.621856424325642]],[2,[1.4046639231823974,-2.1801554641060648]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[244,{"inputs":[{"Node":{"node_id":248,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[175.80246913580265,0.0,0.0,175.80246913580265,850.4753086419754,577.8827160493828]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[248,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[1,[866.5679012345681,572.641975308642]],[2,[890.3765432098768,558.3271604938273]],[3,[884.6481481481485,571.7592592592594]],[4,[898.8703703703707,571.5617283950618]],[5,[923.956790123457,545.6851851851852]],[6,[944.141561350963,527.7098765432099]],[7,[986.8703703703704,552.6481481481483]],[8,[1025.882716049383,576.7015952852717]],[9,[1026.277777777778,628.0555555555557]],[10,[999.8086419753088,626.6728395061729]],[11,[991.9074074074076,607.667262767384]],[12,[965.0432098765434,605.3395061728396]],[13,[955.9567901234568,612.4506172839507]],[14,[944.3024691358024,613.8333333333334]],[15,[935.0185185185186,608.3024691358025]],[16,[922.574074074074,606.9197530864199]],[17,[915.067901234568,618.7716049382716]],[18,[884.845679012346,621.141975308642]],[19,[867.9970278920896,620.4835390946502]],[20,[850.4753086419754,600.0720164609053]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.5925925925926094]],[6,[0.0,0.0]],[7,[22.254029366644772,13.337995427526266]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-2.96296296296282,-1.1851851851851052]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[0.0,0.0]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[-11.881115683584769,-0.11705532693190436]],[20,[0.0,0.0]]],"handle_end":[[1,[-10.271604938271707,4.543209876543187]],[2,[0.5925925925926094,-3.555555555555543]],[3,[-8.69135802469134,0.39506172839503506]],[4,[-7.703703703703809,15.604938271604851]],[5,[0.0,0.0]],[6,[-11.851851851851848,-16.036008230452808]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[2.962962962963047,1.1851851851851052]],[10,[0.3950617283951487,3.117880051334623]],[11,[18.567901234567785,4.543209876543301]],[12,[2.7654320987655865,-2.7624450928566375]],[13,[2.1728395061727497,0.39506172839503506]],[14,[4.740740740740762,0.7901234567901838]],[15,[5.135802469136024,0.9876543209877582]],[16,[2.3703703703704377,-1.7777777777778283]],[17,[20.5432098765433,0.1975308641974607]],[18,[11.881115683584769,0.11705532693190436]],[19,[0.0,0.0]],[20,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[250,{"inputs":[{"Node":{"node_id":254,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.22322798,"green":0.057805434,"blue":0.033104762,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.22322798,"green":0.057805434,"blue":0.033104762,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-0.8881961867854216,16.157479969490282,-16.157479969490282,-0.8881961867854216,967.3141221127114,608.5400508947073]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[254,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[887.506172839506,620.2933732713938]],[2,[999.8086419753088,626.6728395061729]],[3,[1012.648148148148,620.7933732713938]],[4,[1004.3518518518516,600.7306004720272]],[5,[910.5246913580244,598.202467627757]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[-43.25925925925878,-1.3827160493827932]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[256,{"inputs":[{"Node":{"node_id":259,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.7781409928102734,-0.004518262619851443,0.004518262619851443,0.7781409928102734,0.17359525448726693,0.4408945819451189]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[257,{"inputs":[{"Node":{"node_id":260,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[259,{"inputs":[{"Node":{"node_id":257,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[894.1788584769913,562.0196920444174]},"exposed":false}},{"Value":{"tagged_value":{"F64":-133.24181654222085},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[15.813534861768243,49.86845076365074]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925463,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[260,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[-0.06772020100134477,-0.27125764892979654]],[2,[0.8103689541744266,-0.2611110184526325]],[3,[1.1461889241405476,1.0977967891967286]],[4,[0.4707515606101555,1.0016674771193048]],[5,[0.05417500861004592,0.8211321210533473]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-2.220446049250313e-16,-2.220446049250313e-16]],[4,[-0.4165765520001096,-0.1805353560659575]],[5,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.2875939062231115,0.06333186265853907]],[4,null],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[262,{"inputs":[{"Node":{"node_id":266,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[53.49424111817291,0.0,0.0,53.49424111817291,877.5736601163951,552.0307817039356]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[266,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[890.376543209877,558.3271604938273]],[2,[903.0185185185188,539.9074074074074]],[3,[907.9074074074074,539.3148148148149]],[4,[906.574074074074,531.3148148148149]],[5,[916.9444444444443,525.3888888888889]],[6,[931.067901234568,549.8333333333334]],[7,[902.8209876543212,578.672839506173]],[8,[877.5736601163951,577.8827160493829]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.05385802469163536,0.0]],[5,[12.296296296296418,0.14814814814803867]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"handle_end":[[1,[-16.592592592592723,23.703703703703923]],[2,[0.0,0.0]],[3,[0.2962962962964184,4.888888888889028]],[4,[-3.0120068298679143,-0.036289238914037014]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[268,{"inputs":[{"Node":{"node_id":272,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[55.17384185481933,0.0,0.0,55.17384185481933,872.6913580246915,537.3566890964463]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[272,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[872.6913580246915,564.7407407407408]],[2,[885.701646090535,534.2283950617283]],[3,[896.2037037037037,507.6111111111111]],[4,[919.7592592592592,507.7592592592593]],[5,[927.7592592592592,537.8333333333333]],[6,[873.7839506172841,571.9567901234568]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[8.404909667028619,-14.163252363220296]],[2,[2.6337448559671657,-9.349794238682987]],[3,[5.629629629629449,-5.185185185185162]],[4,[9.641681333516315,12.166883587532825]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,null],[2,[-6.29752559155645,5.8003525185389435]],[3,[-6.222222222222285,-7.851851851851904]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[274,{"inputs":[{"Node":{"node_id":275,"output_index":0}},{"Node":{"node_id":277,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[275,{"inputs":[{"Node":{"node_id":11427960919145580782,"output_index":0}},{"Node":{"node_id":283,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[277,{"inputs":[{"Node":{"node_id":1453710883947581217,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.83076996,"green":0.4910209,"blue":0.06301004,"alpha":1.0,"linear":true},{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.83076996,"green":0.4910209,"blue":0.06301004,"alpha":1.0,"linear":true},{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-78.0453977819351,448.78024244222814,-448.78024244222814,-78.0453977819351,1028.8189601428448,127.72470794395991]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[281,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[1026.168038408779,250.70576131687224]],[2,[998.8209876543212,150.42592592592595]],[3,[972.746913580247,118.22839506172843]],[4,[929.6851851851852,121.58641975308646]],[5,[923.3641975308644,158.72222222222226]],[6,[923.4629629629628,289.38888888888886]],[7,[926.7222222222222,528.7962962962963]],[8,[1026.2777777777776,592.5]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[-10.22770919067159,-29.761316872427727]],[2,[-4.543209876543415,-11.06172839506172]],[3,[-17.77777777777783,-3.753086419753074]],[4,[-5.135802469135797,10.864197530864176]],[5,[0.0,11.061728395061747]],[6,[0.2962962962964184,19.259259259259295]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"handle_end":[[1,[4.543209876543187,11.06172839506172]],[2,[17.77777777777783,3.753086419753089]],[3,[5.135802469135797,-10.864197530864176]],[4,[0.0,-11.061728395061747]],[5,[-0.2962962962964184,-19.259259259259295]],[6,[-2.370370370370324,-53.03703703703695]],[7,[0.0,0.0]],[8,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[283,{"inputs":[{"Node":{"node_id":16360261423333265502,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[56.58641975308615,0.0,0.0,56.58641975308615,898.2777777777778,341.15948801789966]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[287,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[954.864197530864,116.14814814814812]],[2,[934.9526748971192,114.67283950617282]],[3,[913.619341563786,134.1625514403292]],[4,[910.06378600823,174.98559670781898]],[5,[904.5,283.46296296296293]],[6,[898.2777777777778,520.5]],[7,[944.7962962962962,568.2037037037037]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-9.481481481481635,1.8436213991769392]],[3,[-2.2386831275719032,10.008230452674894]],[4,[-0.7901234567891606,29.102880658436305]],[5,[-3.5555555555556566,34.37037037037038]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[1,[9.481481481481635,-1.8436213991769392]],[2,[2.677546335770103,-11.970207148147836]],[3,[0.370701337431683,-13.654165928739786]],[4,[3.5555555555554292,-34.37037037037038]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[290,{"inputs":[{"Node":{"node_id":291,"output_index":0}},{"Node":{"node_id":300,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[291,{"inputs":[{"Node":{"node_id":292,"output_index":0}},{"Node":{"node_id":306,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[292,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":312,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[300,{"inputs":[{"Node":{"node_id":304,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[99.06627546613834,0.0,0.0,99.06627546613834,645.3333333333333,601.349243326633]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[304,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[645.3333333333333,614.013717421125]],[2,[658.574074074074,609.6851851851851]],[3,[680.2695473251027,600.730452674897]],[4,[699.4958847736627,594.497256515775]],[5,[744.3996087994716,586.9732002235431]],[6,[717.5809327846364,593.2681755829904]],[7,[702.5246913580245,600.8931773149878]],[8,[708.7139917695473,601.783950617284]],[9,[713.2108672458469,610.5533455265964]],[10,[712.0500685871053,614.4420508944315]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,[0.0,0.0]],[2,[4.740740740740762,-4.148148148148152]],[3,[7.374485596707928,-0.92181069958815]],[4,[4.444444444444002,-5.662551440328798]],[5,[0.0,0.0]],[6,[-10.886145404663694,2.8971193415636662]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-58.35223289132739,3.851425709744945]]],"handle_end":[[1,[-4.740740740740762,4.148148148148152]],[2,[-6.174173455107166,0.7717716818881399]],[3,[-1.6866098186769705,2.1488658430550913]],[4,[-5.794238683127446,-2.0192043895747247]],[5,[10.516302710276136,-2.79869346321857]],[6,[0.0,0.0]],[7,[-2.89711934156378,-1.975308641975289]],[8,[-2.5361987501905787,-3.706752019509281]],[9,[-0.08779149519853036,-2.2109123484780184]],[10,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[306,{"inputs":[{"Node":{"node_id":310,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[81.66803840877935,0.0,0.0,81.66803840877935,698.0912208504803,600.730600472027]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[310,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[744.3996087994717,586.9732002235432]],[2,[734.9571457603006,587.5194584158918]],[3,[698.0912208504803,600.3792866941013]],[4,[706.1680384087791,607.8415637860082]],[5,[710.9477975918305,613.6358024691357]],[6,[729.3449931412895,610.3875171467763]],[7,[779.7592592592597,612.6204267490609]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[2.1947873799731497,4.691071467853249]],[5,[7.452522481329197,2.721536351166037]],[6,[15.119646395366544,2.853223593964344]],[7,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[6.496570644718986,-11.149519890260422]],[3,[-2.494608558449272,-5.331900091455282]],[4,null],[5,null],[6,[0.0,0.0]],[7,[9.28638926992835,13.56378600823075]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[312,{"inputs":[{"Node":{"node_id":316,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[54.46552409086371,0.0,0.0,54.46552409086371,740.3456790123458,598.202467627757]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[316,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[740.3456790123458,588.2030178326476]],[2,[755.3312757201647,586.2448559670783]],[3,[794.0473251028808,582.3820301783265]],[4,[789.2187928669412,601.4967933823075]],[5,[767.1831275720166,614.1625514403293]],[6,[751.1172839506169,611.1776406035664]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[9.481481481481524,0.4824094931645959]],[3,[0.0,0.0]],[4,[-8.427983539094612,8.539557783673331]],[5,[-11.149519890260535,0.2794994541025062]],[6,[0.0,0.0]]],"handle_end":[[1,[-9.481481481481524,-0.4824094931645959]],[2,[-9.305898491083669,-1.1412894375856697]],[3,[8.427983539094612,-8.539557783673331]],[4,[11.149519890260535,-0.2794994541025062]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[318,{"inputs":[{"Node":{"node_id":319,"output_index":0}},{"Node":{"node_id":323,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[319,{"inputs":[{"Node":{"node_id":290,"output_index":0}},{"Node":{"node_id":329,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[321,{"inputs":[{"Node":{"node_id":325,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.8387991,"green":0.47353154,"blue":0.06662595,"alpha":1.0,"linear":true},{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.8387991,"green":0.47353154,"blue":0.06662595,"alpha":1.0,"linear":true},{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-71.11111111111109,410.66666666666663,-410.66666666666663,-71.11111111111109,698.2777777777778,196.05555555555557]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[323,{"inputs":[{"Node":{"node_id":321,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[325,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9],"remove":[],"delta":[[1,[744.0,592.0]],[2,[733.1666666666666,489.16666666666663]],[3,[708.5,335.16666666666663]],[4,[695.8333333333333,239.16666666666663]],[5,[660.5,187.83333333333331]],[6,[619.8333333333333,207.83333333333331]],[7,[619.8333333333333,577.1666666666666]],[8,[631.8333333333333,608.5]],[9,[677.1666666666666,609.1666666666666]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-4.666666666666629,-50.666666666666686]],[3,[-6.6666666666667425,-57.333333333333314]],[4,[-3.3333333333332575,-21.33333333333331]],[5,[-36.0,-6.666666666666686]],[6,[0.0,16.666666666666686]],[7,[0.0,12.666666666666742]],[8,[12.666666666666742,4.666666666666629]],[9,[18.66666666666663,-5.3333333333332575]]],"handle_end":[[1,[4.666666666666629,50.66666666666663]],[2,[6.6666666666667425,57.333333333333314]],[3,[3.3333333333332575,21.33333333333331]],[4,[36.0,6.666666666666657]],[5,[0.0,-16.666666666666686]],[6,[0.0,-12.666666666666742]],[7,[-12.666666666666742,-4.666666666666629]],[8,[-18.66666666666663,5.3333333333332575]],[9,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":9}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[327,{"inputs":[{"Node":{"node_id":331,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[304.21114779625265,0.0,0.0,304.21114779625265,446.6563786008233,402.4609146286176]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[329,{"inputs":[{"Node":{"node_id":327,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[331,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[659.4434537418081,187.67146776406028]],[2,[622.9855967078189,184.4670781893004]],[3,[588.0884773662551,227.52880658436212]],[4,[563.1666666666666,433.38888888888886]],[5,[540.9444444444443,605.8710283878144]],[6,[523.3861454046643,611.9385002286241]],[7,[486.7770919067218,613.3724279835391]],[8,[446.6563786008233,618.9032921810701]],[9,[661.5370370370372,619.7592592592594]],[10,[750.8539094650207,617.9375857338821]],[11,[675.4629629629632,591.0185185185186]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,1]],"handle_primary":[[1,[-3.9798811156837246,-1.1315348270080108]],[2,[-6.716049382716051,0.9218106995884908]],[3,[-3.950617283950692,42.13991769547326]],[4,[-10.222222222222172,79.55555555555549]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[-3.511659807956221,0.819387288523103]],[8,[0.0,0.0]],[9,[43.09465020576113,-0.9876543209876444]],[10,[1.1851851851849915,-37.53086419753106]],[11,[0.0,0.0]]],"handle_end":[[1,[6.716049382716051,-0.9218106995884624]],[2,[3.950617283950692,-42.13991769547323]],[3,[10.222222222222172,-79.55555555555549]],[4,[0.0,0.0]],[5,[5.5601280292639785,-9.422953818016254]],[6,[5.110425979711636,-1.1924327285993286]],[7,[1.5363511659809888,-3.599451303154865]],[8,[-14.51772944216873,0.33272107201298695]],[9,[-22.386831275720624,5.3991769547326385]],[10,[0.0,0.0]],[11,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[393,{"inputs":[{"Node":{"node_id":394,"output_index":0}},{"Node":{"node_id":398,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[394,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":404,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[396,{"inputs":[{"Node":{"node_id":400,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true},{"red":0.80695236,"green":0.42869055,"blue":0.05951124,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true},{"red":0.80695236,"green":0.42869055,"blue":0.05951124,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[49.53072008266122,-286.1470598605872,286.1470598605872,49.53072008266122,383.56460319901373,558.8232326636307]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[398,{"inputs":[{"Node":{"node_id":396,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[400,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[531.0946502057612,568.230452674897]],[2,[513.0925925925925,455.6111111111111]],[3,[499.1666666666666,380.94444444444446]],[4,[487.3148148148147,333.24074074074076]],[5,[482.47530864197535,316.35185185185185]],[6,[457.9814814814815,279.4135802469136]],[7,[411.7592592592593,261.83333333333337]],[8,[381.7345679012346,268.5493827160494]],[9,[378.57407407407413,324.0555555555556]],[10,[378.8703703703703,472.7962962962963]],[11,[378.8703703703703,545.3888888888889]],[12,[399.3148148148148,564.0555555555555]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-6.51851851851859,-35.55555555555554]],[3,[-1.7777777777777717,-12.444444444444455]],[4,[0.0,0.0]],[5,[-2.1728395061728065,-7.703703703703695]],[6,[-20.345679012345727,-8.691358024691397]],[7,[-5.925925925925924,-0.9876543209876444]],[8,[-6.716049382716051,13.62962962962962]],[9,[0.1975308641974607,16.395061728395035]],[10,[-0.8888888888888573,38.81481481481478]],[11,[0.0,6.518518518518476]],[12,[22.22222222222223,-1.1851851851852189]]],"handle_end":[[1,[6.51851851851859,35.55555555555554]],[2,[1.7777777777777717,12.444444444444455]],[3,[8.888888888888971,23.407407407407447]],[4,[2.1728395061728065,7.703703703703695]],[5,[20.345679012345784,8.691358024691397]],[6,[5.925925925925924,0.9876543209876444]],[7,[6.716049382716051,-13.62962962962962]],[8,[-0.1975308641974607,-16.395061728395035]],[9,[0.8888888888888573,-38.81481481481478]],[10,[0.0,-6.518518518518476]],[11,[-22.22222222222223,1.1851851851852189]],[12,[-37.99794238683137,-21.306584362139915]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[402,{"inputs":[{"Node":{"node_id":406,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[96.4444444444444,0.0,0.0,96.4444444444444,332.5,420.64658044287665]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[404,{"inputs":[{"Node":{"node_id":402,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[406,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[401.70713305898494,260.36282578875165]],[2,[380.6371742112481,265.1035665294926]],[3,[369.7510288065844,308.3847736625514]],[4,[353.38888888888886,444.5]],[5,[332.5,581.8333333333333]],[6,[428.9444444444444,568.9444444444443]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[-10.359396433470463,-3.160493827160451]],[2,[-10.643715697978225,7.851921416541302]],[3,[-1.3105663299890011,14.89279920442118]],[4,[-5.333333333333314,40.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,null],[2,[0.9657064471879266,-10.97393689986285]],[3,[5.333333333333314,-40.0]],[4,[4.0,-30.666666666666742]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[408,{"inputs":[{"Node":{"node_id":409,"output_index":0}},{"Node":{"node_id":411,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[409,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":442,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[411,{"inputs":[{"Node":{"node_id":412,"output_index":0}},{"Node":{"node_id":415,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[412,{"inputs":[{"Node":{"node_id":413,"output_index":0}},{"Node":{"node_id":421,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[413,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":436,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[415,{"inputs":[{"Node":{"node_id":418,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":0.80859375,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":0.80859375,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.4164402886534021,1.1102230246251563e-16,0.0,0.886331167266568,0.30473369160482133,-0.27613184386946]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[418,{"inputs":[{"Node":{"node_id":419,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[83.16666666666677,614.179527199694]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[294.3945373546583,138.32047280030588]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[419,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[421,{"inputs":[{"Node":{"node_id":422,"output_index":0}},{"Node":{"node_id":424,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[422,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":430,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[424,{"inputs":[{"Node":{"node_id":427,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.07456140350877193,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.48093295,"green":0.119827025,"blue":0.036873188,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.1499598,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.68668544,"green":0.1980693,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.07456140350877193,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.48093295,"green":0.119827025,"blue":0.036873188,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.1499598,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.68668544,"green":0.1980693,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.0,1.4339622641509435,-1.4339622641509435,0.0,0.48367901287206416,-0.4339622641509434]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[427,{"inputs":[{"Node":{"node_id":428,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[583.9293351067386,697.6163522012579]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[428,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.17362079214327678,-0.41509433962264153]],[2,[0.8076864692090735,-0.4339622641509434]],[3,[0.7349403737393546,1.0000000000000002]],[4,[0.1596715565350542,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[430,{"inputs":[{"Node":{"node_id":433,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.09210526315789476,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.4751555,"green":0.11386405,"blue":0.03377812,"alpha":1.0,"linear":true},{"red":0.48514998,"green":0.14702728,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.5972019,"green":0.20863685,"blue":0.04231141,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.09210526315789476,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.4751555,"green":0.11386405,"blue":0.03377812,"alpha":1.0,"linear":true},{"red":0.48514998,"green":0.14702728,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.5972019,"green":0.20863685,"blue":0.04231141,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.0,1.4339622641509435,-1.4339622641509435,0.0,0.7253033882459253,-0.4339622641509434]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[433,{"inputs":[{"Node":{"node_id":434,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[628.6154039265571,697.6163522012579]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[434,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5926327057682128,-0.43396226415094336]],[2,[0.8076864692090735,-0.4339622641509434]],[3,[1.0069833844920426,0.9999999999999988]],[4,[0.4436233919998075,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[436,{"inputs":[{"Node":{"node_id":439,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.08176100628930963,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.5209957,"green":0.11697067,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.1499598,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.68668544,"green":0.1980693,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.08176100628930963,1.0],"midpoint":[0.5,0.5,0.5],"color":[{"red":0.5209957,"green":0.11697067,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.1499598,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.68668544,"green":0.1980693,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.0,1.0,-1.0,0.0,0.5177419354838715,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[439,{"inputs":[{"Node":{"node_id":440,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[344.5177419354837,697.8333333333333]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[440,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.035483870967742,1.0]],[4,[0.0387096774193552,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[442,{"inputs":[{"Node":{"node_id":445,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.14354235440709684,0.5,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.22322798,"green":0.057805434,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.30498737,"green":0.07618539,"blue":0.034339808,"alpha":1.0,"linear":true},{"red":0.41788515,"green":0.090841725,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.5534663,"green":0.19362296,"blue":0.039487094,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.14354235440709684,0.5,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.22322798,"green":0.057805434,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.30498737,"green":0.07618539,"blue":0.034339808,"alpha":1.0,"linear":true},{"red":0.41788515,"green":0.090841725,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.5534663,"green":0.19362296,"blue":0.039487094,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-0.0014164305949008194,1.002296541178966,-1.002296541178966,-0.0014164305949008194,0.5063739376770537,0.01352247091271197]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[445,{"inputs":[{"Node":{"node_id":446,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[83.1666666666668,614.1795271996941]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[941.3333333333331,154.32047280030588]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[446,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[448,{"inputs":[{"Node":{"node_id":449,"output_index":0}},{"Node":{"node_id":455,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[449,{"inputs":[{"Node":{"node_id":450,"output_index":0}},{"Node":{"node_id":6015109908395573189,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[450,{"inputs":[{"Node":{"node_id":451,"output_index":0}},{"Node":{"node_id":467,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[451,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":471,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[453,{"inputs":[{"Node":{"node_id":457,"output_index":0}},{"Value":{"tagged_value":{"Color":null},"exposed":false}},{"Value":{"tagged_value":{"Color":null},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[134.22222222222223,0.0,0.0,134.22222222222223,-4.833333333333332,486.94444444444446]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[455,{"inputs":[{"Node":{"node_id":453,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[457,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[-4.833333333333332,345.83333333333326]],[2,[80.05555555555559,484.94444444444446]],[3,[129.38888888888889,628.0555555555557]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[32.038317168599576,69.73045501401077]]],"handle_end":[[1,[-45.33333333333338,-98.66666666666669]],[2,[0.0,0.0]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[459,{"inputs":[{"Node":{"node_id":463,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[134.22222222222223,0.0,0.0,134.22222222222223,-4.833333333333348,486.94444444444446]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[463,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-4.833333333333348,600.0555555555555]],[2,[-4.833333333333332,345.83333333333326]],[3,[80.05555555555559,484.94444444444446]],[4,[129.38888888888889,628.0555555555557]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[32.038317168599576,69.73045501401077]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-45.33333333333338,-98.66666666666669]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[465,{"inputs":[{"Node":{"node_id":469,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.74540436,"green":0.36130688,"blue":0.048171822,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.74540436,"green":0.36130688,"blue":0.048171822,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-39.224288802976176,223.5773806604142,-223.5773806604142,-39.224288802976176,118.2360641327914,146.75000000000003]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[467,{"inputs":[{"Node":{"node_id":465,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Round"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[469,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13],"remove":[],"delta":[[1,[137.75,641.0]],[2,[-7.000000000000025,626.675562328647]],[3,[-7.030559365950182,200.5]],[4,[50.72222222222222,278.78532235939633]],[5,[81.68518518518522,338.8703703703703]],[6,[110.91975308641976,406.62345679012344]],[7,[129.38888888888886,443.61235349483104]],[8,[82.0,29.5]],[9,[111.83431058292848,134.6107990062408]],[10,[137.68518518518513,236.64814814814815]],[11,[177.83333333333343,384.49999999999994]],[12,[199.1666666666667,473.1666666666667]],[13,[223.25,608.7633744855967]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[31.078939476013172,37.97283968100555]],[4,[7.654320987654309,14.850480109739408]],[5,[6.73334689148848,12.881185357630102]],[6,[8.537957281505157,20.688127259031944]],[7,[-20.788075479416264,-70.61235349483104]],[8,[0.0,0.0]],[9,[5.9990227504048335,27.666978771536947]],[10,[12.334360893667936,45.715346431469186]],[11,[6.410520201070284,29.915760938327992]],[12,[11.42335240155694,63.4630688975397]],[13,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-14.856706650648782,-28.82414089604376]],[4,[-9.08641975308646,-17.382716049382736]],[5,[-10.271604938271594,-24.88888888888897]],[6,[0.0,0.0]],[7,[14.499999999999943,172.0]],[8,[-13.354098963944438,-61.58795989288773]],[9,[-13.510174692931455,-48.54050114169854]],[10,[-12.0,-55.99999999999994]],[11,[-5.999999999999915,-33.33333333333343]],[12,[0.0,0.0]],[13,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":13}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[471,{"inputs":[{"Node":{"node_id":475,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[149.67286608061644,0.0,0.0,149.67286608061644,22.827133919383556,278.6463191586647]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[475,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[22.827133919383556,312.5]],[2,[46.49999999999994,177.5]],[3,[81.20964791952444,29.23708276177412]],[4,[85.15294924554185,45.49314128943759]],[5,[172.5,512.0555555555555]],[6,[102.27777777777776,528.0555555555553]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[15.777777777777828,-79.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[-14.820678206547353,74.20776200602205]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[477,{"inputs":[{"Node":{"node_id":478,"output_index":0}},{"Node":{"node_id":6272196533192700024,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[478,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":7135480377162524224,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[481,{"inputs":[{"Node":{"node_id":485,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.78353786,"green":0.40724027,"blue":0.06480328,"alpha":1.0,"linear":true},{"red":0.49693304,"green":0.11697067,"blue":0.033104762,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.78353786,"green":0.40724027,"blue":0.06480328,"alpha":1.0,"linear":true},{"red":0.49693304,"green":0.11697067,"blue":0.033104762,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.0,211.8086099761528,-211.8086099761528,0.0,892.4321840439206,337.850704492352]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[485,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[901.7869989330896,337.4632677945435]],[2,[881.6925011431184,340.0384849870446]],[3,[873.1913580246915,359.61111111111114]],[4,[873.611111111111,465.6111111111111]],[5,[874.2777777777776,540.5]],[6,[879.873428946497,552.0307817039356]],[7,[907.1666666666664,501.16666666666663]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-5.885745135394927,5.678500588373993]],[3,[0.09876543209873034,9.87654320987656]],[4,[-0.22222222222228535,37.77777777777777]],[5,[1.086419753086716,4.000000000000114]],[6,[4.0,1.7777777777777146]],[7,[2.888888888889028,-35.111111111111086]]],"handle_end":[[1,[5.5406188081085475,-5.34552659655543]],[2,[-0.09876543209873034,-9.87654320987656]],[3,[0.22222222222228535,-37.77777777777777]],[4,[-0.9901901223357754,-3.645699995871837]],[5,[-4.0,-1.7777777777777146]],[6,[-2.8888888888888005,35.111111111111086]],[7,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[487,{"inputs":[{"Node":{"node_id":491,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.26819557,"green":0.076641515,"blue":0.047158927,"alpha":1.0,"linear":true},{"red":0.14009783,"green":0.05885609,"blue":0.04175822,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.26819557,"green":0.076641515,"blue":0.047158927,"alpha":1.0,"linear":true},{"red":0.14009783,"green":0.05885609,"blue":0.04175822,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.0,217.67585483414956,-217.67585483414956,0.0,888.5000000000001,336.1666666666667]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[491,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[903.3333333333331,336.44444444444446]],[2,[867.3888888888889,344.05555555555554]],[3,[858.2777777777777,377.8333333333333]],[4,[851.3888888888889,542.2777777777777]],[5,[876.9444444444443,582.1008216600221]],[6,[908.5000000000005,581.0432098765432]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-9.555555555555657,12.444444444444455]],[3,[-0.4444444444444571,14.444444444444455]],[4,[-2.888888888888914,28.66666666666663]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[9.555555555555657,-12.444444444444455]],[2,[0.4444444444444571,-14.444444444444455]],[3,[2.888888888888914,-28.66666666666663]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.16666666666685614,-0.2777777777777146]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[493,{"inputs":[{"Node":{"node_id":496,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.33108336235841895,0.6158954287284122,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.022358121,"green":0.21412316,"blue":0.23637938,"alpha":1.0,"linear":true},{"red":0.051269464,"green":0.2581829,"blue":0.23074007,"alpha":1.0,"linear":true},{"red":0.1980693,"green":0.27049786,"blue":0.13286833,"alpha":1.0,"linear":true},{"red":0.49693304,"green":0.20863685,"blue":0.043735027,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,0.33108336235841895,0.6158954287284122,1.0],"midpoint":[0.5,0.5,0.5,0.5],"color":[{"red":0.022358121,"green":0.21412316,"blue":0.23637938,"alpha":1.0,"linear":true},{"red":0.051269464,"green":0.2581829,"blue":0.23074007,"alpha":1.0,"linear":true},{"red":0.1980693,"green":0.27049786,"blue":0.13286833,"alpha":1.0,"linear":true},{"red":0.49693304,"green":0.20863685,"blue":0.043735027,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.0,0.911795540119222,-0.911795540119222,0.0,0.5224609375,-0.000170829498767594]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[496,{"inputs":[{"Node":{"node_id":497,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,600.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[497,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[36935169817407978,{"inputs":[{"Node":{"node_id":15848750910363784662,"output_index":0}},{"Node":{"node_id":11279424538712841875,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[97478832511923699,{"inputs":[{"Node":{"node_id":2999157202967297847,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[486.78967826851385,539.8989473007496]},"exposed":false}},{"Value":{"tagged_value":{"F64":-8.547050926324854},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[24.603566707484493,77.5880766500041]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925423,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[600590258445096812,{"inputs":[{"Node":{"node_id":9778003574990260202,"output_index":0}},{"Node":{"node_id":12435496696188763850,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[989999757220954936,{"inputs":[{"Node":{"node_id":10544930474333783117,"output_index":0}},{"Node":{"node_id":5105625446268484763,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1453710883947581217,{"inputs":[{"Node":{"node_id":281,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1598976462838094167,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[1,[506.7057613168725,531.9348803536052]],[2,[497.8388203017833,534.5393613778391]],[3,[488.5329218106997,551.6587029416252]],[4,[500.77983539094663,544.0208428593207]],[5,[500.4506172839507,547.5105547934772]],[6,[490.17901234567904,556.0043819539711]],[7,[495.90740740740733,567.882982777016]],[8,[502.6234567901235,563.1154930650816]],[9,[510.261316872428,573.2078189300412]],[10,[496.50000000000006,582.6234567901236]],[11,[504.00617283950623,588.9444444444446]],[12,[513.3888888888889,585.5544307531777]],[13,[516.8017832647463,593.4437585733884]],[14,[496.49999999999994,603.4117893613783]],[15,[496.30246913580254,612.3006782502672]],[16,[478.9197530864198,618.6875095259874]],[17,[448.3683127572017,617.6340115836006]],[18,[438.2283950617284,585.5544307531777]],[19,[468.05555555555594,550.6710486206383]],[20,[480.89506172839504,532.4323654930657]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-7.188100137174104,2.6138545953361927]],[3,[4.565157750342848,-4.301783264746064]],[4,null],[5,[-6.737997256515712,3.1824417009599983]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[0.0,0.0]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[0.0,0.0]],[20,[7.46503467504715,-4.02781143068205]]],"handle_end":[[1,[3.4386245260820374,-1.250408918575317]],[2,[0.27087722942241044,-5.120145445603839]],[3,null],[4,null],[5,[0.0,0.0]],[6,[-2.508333333333439,-2.0902777777778283]],[7,[-3.6872427983540206,1.4485596707820605]],[8,[-1.7777777777777717,-5.728395061728406]],[9,[6.716049382716108,-8.49382716049422]],[10,[-2.765432098765416,-3.555555555555543]],[11,[-3.851851851851848,0.7581344568814075]],[12,[-0.39506172839503506,-1.975308641975289]],[13,[0.0,0.0]],[14,[-0.7901234567900701,-4.938271604938336]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[-3.394604481024089,3.2873037646699004]],[20,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1635416892097245588,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":11472292186872186521,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1644624352314732667,{"inputs":[{"Node":{"node_id":3930114406985796561,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[337.1982047610469,692.7466487935636]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[50.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2489761779922717592,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[156.18106995884773,623.2098765432096]],[2,[161.81687242798355,618.7716049382714]],[3,[205.93209876543213,600.5987654320988]],[4,[282.37654320987656,585.9814814814815]],[5,[338.4753086419753,574.1296296296297]],[6,[468.0555555555556,551.0185185185187]],[7,[455.2160493827161,586.8374485596709]],[8,[481.88271604938296,600.2037037037037]],[9,[447.46059205066985,619.9047655337092]],[10,[288.6975308641976,620.1543209876544]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,[0.0,0.0]],[2,[5.925925925925924,-2.370370370370324]],[3,[21.135802469135797,-7.703703703703695]],[4,[22.71604938271605,-4.9382716049382225]],[5,[0.0,0.0]],[6,[-0.19753086419751753,-0.19753086419757435]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-70.32098765432102,1.975308641975289]]],"handle_end":[[1,[-5.925925925925924,2.370370370370324]],[2,[-21.135802469135797,7.703703703703695]],[3,[-22.71604938271605,4.9382716049382225]],[4,[0.0,0.0]],[5,[-40.09876543209879,-8.09876543209873]],[6,[4.345679012345613,-25.481481481481524]],[7,[-8.691358024691567,-7.308641975308547]],[8,[11.358024691357969,-11.390946502057773]],[9,[70.32098765432102,-1.975308641975289]],[10,[41.77160493827162,-2.8703703703704377]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2999157202967297847,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.09890842105846484,-0.06578040790199424]],[2,[0.8379395417513005,-0.05940639119491883]],[3,[1.0362898771040632,0.9994054840058096]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3707802522175443254,{"inputs":[{"Node":{"node_id":10278740841813346388,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[81.66803840877935,0.0,0.0,81.66803840877935,698.0912208504803,600.730600472027]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[3719764965605527929,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[0.024789182815927936,-0.19742232174172225]],[2,[0.5284291926980893,-0.05749241759918103]],[3,[0.9294778693529006,0.07804966382593222]],[4,[1.0925954941660798,1.0006513038165834]],[5,[0.5092009949861728,0.9569233045341342]],[6,[-0.007635827307500006,0.8135210708932508]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.21441988872806772,0.05895880273641681]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-0.28124758738050376,-0.047835328360902984]],[6,[0.0,0.0]]],"handle_end":[[1,[-0.16942059711236046,-0.046585396643413435]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.26857587477611267,0.04568009019878494]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3885641499621884510,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":600590258445096812,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3930114406985796561,{"inputs":[{"Node":{"node_id":4454263454059119441,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4452902364641883403,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":8861964493222160710,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4454263454059119441,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4633399390154487467,{"inputs":[{"Node":{"node_id":11155094820673141470,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4913361824430066698,{"inputs":[{"Node":{"node_id":11807598261442997948,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[60.115226337448235,0.0,0.0,60.115226337448235,481.882716049383,573.0717312226245]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5105625446268484763,{"inputs":[{"Node":{"node_id":9422094883894860610,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[60.115226337448235,0.0,0.0,60.115226337448235,481.882716049383,573.0717312226245]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5175066652268973319,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.09890842105846484,-0.06578040790199424]],[2,[0.8379395417513005,-0.05940639119491883]],[3,[1.0362898771040632,0.9994054840058096]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5364427239360309137,{"inputs":[{"Node":{"node_id":12325841371509826180,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5382879283978921947,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[740.3456790123458,588.2030178326476]],[2,[755.3312757201647,586.2448559670783]],[3,[794.0473251028808,582.3820301783265]],[4,[789.2187928669412,601.4967933823075]],[5,[767.1831275720166,614.1625514403293]],[6,[751.1172839506169,611.1776406035664]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[9.481481481481524,0.4824094931645959]],[3,[0.0,0.0]],[4,[-8.427983539094612,8.539557783673331]],[5,[-11.149519890260535,0.2794994541025062]],[6,[0.0,0.0]]],"handle_end":[[1,[-9.481481481481524,-0.4824094931645959]],[2,[-9.305898491083669,-1.1412894375856697]],[3,[8.427983539094612,-8.539557783673331]],[4,[11.149519890260535,-0.2794994541025062]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[5714505144727602368,{"inputs":[{"Node":{"node_id":18142347460553706128,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[742.4503588311712,593.3522045638366]},"exposed":false}},{"Value":{"tagged_value":{"F64":-54.607358405925375},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[11.868580002725764,37.42791872115287]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925435,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6015109908395573189,{"inputs":[{"Node":{"node_id":459,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-8.0,2.6666666666000083]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6272196533192700024,{"inputs":[{"Node":{"node_id":481,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[28.815503095243457,-49.74366671015599]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.29474475571},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6710503329407068595,{"inputs":[{"Node":{"node_id":16831252454255560063,"output_index":0}},{"Node":{"node_id":10486443711686704000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6873123446543957690,{"inputs":[{"Node":{"node_id":12717405604755313921,"output_index":0}},{"Node":{"node_id":3707802522175443254,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6926019345498826421,{"inputs":[{"Node":{"node_id":989999757220954936,"output_index":0}},{"Node":{"node_id":17020523203516467057,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6980979116665635870,{"inputs":[{"Node":{"node_id":5175066652268973319,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[486.78967826851385,539.8989473007496]},"exposed":false}},{"Value":{"tagged_value":{"F64":-8.547050926324854},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[24.603566707484493,77.5880766500041]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925423,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7134154821675013808,{"inputs":[{"Node":{"node_id":408,"output_index":0}},{"Node":{"node_id":14205611254835578455,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7135480377162524224,{"inputs":[{"Node":{"node_id":487,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[28.82327697714288,-49.808276940773226]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.29474475571},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7148230379224894975,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[1,[506.7057613168725,531.9348803536052]],[2,[497.8388203017833,534.5393613778391]],[3,[488.5329218106997,551.6587029416252]],[4,[500.77983539094663,544.0208428593207]],[5,[500.4506172839507,547.5105547934772]],[6,[490.17901234567904,556.0043819539711]],[7,[495.90740740740733,567.882982777016]],[8,[502.6234567901235,563.1154930650816]],[9,[510.261316872428,573.2078189300412]],[10,[496.50000000000006,582.6234567901236]],[11,[504.00617283950623,588.9444444444446]],[12,[513.3888888888889,585.5544307531777]],[13,[516.8017832647463,593.4437585733884]],[14,[496.49999999999994,603.4117893613783]],[15,[496.30246913580254,612.3006782502672]],[16,[478.9197530864198,618.6875095259874]],[17,[448.3683127572017,617.6340115836006]],[18,[438.2283950617284,585.5544307531777]],[19,[468.05555555555594,550.6710486206383]],[20,[480.89506172839504,532.4323654930657]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-7.188100137174104,2.6138545953361927]],[3,[4.565157750342848,-4.301783264746064]],[4,null],[5,[-6.737997256515712,3.1824417009599983]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[0.0,0.0]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[0.0,0.0]],[20,[7.46503467504715,-4.02781143068205]]],"handle_end":[[1,[3.4386245260820374,-1.250408918575317]],[2,[0.27087722942241044,-5.120145445603839]],[3,null],[4,null],[5,[0.0,0.0]],[6,[-2.508333333333439,-2.0902777777778283]],[7,[-3.6872427983540206,1.4485596707820605]],[8,[-1.7777777777777717,-5.728395061728406]],[9,[6.716049382716108,-8.49382716049422]],[10,[-2.765432098765416,-3.555555555555543]],[11,[-3.851851851851848,0.7581344568814075]],[12,[-0.39506172839503506,-1.975308641975289]],[13,[0.0,0.0]],[14,[-0.7901234567900701,-4.938271604938336]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[-3.394604481024089,3.2873037646699004]],[20,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[8861964493222160710,{"inputs":[{"Node":{"node_id":16894739051789815098,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":0.0390625,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":0.0390625,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.4003149237651733,0.0,0.0,0.4003149237651733,0.5,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[9286544882258200464,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[480.8950617283949,532.7798353909467]],[2,[472.818244170096,545.5973936899862]],[3,[455.2160493827161,586.837448559671]],[4,[464.82921810699577,552.1378600823044]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-5.249967385837806,9.166609721304098]],[3,[0.0,0.0]],[4,[4.236143848022095,-8.765075372687306]]],"handle_end":[[1,[5.530864197530832,-9.657064471879266]],[2,[0.0,0.0]],[3,[-10.501290993452583,21.72839506172852]],[4,[-3.58969669257732,1.843621399176868]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9422094883894860610,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[527.0733882030179,547.0898491083676]],[2,[500.121399176955,531.6385459533608]],[3,[481.882716049383,533.8333333333337]],[4,[495.38065843621376,614.5137174211251]],[5,[541.9979423868313,611.7921810699589]],[6,[530.2777777777774,564.9115226337451]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[5.684341886080804e-14,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[16.644617182340255,-0.4357059391355733]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9570557034533539493,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[740.3456790123458,588.2030178326476]],[2,[755.3312757201647,586.2448559670783]],[3,[794.0473251028808,582.3820301783265]],[4,[789.2187928669412,601.4967933823075]],[5,[767.1831275720166,614.1625514403293]],[6,[751.1172839506169,611.1776406035664]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[9.481481481481524,0.4824094931645959]],[3,[0.0,0.0]],[4,[-8.427983539094612,8.539557783673331]],[5,[-11.149519890260535,0.2794994541025062]],[6,[0.0,0.0]]],"handle_end":[[1,[-9.481481481481524,-0.4824094931645959]],[2,[-9.305898491083669,-1.1412894375856697]],[3,[8.427983539094612,-8.539557783673331]],[4,[11.149519890260535,-0.2794994541025062]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9603838021022368374,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[744.3996087994717,586.9732002235432]],[2,[734.9571457603006,587.5194584158918]],[3,[698.0912208504803,600.3792866941013]],[4,[706.1680384087791,607.8415637860082]],[5,[710.9477975918305,613.6358024691357]],[6,[729.3449931412895,610.3875171467763]],[7,[779.7592592592597,612.6204267490609]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[2.1947873799731497,4.691071467853249]],[5,[7.452522481329197,2.721536351166037]],[6,[15.119646395366544,2.853223593964344]],[7,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[6.496570644718986,-11.149519890260422]],[3,[-2.494608558449272,-5.331900091455282]],[4,null],[5,null],[6,[0.0,0.0]],[7,[9.28638926992835,13.56378600823075]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[9778003574990260202,{"inputs":[{"Node":{"node_id":6926019345498826421,"output_index":0}},{"Node":{"node_id":5364427239360309137,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10278740841813346388,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[744.3996087994717,586.9732002235432]],[2,[734.9571457603006,587.5194584158918]],[3,[698.0912208504803,600.3792866941013]],[4,[706.1680384087791,607.8415637860082]],[5,[710.9477975918305,613.6358024691357]],[6,[729.3449931412895,610.3875171467763]],[7,[779.7592592592597,612.6204267490609]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[2.1947873799731497,4.691071467853249]],[5,[7.452522481329197,2.721536351166037]],[6,[15.119646395366544,2.853223593964344]],[7,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[6.496570644718986,-11.149519890260422]],[3,[-2.494608558449272,-5.331900091455282]],[4,null],[5,null],[6,[0.0,0.0]],[7,[9.28638926992835,13.56378600823075]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[10486443711686704000,{"inputs":[{"Node":{"node_id":5714505144727602368,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.8017490634762537,-0.01414534358159647,0.01414534358159647,0.8017490634762537,0.16624251433851747,0.4151795327805333]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[10544930474333783117,{"inputs":[{"Node":{"node_id":17173383864410319040,"output_index":0}},{"Node":{"node_id":4633399390154487467,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11155094820673141470,{"inputs":[{"Node":{"node_id":97478832511923699,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.9551417334224788,-0.015106261802889598,0.015106261802889598,0.9551417334224788,0.00021974161476479015,0.4897044414953709]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11279424538712841875,{"inputs":[{"Node":{"node_id":2489761779922717592,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[325.70395367352455,0.0,0.0,325.70395367352455,156.17876237585838,586.4433196420664]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11345069121502219134,{"inputs":[{"Node":{"node_id":12068777759187203228,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[99.06627546613834,0.0,0.0,99.06627546613834,645.3333333333333,601.349243326633]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[11377169273880889832,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":14433811491576609500,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11427960919145580782,{"inputs":[{"Node":{"node_id":6873123446543957690,"output_index":0}},{"Node":{"node_id":11345069121502219134,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11472292186872186521,{"inputs":[{"Node":{"node_id":4452902364641883403,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-1367.319046874664,107.29818643577867]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[4.24444444444444,0.8618453375356869]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11807598261442997948,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[527.0733882030179,547.0898491083676]],[2,[500.121399176955,531.6385459533608]],[3,[481.882716049383,533.8333333333337]],[4,[495.38065843621376,614.5137174211251]],[5,[541.9979423868313,611.7921810699589]],[6,[530.2777777777774,564.9115226337451]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[5.684341886080804e-14,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[16.644617182340255,-0.4357059391355733]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[11891167879168294182,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[112.52194787379976,598.7990397805213]],[2,[104.00617283950618,624.6097393689986]],[3,[148.91152263374485,614.1625514403293]],[4,[126.900438957476,611.0020576131687]],[5,[118.93072702331962,598.7990397805213]],[6,[119.98422496570645,609.4218106995885]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[-2.370370370370395,22.25514403292175]],[2,[0.0,0.0]],[3,null],[4,[-2.058260034882977,-0.6051267923739942]],[5,[0.0,0.0]],[6,[-4.477366255144005,-1.843621399176868]]],"handle_end":[[1,[0.0,0.0]],[2,[-21.11385459533605,1.053497942386798]],[3,null],[4,[0.0,0.0]],[5,[0.7023319615912413,-1.9314128943758533]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12068777759187203228,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[645.3333333333333,614.013717421125]],[2,[658.574074074074,609.6851851851851]],[3,[680.2695473251027,600.730452674897]],[4,[699.4958847736627,594.497256515775]],[5,[744.3996087994716,586.9732002235431]],[6,[717.5809327846364,593.2681755829904]],[7,[702.5246913580245,600.8931773149878]],[8,[708.7139917695473,601.783950617284]],[9,[713.2108672458469,610.5533455265964]],[10,[712.0500685871053,614.4420508944315]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,[0.0,0.0]],[2,[4.740740740740762,-4.148148148148152]],[3,[7.374485596707928,-0.92181069958815]],[4,[4.444444444444002,-5.662551440328798]],[5,[0.0,0.0]],[6,[-10.886145404663694,2.8971193415636662]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-58.35223289132739,3.851425709744945]]],"handle_end":[[1,[-4.740740740740762,4.148148148148152]],[2,[-6.174173455107166,0.7717716818881399]],[3,[-1.6866098186769705,2.1488658430550913]],[4,[-5.794238683127446,-2.0192043895747247]],[5,[10.516302710276136,-2.79869346321857]],[6,[0.0,0.0]],[7,[-2.89711934156378,-1.975308641975289]],[8,[-2.5361987501905787,-3.706752019509281]],[9,[-0.08779149519853036,-2.2109123484780184]],[10,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12325841371509826180,{"inputs":[{"Node":{"node_id":6980979116665635870,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.9551417334224788,-0.015106261802889598,0.015106261802889598,0.9551417334224788,0.00021974161476479015,0.4897044414953709]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12435496696188763850,{"inputs":[{"Node":{"node_id":9286544882258200464,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[25.697601339011612,0.0,0.0,25.697601339011612,455.1974603893833,559.8086419753088]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[12717405604755313921,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":15483449862348058100,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12768614558324028960,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":6710503329407068595,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[12875520257830460085,{"inputs":[{"Node":{"node_id":11891167879168294182,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[44.90534979423869,0.0,0.0,44.90534979423869,104.00617283950616,611.70438957476]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[13606781735926093266,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[645.3333333333333,614.013717421125]],[2,[658.574074074074,609.6851851851851]],[3,[680.2695473251027,600.730452674897]],[4,[699.4958847736627,594.497256515775]],[5,[744.3996087994716,586.9732002235431]],[6,[717.5809327846364,593.2681755829904]],[7,[702.5246913580245,600.8931773149878]],[8,[708.7139917695473,601.783950617284]],[9,[713.2108672458469,610.5533455265964]],[10,[712.0500685871053,614.4420508944315]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,[0.0,0.0]],[2,[4.740740740740762,-4.148148148148152]],[3,[7.374485596707928,-0.92181069958815]],[4,[4.444444444444002,-5.662551440328798]],[5,[0.0,0.0]],[6,[-10.886145404663694,2.8971193415636662]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-58.35223289132739,3.851425709744945]]],"handle_end":[[1,[-4.740740740740762,4.148148148148152]],[2,[-6.174173455107166,0.7717716818881399]],[3,[-1.6866098186769705,2.1488658430550913]],[4,[-5.794238683127446,-2.0192043895747247]],[5,[10.516302710276136,-2.79869346321857]],[6,[0.0,0.0]],[7,[-2.89711934156378,-1.975308641975289]],[8,[-2.5361987501905787,-3.706752019509281]],[9,[-0.08779149519853036,-2.2109123484780184]],[10,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14080831508667499826,{"inputs":[{"Node":{"node_id":11377169273880889832,"output_index":0}},{"Node":{"node_id":14113040319560793790,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14113040319560793790,{"inputs":[{"Node":{"node_id":9603838021022368374,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[81.66803840877935,0.0,0.0,81.66803840877935,698.0912208504803,600.730600472027]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14205611254835578455,{"inputs":[{"Node":{"node_id":14335659566300901430,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-1339.7031164295145,65.50112655997924]},"exposed":false}},{"Value":{"tagged_value":{"F64":-2.429481024944041},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[4.244995417859058,0.8619572141015625]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2.80968031327194e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14335659566300901430,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":14579754335592291854,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[14433811491576609500,{"inputs":[{"Node":{"node_id":9570557034533539493,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[54.46552409086371,0.0,0.0,54.46552409086371,740.3456790123458,598.202467627757]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[14579754335592291854,{"inputs":[{"Node":{"node_id":1644624352314732667,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":0.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[0.4003149237651733,0.0,0.0,0.4003149237651733,0.5,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15277819403265847073,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":4913361824430066698,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[15483449862348058100,{"inputs":[{"Node":{"node_id":5382879283978921947,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[54.46552409086371,0.0,0.0,54.46552409086371,740.3456790123458,598.202467627757]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15552693212536925398,{"inputs":[{"Node":{"node_id":1598976462838094167,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.08794502,"green":0.031974703,"blue":0.02463841,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.08794502,"green":0.031974703,"blue":0.02463841,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-3.736881038589957,16.277244152244293,-16.277244152244293,-3.736881038589957,465.40560531842544,602.410265373743]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[15848750910363784662,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":17911294938421300842,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16164610528699022118,{"inputs":[{"Node":{"node_id":7134154821675013808,"output_index":0}},{"Node":{"node_id":12875520257830460085,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16360261423333265502,{"inputs":[{"Node":{"node_id":287,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"F64Array":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[16815500381887058038,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Node":{"node_id":74,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,768.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Node":{"node_id":6,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":4}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":7,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},{"Concrete":{"name":"core_types::list::List"}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[6,{"inputs":[{"Node":{"node_id":5,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}},"import_index":2}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::TranslateFootprintNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[7,{"inputs":[{"Node":{"node_id":2,"output_index":0}},{"Value":{"tagged_value":{"U32":1},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"repeat_nodes::repeat_nodes::RepeatNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16821952675128396603,{"inputs":[{"Node":{"node_id":3885641499621884510,"output_index":0}},{"Node":{"node_id":36935169817407978,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16831252454255560063,{"inputs":[{"Node":{"node_id":14080831508667499826,"output_index":0}},{"Node":{"node_id":17257434333682934071,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[16894739051789815098,{"inputs":[{"Node":{"node_id":17245613731534563958,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[337.1982047610469,692.7466487935636]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[50.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17020523203516467057,{"inputs":[{"Node":{"node_id":7148230379224894975,"output_index":0}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.08794502,"green":0.031974703,"blue":0.02463841,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.08794502,"green":0.031974703,"blue":0.02463841,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[-3.736881038589957,16.277244152244293,-16.277244152244293,-3.736881038589957,465.40560531842544,602.410265373743]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17173383864410319040,{"inputs":[{"Node":{"node_id":15277819403265847073,"output_index":0}},{"Node":{"node_id":15552693212536925398,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::StampLayerPathNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17245613731534563958,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17257434333682934071,{"inputs":[{"Node":{"node_id":13606781735926093266,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[99.06627546613834,0.0,0.0,99.06627546613834,645.3333333333333,601.349243326633]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[17414691604179185270,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"name":"core_types::list::List"}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[546.1069958847736,566.7818930041152]],[2,[530.2777777777771,564.9115226337452]],[3,[539.3641975308641,608.7633744855966]],[4,[547.6604938271604,606.7880658436213]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Concrete":{"name":"core_types::list::List"}},"import_index":0}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}],[17911294938421300842,{"inputs":[{"Node":{"node_id":17414691604179185270,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"position":[0.0,1.0],"midpoint":[0.5,0.5],"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}]}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Pad"},"exposed":false}},{"Value":{"tagged_value":{"OptionalDAffine2":[17.382716049383248,0.0,0.0,17.382716049383248,530.2777777777771,586.837448559671]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"INDEX","inject":"","sources":[]}}],[18142347460553706128,{"inputs":[{"Node":{"node_id":3719764965605527929,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core_types::context::ContextImpl<'_>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":"","sources":[]}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[74,{"persistent_metadata":{"display_name":"Foreground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-5,4]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[75,{"persistent_metadata":{"display_name":"Slab Spires","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":45}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[76,{"persistent_metadata":{"display_name":"Ground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":144}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[77,{"persistent_metadata":{"display_name":"Spike Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":33}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[78,{"persistent_metadata":{"display_name":"Distant Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":12}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[79,{"persistent_metadata":{"display_name":"Sky","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[81,{"persistent_metadata":{"display_name":"Left Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,7]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[82,{"persistent_metadata":{"display_name":"Right Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[83,{"persistent_metadata":{"display_name":"Stone Cluster","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[85,{"persistent_metadata":{"display_name":"Left Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":21}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[87,{"persistent_metadata":{"display_name":"Ball","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,10]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[88,{"persistent_metadata":{"display_name":"Left Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[90,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[93,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,10]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[94,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,10]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[96,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[99,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-39,13]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[100,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,13]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[102,{"persistent_metadata":{"display_name":"Agave Plant","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,19]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[103,{"persistent_metadata":{"display_name":"Right Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[105,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[108,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,19]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[109,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,19]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[111,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[114,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-39,22]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[115,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,22]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[117,{"persistent_metadata":{"display_name":"Stones","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,28]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[118,{"persistent_metadata":{"display_name":"Highlight","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[119,{"persistent_metadata":{"display_name":"Highlight","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[120,{"persistent_metadata":{"display_name":"Ground Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[122,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[126,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,28]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[128,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[132,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,31]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[134,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[138,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,34]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[140,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[143,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-39,37]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[144,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,37]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[155,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[159,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,49]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[161,{"persistent_metadata":{"display_name":"Rocky Outcropping","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,55]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[162,{"persistent_metadata":{"display_name":"Right Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":60}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[164,{"persistent_metadata":{"display_name":"Center Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[165,{"persistent_metadata":{"display_name":"Rocky Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[166,{"persistent_metadata":{"display_name":"Left Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":33}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[168,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,58]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[169,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[170,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[171,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[172,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[173,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[174,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[175,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[176,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[177,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[178,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[179,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[180,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[181,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[182,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[184,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[188,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,58]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[190,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[191,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,61]}}},"network_metadata":null}}],[193,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-60,61]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[194,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,61]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[196,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[200,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,64]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[202,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[206,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,67]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[208,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[212,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,70]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[214,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[218,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,73]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[220,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[224,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,76]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[226,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[227,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,79]}}},"network_metadata":null}}],[229,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-60,79]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[230,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,79]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[232,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[236,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,82]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[238,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[242,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,85]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[244,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[248,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,88]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[250,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[254,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-39,91]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[256,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[257,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,94]}}},"network_metadata":null}}],[259,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-60,94]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[260,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,94]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[262,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[266,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,97]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[268,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[272,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-39,100]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[274,{"persistent_metadata":{"display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,121]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[275,{"persistent_metadata":{"display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[277,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[281,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,121]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[283,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[287,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,124]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[290,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[291,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[292,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[300,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[304,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,145]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[306,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[310,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,148]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[312,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[316,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-39,151]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[318,{"persistent_metadata":{"display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,139]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[319,{"persistent_metadata":{"display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[321,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[323,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[325,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,139]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[327,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[329,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[331,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,142]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[393,{"persistent_metadata":{"display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,193]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[394,{"persistent_metadata":{"display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[396,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[398,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[400,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,193]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[402,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[404,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[406,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,196]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[408,{"persistent_metadata":{"display_name":"Reflections","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[409,{"persistent_metadata":{"display_name":"Ground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[411,{"persistent_metadata":{"display_name":"From Spike Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,217]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[412,{"persistent_metadata":{"display_name":"From Center Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[413,{"persistent_metadata":{"display_name":"From Left Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[415,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[418,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,217]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[419,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,217]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[421,{"persistent_metadata":{"display_name":"Left Half","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,223]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[422,{"persistent_metadata":{"display_name":"Right Half","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[424,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[427,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,223]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[428,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,223]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[430,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[433,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,226]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[434,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,226]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[436,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[439,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-39,229]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[440,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,229]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[442,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[445,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,232]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[446,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,232]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[448,{"persistent_metadata":{"display_name":"Shadow Fissure","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,238]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[449,{"persistent_metadata":{"display_name":"Shadow Lower","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[450,{"persistent_metadata":{"display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[451,{"persistent_metadata":{"display_name":"Shadow Upper","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[453,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[455,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[457,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,238]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[459,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[463,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,241]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[465,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[467,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[469,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,244]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[471,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[475,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-29,247]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[477,{"persistent_metadata":{"display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,253]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[478,{"persistent_metadata":{"display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[481,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[485,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,253]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[487,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[491,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,256]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[493,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[496,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,259]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[497,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,259]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[36935169817407978,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,160]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[97478832511923699,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,181]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[600590258445096812,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,169]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[989999757220954936,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1453710883947581217,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,121]}}},"network_metadata":null}}],[1598976462838094167,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,184]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1635416892097245588,{"persistent_metadata":{"display_name":"Shading","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1644624352314732667,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-39,211]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2489761779922717592,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,160]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2999157202967297847,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-63,181]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3707802522175443254,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3719764965605527929,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-63,106]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3885641499621884510,{"persistent_metadata":{"display_name":"Rock Outcropping","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3930114406985796561,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,211]}}},"network_metadata":null}}],[4452902364641883403,{"persistent_metadata":{"display_name":"Soft Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4454263454059119441,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,211]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4633399390154487467,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4913361824430066698,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5105625446268484763,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5175066652268973319,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-63,172]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5364427239360309137,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5382879283978921947,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-39,133]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5714505144727602368,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-70,106]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6015109908395573189,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6272196533192700024,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6710503329407068595,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,106]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6873123446543957690,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6926019345498826421,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6980979116665635870,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,172]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7134154821675013808,{"persistent_metadata":{"display_name":"Left Slope Shading","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7135480377162524224,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7148230379224894975,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,175]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8861964493222160710,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9286544882258200464,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,169]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9422094883894860610,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,178]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9570557034533539493,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,115]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9603838021022368374,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,112]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9778003574990260202,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10278740841813346388,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,130]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10486443711686704000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10544930474333783117,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11155094820673141470,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11279424538712841875,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11345069121502219134,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11377169273880889832,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11427960919145580782,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11472292186872186521,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,43]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11807598261442997948,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,187]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11891167879168294182,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,202]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12068777759187203228,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,127]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12325841371509826180,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12435496696188763850,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12717405604755313921,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12768614558324028960,{"persistent_metadata":{"display_name":"Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12875520257830460085,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13606781735926093266,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,109]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14080831508667499826,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14113040319560793790,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14205611254835578455,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,208]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14335659566300901430,{"persistent_metadata":{"display_name":"Soft Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14433811491576609500,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14579754335592291854,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15277819403265847073,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15483449862348058100,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15552693212536925398,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15848750910363784662,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16164610528699022118,{"persistent_metadata":{"display_name":"Spike Spire Corner Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,202]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16360261423333265502,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-39,124]}}},"network_metadata":null}}],[16815500381887058038,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-1,1]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,-3]}}},"network_metadata":null}}],[6,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-28,-3]}}},"network_metadata":null}}],[7,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16821952675128396603,{"persistent_metadata":{"display_name":"Main Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,157]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16831252454255560063,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16894739051789815098,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,46]}}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17020523203516467057,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17173383864410319040,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The wire whose lanes appear at the start of the extended level.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The wire whose lanes appear at the end of the extended level.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17245613731534563958,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,46]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17257434333682934071,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17414691604179185270,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,163]}}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17911294938421300842,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Type","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spread Method","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18142347460553706128,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,106]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[494.0,-445.5],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1485.0,135.0],"node_graph_width":1981.0},"selection_undo_history":[[],[],[]],"selection_redo_history":[]}}},"collapsed":[],"properties_panel_collapsed_sections":[],"commit_hash":"","document_ptz":{"pan":[-512.25,-384.4351851851852],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":16815500381887058038,"output_index":0}}],"nodes":[[74,{"inputs":[{"Node":{"node_id":75,"output_index":0}},{"Node":{"node_id":81,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[75,{"inputs":[{"Node":{"node_id":76,"output_index":0}},{"Node":{"node_id":161,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[76,{"inputs":[{"Node":{"node_id":77,"output_index":0}},{"Node":{"node_id":16164610528699022118,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[77,{"inputs":[{"Node":{"node_id":78,"output_index":0}},{"Node":{"node_id":448,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[78,{"inputs":[{"Node":{"node_id":79,"output_index":0}},{"Node":{"node_id":477,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[79,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":493,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[81,{"inputs":[{"Node":{"node_id":82,"output_index":0}},{"Node":{"node_id":87,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[82,{"inputs":[{"Node":{"node_id":83,"output_index":0}},{"Node":{"node_id":102,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[83,{"inputs":[{"Node":{"node_id":85,"output_index":0}},{"Node":{"node_id":117,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[85,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":155,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[87,{"inputs":[{"Node":{"node_id":88,"output_index":0}},{"Node":{"node_id":90,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[88,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":96,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[90,{"inputs":[{"Node":{"node_id":93,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.5999119243817099,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.5999119243817099,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.8142009530188992,0.0,0.0,0.8142009530188968,0.32017597146452564,0.5902044022091886]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[93,{"inputs":[{"Node":{"node_id":94,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[851.1666666666667,668.5377104806669]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[39.677869315599935,39.67786931560005]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[94,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[96,{"inputs":[{"Node":{"node_id":99,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.7594724231651877,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.7594724231651877,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.124294480293808,0.0,0.0,1.3099840420120037,-0.039177362759659246,0.5000000000000018]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[99,{"inputs":[{"Node":{"node_id":100,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[827.4018790826805,704.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[74.57030178326477,63.99999999999989]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[100,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.03917736275965821,1.5785983631388945e-15]],[2,[0.9501947601024644,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[102,{"inputs":[{"Node":{"node_id":103,"output_index":0}},{"Node":{"node_id":105,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[103,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":111,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[105,{"inputs":[{"Node":{"node_id":108,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.7721675713724807,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.7721675713724807,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[390.761295413478,-4.263256414560601e-14,0.0,346.777200769983,958.6167473835268,450.925897956864]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[108,{"inputs":[{"Node":{"node_id":109,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[858.7905598373798,601.6041802310946]},"exposed":false}},{"Value":{"tagged_value":{"F64":7.016709876377979e-15},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.1014123874504275,0.11427520552998474]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[7.90668593248704e-15,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[109,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"remove":[],"delta":[[1,[865.1205730638582,195.5865278374037]],[2,[910.288570576692,217.7758226144784]],[3,[943.8009280356002,277.78154080585364]],[4,[956.3057818366484,357.1601779777255]],[5,[914.9853953636192,333.78153826272217]],[6,[838.3252046702362,291.37377319829744]],[7,[758.9465674983644,277.2378515101559]],[8,[810.5970505896508,321.8203737573716]],[9,[770.907732003715,320.7329951659761]],[10,[670.8689015953286,344.1116348809794]],[11,[730.1310348263835,333.2378489670244]],[12,[783.956275100461,383.2572641712176]],[13,[885.0824841002429,442.5193974022726]],[14,[783.956275100461,458.8300762732051]],[15,[728.4999669392903,519.7232773913535]],[16,[763.8397711596442,482.7524052839062]],[17,[813.8591863638374,482.2087159882085]],[18,[909.5485024066418,487.10191964948825]],[19,[988.3834502828158,483.83978387530175]],[20,[969.8980142290924,494.7135697892568]],[21,[990.5582074656068,498.5193948591411]],[22,[1000.3446147881664,518.0922095042602]],[23,[972.616460707581,519.7232773913535]],[24,[1014.480536476308,543.1019171063567]],[25,[1110.71354181481,529.509684713913]],[26,[1143.3348995566753,518.6358987999579]],[27,[1093.315484352482,509.93687006879384]],[28,[1134.0921815298134,465.8980371172759]],[29,[1205.8591685619167,441.9757081065748]],[30,[1277.62615559402,478.946580214022]],[31,[1336.888288825075,539.8397813321702]],[32,[1323.839745728329,479.4902695097197]],[33,[1284.1504271423933,435.99512585389954]],[34,[1256.9659623575055,413.8640589204806]],[35,[1281.975669959602,393.04367149377714]],[36,[1387.451393324966,404.4611467034299]],[37,[1302.6358631961166,363.1407602304008]],[38,[1223.8009153199428,370.7524103701693]],[39,[1145.5096567394662,398.4805644507546]],[40,[1180.3057716641222,344.11163488097947]],[41,[1216.7329544758718,262.5582405263166]],[42,[1287.4125629165796,203.2961072952616]],[43,[1210.2086829274988,227.76212560166044]],[44,[1156.927131949119,259.8397940478278]],[45,[1105.8203381535304,315.83979150469634]],[46,[1098.7523773094597,263.6456191177121]],[47,[1073.742669707363,200.0339715210751]],[48,[1078.092184072945,124.46115941908752]],[49,[1038.402865487009,182.635914058747]],[50,[1016.655293659099,296.810666155275]],[51,[994.3640325354912,266.3640655962009]],[52,[939.3251404063708,207.7548507796705]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[27,27],[28,28],[29,29],[30,30],[31,31],[32,32],[33,33],[34,34],[35,35],[36,36],[37,37],[38,38],[39,39],[40,40],[41,41],[42,42],[43,43],[44,44],[45,45],[46,46],[47,47],[48,48],[49,49],[50,50],[51,51],[52,52]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,21],[21,22],[22,23],[23,24],[24,25],[25,26],[26,27],[27,28],[28,29],[29,30],[30,31],[31,32],[32,33],[33,34],[34,35],[35,36],[36,37],[37,38],[38,39],[39,40],[40,41],[41,42],[42,43],[43,44],[44,45],[45,46],[46,47],[47,48],[48,49],[49,50],[50,51],[51,52],[52,1]],"handle_primary":[[1,[0.0,0.0]],[2,[16.937999067312603,14.3156740497256]],[3,[7.06796084407074,48.3883473171]],[4,[0.0,0.0]],[5,[-19.02912534942118,-15.766989575234843]],[6,[-25.00970760209657,-1.0873785913954634]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[-26.64077548918988,2.7184464784887723]],[10,[0.0,0.0]],[11,[26.097086193492142,5.980582252675276]],[12,[41.864075768726934,30.606794749262978]],[13,[0.0,0.0]],[14,[-44.03883295151786,20.11650394081687]],[15,[0.0,0.0]],[16,[14.13592168814148,-1.631067887093252]],[17,[31.53397915046969,11.961164505350553]],[18,[18.485436053723447,-2.7184464784887723]],[19,[0.0,0.0]],[20,[0.0,0.0]],[21,[0.0,0.0]],[22,[0.0,0.0]],[23,[0.0,0.0]],[24,[39.145629290237935,9.786407322559626]],[25,[14.679610983839666,-8.155339435466317]],[26,[0.0,0.0]],[27,[0.0,0.0]],[28,[0.0,0.0]],[29,[20.116503940816983,1.631067887093252]],[30,[26.097086193492032,5.436892956977488]],[31,[0.0,0.0]],[32,[-24.466018306398837,-28.81553267198086]],[33,[-13.048543096746243,-19.57281464511908]],[34,[0.0,0.0]],[35,[8.699028731163935,-10.3300966182573]],[36,[0.0,0.0]],[37,[-48.38834731709994,-2.174757182791041]],[38,[-17.941746758026056,-1.0873785913955205]],[39,[0.0,0.0]],[40,[12.504853801048512,-14.135921688141591]],[41,[15.427586663144211,-29.493915679540574]],[42,[0.0,0.0]],[43,[-16.310678870932634,13.048543096746071]],[44,[-21.74757182791018,14.135921688141591]],[45,[0.0,0.0]],[46,[-6.524271548372781,-16.310678870932577]],[47,[-1.6310678870931952,-7.611650139768528]],[48,[0.0,0.0]],[49,[-10.873785913954862,28.81553267198086]],[50,[0.0,0.0]],[51,[-18.48543605372367,-25.009707602096626]],[52,[-26.097086193492142,-12.504853801048256]]],"handle_end":[[1,[-14.628148339931158,-12.363432230293256]],[2,[-7.067960844070626,-48.3883473171]],[3,[5.436892956977545,-25.553396897794357]],[4,[19.02912534942141,15.766989575234843]],[5,[25.00970760209657,1.0873785913954634]],[6,[0.0,0.0]],[7,[-5.436892956977545,-19.029125349421292]],[8,[26.64077548918988,-2.7184464784887723]],[9,[27.18446478488761,-22.291261123607853]],[10,[-26.097086193492142,-5.980582252675276]],[11,[-41.864075768726934,-30.606794749263088]],[12,[-31.533979150469577,-8.15533943546626]],[13,[44.03883295151786,-20.11650394081687]],[14,[0.0,0.0]],[15,[-14.13592168814148,1.631067887093252]],[16,[-31.53397915046969,-11.961164505350553]],[17,[-18.48543605372356,2.7184464784887723]],[18,[-11.41747520965282,-9.242718026861724]],[19,[3.805825069884008,-5.436892956977601]],[20,[-4.8932036612795855,-5.980582252675276]],[21,[-4.3495143655819675,-3.262135774186504]],[22,[3.805825069884122,-4.3495143655819675]],[23,[-39.14562929023816,-9.786407322559626]],[24,[-14.67961098383944,8.155339435466317]],[25,[-12.504853801048284,-3.262135774186504]],[26,[30.446600559074568,-5.980582252675276]],[27,[-8.15533943546643,25.00970760209657]],[28,[-20.11650394081721,-1.6310678870931952]],[29,[-26.097086193492032,-5.436892956977488]],[30,[-0.5436892956979591,-24.46601830639895]],[31,[24.466018306399064,28.81553267198086]],[32,[13.048543096746243,19.57281464511908]],[33,[0.0,0.0]],[34,[-8.699028731163935,10.330096618257244]],[35,[-71.76698703210332,-41.864075768726934]],[36,[48.388347317099715,2.174757182790927]],[37,[17.941746758026056,1.0873785913955205]],[38,[0.0,0.0]],[39,[-9.034630967226803,10.21306109338667]],[40,[-18.48543605372356,35.33980422035398]],[41,[-32.07766844616731,15.223300279537028]],[42,[16.310678870932634,-13.048543096746071]],[43,[21.74757182791018,-14.135921688141565]],[44,[0.0,0.0]],[45,[6.524271548372553,16.310678870932577]],[46,[1.6310678870931952,7.611650139768528]],[47,[-22.83495041930587,36.42718281174942]],[48,[10.87378591395509,-28.81553267198086]],[49,[-5.98058225267539,-75.02912280628982]],[50,[18.48543605372356,25.009707602096626]],[51,[26.097086193492032,12.50485380104834]],[52,[21.791261123607796,0.5873785913955203]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0],[27,0],[28,0],[29,0],[30,0],[31,0],[32,0],[33,0],[34,0],[35,0],[36,0],[37,0],[38,0],[39,0],[40,0],[41,0],[42,0],[43,0],[44,0],[45,0],[46,0],[47,0],[48,0],[49,0],[50,0],[51,0],[52,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":52}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[111,{"inputs":[{"Node":{"node_id":114,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0438400201708171,0.0,0.0,1.0438400201708171,-0.04384002017081715,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[114,{"inputs":[{"Node":{"node_id":115,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[926.5490676442352,657.3888888888888]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[97.92901234567933,111.111111111111]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[115,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.04384002017081715,1.8188575645616826e-15]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[117,{"inputs":[{"Node":{"node_id":118,"output_index":0}},{"Node":{"node_id":122,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[118,{"inputs":[{"Node":{"node_id":119,"output_index":0}},{"Node":{"node_id":128,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[119,{"inputs":[{"Node":{"node_id":120,"output_index":0}},{"Node":{"node_id":134,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[120,{"inputs":[{"Node":{"node_id":1635416892097245588,"output_index":0}},{"Node":{"node_id":140,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[122,{"inputs":[{"Node":{"node_id":126,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[19.5555555555556,-4.839506172839606,4.839506172839606,19.5555555555556,188.35185185185185,705.4876543209876]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[126,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"delta":[[1,[83.98971193415636,727.8086419753087]],[2,[79.11728395061729,724.0555555555555]],[3,[94.12962962962963,696.9938271604938]],[4,[102.03086419753087,696.7962962962963]],[5,[115.66049382716052,719.5123456790124]],[6,[123.75925925925928,720.3024691358024]],[7,[131.06790123456793,702.1296296296296]],[8,[148.8456790123457,665.3888888888888]],[9,[158.40763603109284,655.1124066453283]],[10,[158.3271604938272,661.4382716049382]],[11,[162.67283950617286,705.2901234567901]],[12,[169.3888888888889,709.0432098765432]],[13,[177.0925925925926,696.4012345679012]],[14,[188.5493827160494,680.4012345679012]],[15,[196.05555555555557,678.8209876543209]],[16,[211.0679012345679,719.5123456790124]],[17,[209.09259259259255,727.8086419753085]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,1]],"handle_primary":[[1,[-3.7139917695473343,-0.22427983539080287]],[2,[3.2490948717098007,-6.29142916067417]],[3,[2.3703703703704093,-2.5679012345678984]],[4,[3.753086419753103,4.9382716049382225]],[5,[0.9523778763475974,1.643318688599834]],[6,[0.0,0.0]],[7,[2.962962962962962,-6.320987654321016]],[8,[2.172839506172835,-5.3333333333332575]],[9,[1.416857186404485,0.2219173906416927]],[10,[-0.24572721430195088,3.082066920469856]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[3.555555555555543,-7.308641975308547]],[14,[2.3703703703703525,-2.5679012345678984]],[15,[2.370370370370381,3.950617283950692]],[16,[0.0,0.0]],[17,[-3.028806584362002,2.897119341564121]]],"handle_end":[[1,[-2.4142661179698734,4.6748971193414945]],[2,[-2.3703703703703525,2.5679012345678984]],[3,[-3.753086419753074,-4.9382716049382225]],[4,[-1.119341563786023,-1.9314128943758533]],[5,[-4.148148148148167,0.5925925925926094]],[6,[-2.962962962962962,6.320987654321016]],[7,[-2.172839506172835,5.3333333333332575]],[8,[-2.3218581751052625,-0.3636645334502191]],[9,[0.31458619112936503,-3.9457399786616634]],[10,[1.1851851851851904,-8.296296296296305]],[11,[-4.148148148148152,-0.39506172839503506]],[12,[-3.5555555555555713,7.308641975308547]],[13,[-2.370370370370381,2.5679012345678984]],[14,[-2.370370370370381,-3.950617283950692]],[15,[-3.753086419753089,-24.493827160493765]],[16,[3.77785186523289,-3.613597436310215]],[17,[4.846281557722946,0.29265633783461453]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":17}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[128,{"inputs":[{"Node":{"node_id":132,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[19.56336972417776,0.0,0.0,19.56336972417776,153.3152310988675,686.8790742342209]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[132,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[172.61522633744855,706.3436213991771]],[2,[158.95389422344155,655.6901143957208]],[3,[153.6522633744856,666.8374485596709]],[4,[158.12962962962962,718.0637860082305]],[5,[170.5082304526749,714.508230452675]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-1.8436213991769537,9.744855967078138]],[4,[0.0,0.0]],[5,[3.160493827160508,-3.5555555555554292]]],"handle_end":[[1,[10.930041152263357,25.448559670781947]],[2,[1.8436213991768968,-9.744855967078138]],[3,[0.0,0.0]],[4,[-3.403056460676396,3.828438518260782]],[5,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[134,{"inputs":[{"Node":{"node_id":138,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[37.1348988785971,0.0,0.0,37.1348988785971,90.03336397017412,704.4077331232154]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[138,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[126.55144032921808,714.7983539094649]],[2,[105.84979423868312,685.0102880658435]],[3,[90.17901234567904,708.7139917695472]],[4,[116.38477366255144,723.5946502057614]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-2.4237705319430347,10.543401813951732]],[4,[0.0,0.0]]],"handle_end":[[1,[16.460905349794245,13.695473251028716]],[2,[2.6337448559670804,-11.456790123456472]],[3,[0.0,0.0]],[4,[3.6604938271605647,11.166666666666742]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[140,{"inputs":[{"Node":{"node_id":143,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[143,{"inputs":[{"Node":{"node_id":144,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[22.81427346112025,718.7256085656885]},"exposed":false}},{"Value":{"tagged_value":{"F64":-1.6569586493181607},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[114.60967448512612,10.883703174332329]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.14452841816522286,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[144,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[155,{"inputs":[{"Node":{"node_id":159,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.5271152,"green":0.095307484,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.37123775,"green":0.082282715,"blue":0.036889445,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.5271152,"green":0.095307484,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.37123775,"green":0.082282715,"blue":0.036889445,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-2.710412887146333,-23.1111111111112,23.1111111111112,-2.710412887146333,242.68216655522804,730.7222222222223]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[159,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[-2.6666666666667,581.3333333333333]],[2,[153.0925925925926,632.7962962962963]],[3,[266.2777777777779,704.4077331232156]],[4,[249.09259259259255,770.8703703703704]],[5,[-2.6666666666666856,770.8703703703704]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[69.92592592592595,31.40740740740773]],[3,[8.273042653236644,16.012340619167617]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[-105.44980253803315,-47.36304690267639]],[2,[-9.18518518518522,-17.777777777777715]],[3,[19.407407407407447,-32.148148148148266]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[161,{"inputs":[{"Node":{"node_id":162,"output_index":0}},{"Node":{"node_id":168,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[162,{"inputs":[{"Node":{"node_id":164,"output_index":0}},{"Node":{"node_id":274,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[164,{"inputs":[{"Node":{"node_id":165,"output_index":0}},{"Node":{"node_id":318,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[165,{"inputs":[{"Node":{"node_id":166,"output_index":0}},{"Node":{"node_id":16821952675128396603,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[166,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":393,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[168,{"inputs":[{"Node":{"node_id":169,"output_index":0}},{"Node":{"node_id":184,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[169,{"inputs":[{"Node":{"node_id":170,"output_index":0}},{"Node":{"node_id":190,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[170,{"inputs":[{"Node":{"node_id":171,"output_index":0}},{"Node":{"node_id":196,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[171,{"inputs":[{"Node":{"node_id":172,"output_index":0}},{"Node":{"node_id":202,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[172,{"inputs":[{"Node":{"node_id":173,"output_index":0}},{"Node":{"node_id":208,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[173,{"inputs":[{"Node":{"node_id":174,"output_index":0}},{"Node":{"node_id":214,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[174,{"inputs":[{"Node":{"node_id":175,"output_index":0}},{"Node":{"node_id":220,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[175,{"inputs":[{"Node":{"node_id":176,"output_index":0}},{"Node":{"node_id":226,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[176,{"inputs":[{"Node":{"node_id":177,"output_index":0}},{"Node":{"node_id":232,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[177,{"inputs":[{"Node":{"node_id":178,"output_index":0}},{"Node":{"node_id":238,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[178,{"inputs":[{"Node":{"node_id":179,"output_index":0}},{"Node":{"node_id":244,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[179,{"inputs":[{"Node":{"node_id":180,"output_index":0}},{"Node":{"node_id":250,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[180,{"inputs":[{"Node":{"node_id":181,"output_index":0}},{"Node":{"node_id":256,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[181,{"inputs":[{"Node":{"node_id":182,"output_index":0}},{"Node":{"node_id":262,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[182,{"inputs":[{"Node":{"node_id":12768614558324028960,"output_index":0}},{"Node":{"node_id":268,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[184,{"inputs":[{"Node":{"node_id":188,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[39.72222222222206,0.0,0.0,39.72222222222206,987.6111111111112,567.0288370950365]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[188,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[1027.3333333333333,523.5555555555555]],[2,[987.6111111111112,593.3888888888889]],[3,[1026.2777777777778,610.4999999999999]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[28.22222222222217,-65.11111111111109]],[2,[-16.66666666666663,0.22222222222228535]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[190,{"inputs":[{"Node":{"node_id":193,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.804747218052076,-0.016814875394240036,0.016814875394240036,0.804747218052076,-0.00958710463040996,0.42190817007030024]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[191,{"inputs":[{"Node":{"node_id":194,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[193,{"inputs":[{"Node":{"node_id":191,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[965.2687196297846,544.9034434174798]},"exposed":false}},{"Value":{"tagged_value":{"F64":-98.54705053700596},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[17.59013219658168,55.471003102038694]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925513,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[194,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[-0.15531318767467384,0.11366419216517]],[2,[0.2647731761418837,0.17920265855050785]],[3,[0.7287108039915611,0.06963660702488284]],[4,[0.9388148027481048,0.674134940686276]],[5,[0.038029134760865314,0.7285470752399478]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.12249986382303002,-0.04615791866776875]],[3,[-0.06001521816071698,0.06545334966568245]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[-0.1993257782423989,0.03454533724430142]],[2,[-0.2265909018579063,0.03511994027079236]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[196,{"inputs":[{"Node":{"node_id":200,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[38.43682365493032,0.0,0.0,38.43682365493032,972.0555555555557,551.3395061728395]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[200,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[1004.392496062592,536.8475080018289]],[2,[993.9814814814814,530.7222222222222]],[3,[974.574074074074,539.3148148148148]],[4,[972.0555555555557,547.0185185185185]],[5,[990.3271604938273,558.7222222222222]],[6,[988.3518518518518,565.8333333333333]],[7,[988.9444444444443,571.9567901234568]],[8,[994.0802469135804,561.8388203017832]],[9,[1001.2407407407406,568.2037037037037]],[10,[1010.492379210486,553.0791800030486]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[5.818749999999909,2.0456767733078323]],[5,[1.1368683772161605e-13,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[5.171433893884796,-5.185320665887616]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[1.1368683772161605e-13,0.0]],[9,[0.0,0.0]],[10,[2.600823045267589,7.538372631948732]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[202,{"inputs":[{"Node":{"node_id":206,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[53.32716049382714,0.0,0.0,53.32716049382714,956.3024691358024,514.3048777331495]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[206,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"delta":[[1,[1009.6296296296296,552.8888888888889]],[2,[988.351851851852,494.72222222222223]],[3,[971.3148148148148,466.5740740740741]],[4,[956.3024691358024,462.55639384240214]],[5,[963.3148148148148,466.8703703703703]],[6,[967.9074074074072,482.8703703703703]],[7,[965.9814814814814,501.38888888888886]],[8,[972.5274348422496,495.6732967535437]],[9,[973.0925925925924,496.5]],[10,[968.2037037037036,504.05555555555554]],[11,[975.1666666666664,511.3148148148148]],[12,[981.6851851851852,523.1666666666666]],[13,[967.3148148148148,531.9074074074074]],[14,[974.574074074074,539.3148148148148]],[15,[1001.8333333333334,567.0185185185184]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-6.51851851851859,-12.148148148148152]],[3,[-4.395061728394808,-4.740740740740705]],[4,[0.0,0.0]],[5,[2.814814814814781,3.7037037037036953]],[6,[-5.333333333333144,8.296296296296305]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[3.703703703703809,-0.7407407407407618]],[12,[-4.888888888889028,8.59259259259261]],[13,[0.0,0.0]],[14,[0.0,0.0]],[15,[0.0,0.0]]],"handle_end":[[1,[6.51851851851859,12.148148148148152]],[2,[3.786081133230596,4.083862795394623]],[3,[3.265062349348341,-2.124337414689535]],[4,[-2.814814814814781,-3.7037037037036953]],[5,[5.333333333333485,-8.296296296296305]],[6,[-1.7777777777778283,-0.8888888888889142]],[7,[-2.6666666666667425,0.740740740740705]],[8,[-0.009144947416189098,-0.38774577046183367]],[9,[0.7407407407407618,-4.0]],[10,[-3.7037037037035816,0.7407407407407618]],[11,[4.8888888888888005,-8.59259259259261]],[12,[0.0,0.0]],[13,[-4.296296296296418,-2.6666666666666288]],[14,[-3.4074074074073906,-0.7407407407407618]],[15,[-3.796296296296191,11.166666666666517]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":15}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[208,{"inputs":[{"Node":{"node_id":212,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[68.04938271604942,0.0,0.0,68.04938271604942,922.2777777777778,505.7818923114924]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[212,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[957.8271604938273,462.1234567901235]],[2,[948.746913580247,472.10493827160496]],[3,[925.6111111111112,527.7098765432099]],[4,[922.2777777777778,549.4629629629628]],[5,[977.4876543209878,545.4876543209878]],[6,[990.3271604938273,526.5246913580247]],[7,[984.9112747301664,495.90740740740745]],[8,[965.6358024691358,465.1913580246914]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-6.123456790123441,10.962962962962932]],[3,[-2.469135802469168,9.975308641975287]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"handle_end":[[1,[6.123456790123441,-10.96296296296299]],[2,[2.469135802468827,-9.975308641975287]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[7.407407407407391,6.814814814814838]],[8,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[214,{"inputs":[{"Node":{"node_id":218,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[29.119951226947137,0.0,0.0,29.119951226947137,872.8621399176955,536.8690494335212]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[218,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[901.9820911446426,504.0199918711579]],[2,[890.7057613168722,514.4753086419753]],[3,[872.8621399176955,563.858024691358]],[4,[874.0473251028807,569.7181069958847]],[5,[880.5,566.7222222222222]],[6,[888.3518518518518,541.9814814814815]],[7,[886.574074074074,540.0555555555557]],[8,[891.0185185185185,531.9074074074074]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-3.0946502057612406,7.835390946502002]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"handle_end":[[1,[3.0946502057612406,-7.835390946502002]],[2,[7.111111111111086,-11.522633744855966]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[-7.693415637860312,3.5987654320987303]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[220,{"inputs":[{"Node":{"node_id":224,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[145.16013555673453,0.0,0.0,145.16013555673453,732.4135245596606,570.5314602982482]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[224,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[1,[741.4602194787379,611.9677640603566]],[2,[773.1090534979423,610.0802469135801]],[3,[779.9567901234567,598.5451457288699]],[4,[790.0967078189299,592.170781893004]],[5,[819.0679012345677,520.2695473251028]],[6,[819.3312757201645,537.1255144032921]],[7,[817.6193415637858,545.6851851851851]],[8,[825.5205761316871,544.7633744855966]],[9,[825.2572016460904,550.6893004115226]],[10,[827.364197530864,555.9567901234567]],[11,[830.3930041152262,568.5987654320987]],[12,[837.1090534979422,574.2613168724279]],[13,[852.648148148148,535.9403292181069]],[14,[864.6316872427983,543.3148148148147]],[15,[874.7716049382715,566.491769547325]],[16,[858.4423868312756,599.2818930041151]],[17,[877.4053497942385,607.1831275720164]],[18,[876.3518518518517,620.2201646090534]],[19,[742.2503429355281,620.0445816186556]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,1]],"handle_primary":[[1,[0.0,0.0]],[2,[4.609053497942341,-0.9218106995883772]],[3,[5.530864197530832,-1.8969975807218589]],[4,[1.0534979423869115,-4.345679012345613]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[1.4485596707819468,2.633744855967052]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[1.7119341563786747,1.316872427983526]],[11,[0.658436213991763,2.1698525002639144]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[3.68724279835385,7.90123456790127]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[-1.843621399176982,1.975308641975289]],[19,[-21.66213092273972,1.775584501863932]]],"handle_end":[[1,[-4.609053497942341,0.9218106995883772]],[2,[-5.530864197530832,1.8969975807218589]],[3,[-1.0534979423869115,4.345679012345613]],[4,[-16.987654320987644,28.049382716049426]],[5,[-0.39506172839503506,-3.160493827160508]],[6,[-1.4485596707819468,-2.633744855967052]],[7,[-5.135802469135797,4.609053497942341]],[8,[1.1851851851852189,-2.502057613168745]],[9,[-1.7119341563786747,-1.316872427983526]],[10,[-0.658436213991763,-2.1698525002639144]],[11,[-2.10699588477371,-0.3950617283951487]],[12,[-7.637860082304542,12.641975308641918]],[13,[-3.68724279835385,-7.90123456790127]],[14,[0.0,0.0]],[15,[2.765432098765359,-11.851851851851848]],[16,[-5.1358024691359105,-5.00411522633749]],[17,[1.843621399176982,-1.975308641975289]],[18,[21.421124828532356,-1.7558299039781105]],[19,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[226,{"inputs":[{"Node":{"node_id":229,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.7228903109591287,-0.010680583205747385,0.010680583205747385,0.7228903109591287,0.25213664357755855,0.5632721316369947]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[227,{"inputs":[{"Node":{"node_id":230,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[229,{"inputs":[{"Node":{"node_id":227,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[829.8099807176391,565.8945401302792]},"exposed":false}},{"Value":{"tagged_value":{"F64":-112.21561764131614},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[3.920156284886552,12.362329004080864]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925541,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[230,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.03624142718978522,-0.003682959682299257]],[2,[0.935534758874228,0.06746859421299994]],[3,[1.134036317002156,1.0722882682186752]],[4,[0.2700473236113544,1.0652669412541609]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[232,{"inputs":[{"Node":{"node_id":236,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[15.749262654177755,0.0,0.0,15.749262654177755,826.522342284094,570.6026733733062]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[236,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[842.2716049382717,560.2962962962963]],[2,[837.9320987654322,560.7962962962963]],[3,[832.8950617283951,560.829218106996]],[4,[828.8127572016463,566.4259259259259]],[5,[826.9691358024693,580.1543209876544]],[6,[838.425925925926,581.0432098765433]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[-4.339506172839492,0.5]],[2,[0.0,0.0]],[3,[-2.1728395061728634,1.4814814814815236]],[4,[-3.649513397469832,2.8283728830390373]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,null],[2,[2.1728395061728634,-1.4814814814815236]],[3,[2.633744855967052,-2.0411522633744426]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[238,{"inputs":[{"Node":{"node_id":242,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[29.700274348422568,0.0,0.0,29.700274348422568,812.5713305898489,550.9150457057716]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[242,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[842.2716049382715,561.8070416095107]],[2,[821.8187014174667,518.4112940100595]],[3,[819.0679012345677,520.2695473251028]],[4,[812.5713305898489,549.7821216278006]],[5,[837.913808870599,583.4355281207133]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-1.4046639231823974,2.1801554641060648]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[10.88614540466392,16.621856424325642]],[2,[1.4046639231823974,-2.1801554641060648]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[244,{"inputs":[{"Node":{"node_id":248,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[175.80246913580265,0.0,0.0,175.80246913580265,850.4753086419754,577.8827160493828]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[248,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[1,[866.5679012345681,572.641975308642]],[2,[890.3765432098768,558.3271604938273]],[3,[884.6481481481485,571.7592592592594]],[4,[898.8703703703707,571.5617283950618]],[5,[923.956790123457,545.6851851851852]],[6,[944.141561350963,527.7098765432099]],[7,[986.8703703703704,552.6481481481483]],[8,[1025.882716049383,576.7015952852717]],[9,[1026.277777777778,628.0555555555557]],[10,[999.8086419753088,626.6728395061729]],[11,[991.9074074074076,607.667262767384]],[12,[965.0432098765434,605.3395061728396]],[13,[955.9567901234568,612.4506172839507]],[14,[944.3024691358024,613.8333333333334]],[15,[935.0185185185186,608.3024691358025]],[16,[922.574074074074,606.9197530864199]],[17,[915.067901234568,618.7716049382716]],[18,[884.845679012346,621.141975308642]],[19,[867.9970278920896,620.4835390946502]],[20,[850.4753086419754,600.0720164609053]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.5925925925926094]],[6,[0.0,0.0]],[7,[22.254029366644772,13.337995427526266]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-2.96296296296282,-1.1851851851851052]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[0.0,0.0]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[-11.881115683584769,-0.11705532693190436]],[20,[0.0,0.0]]],"handle_end":[[1,[-10.271604938271707,4.543209876543187]],[2,[0.5925925925926094,-3.555555555555543]],[3,[-8.69135802469134,0.39506172839503506]],[4,[-7.703703703703809,15.604938271604851]],[5,[0.0,0.0]],[6,[-11.851851851851848,-16.036008230452808]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[2.962962962963047,1.1851851851851052]],[10,[0.3950617283951487,3.117880051334623]],[11,[18.567901234567785,4.543209876543301]],[12,[2.7654320987655865,-2.7624450928566375]],[13,[2.1728395061727497,0.39506172839503506]],[14,[4.740740740740762,0.7901234567901838]],[15,[5.135802469136024,0.9876543209877582]],[16,[2.3703703703704377,-1.7777777777778283]],[17,[20.5432098765433,0.1975308641974607]],[18,[11.881115683584769,0.11705532693190436]],[19,[0.0,0.0]],[20,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[250,{"inputs":[{"Node":{"node_id":254,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.22322798,"green":0.057805434,"blue":0.033104762,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.22322798,"green":0.057805434,"blue":0.033104762,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-0.8881961867854216,16.157479969490282,-16.157479969490282,-0.8881961867854216,967.3141221127114,608.5400508947073]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[254,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[887.506172839506,620.2933732713938]],[2,[999.8086419753088,626.6728395061729]],[3,[1012.648148148148,620.7933732713938]],[4,[1004.3518518518516,600.7306004720272]],[5,[910.5246913580244,598.202467627757]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[-43.25925925925878,-1.3827160493827932]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[256,{"inputs":[{"Node":{"node_id":259,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.7781409928102734,-0.004518262619851443,0.004518262619851443,0.7781409928102734,0.17359525448726693,0.4408945819451189]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[257,{"inputs":[{"Node":{"node_id":260,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[259,{"inputs":[{"Node":{"node_id":257,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[894.1788584769913,562.0196920444174]},"exposed":false}},{"Value":{"tagged_value":{"F64":-133.24181654222085},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[15.813534861768243,49.86845076365074]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925463,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[260,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[-0.06772020100134477,-0.27125764892979654]],[2,[0.8103689541744266,-0.2611110184526325]],[3,[1.1461889241405476,1.0977967891967286]],[4,[0.4707515606101555,1.0016674771193048]],[5,[0.05417500861004592,0.8211321210533473]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-2.220446049250313e-16,-2.220446049250313e-16]],[4,[-0.4165765520001096,-0.1805353560659575]],[5,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.2875939062231115,0.06333186265853907]],[4,null],[5,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[262,{"inputs":[{"Node":{"node_id":266,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[53.49424111817291,0.0,0.0,53.49424111817291,877.5736601163951,552.0307817039356]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[266,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[890.376543209877,558.3271604938273]],[2,[903.0185185185188,539.9074074074074]],[3,[907.9074074074074,539.3148148148149]],[4,[906.574074074074,531.3148148148149]],[5,[916.9444444444443,525.3888888888889]],[6,[931.067901234568,549.8333333333334]],[7,[902.8209876543212,578.672839506173]],[8,[877.5736601163951,577.8827160493829]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.05385802469163536,0.0]],[5,[12.296296296296418,0.14814814814803867]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"handle_end":[[1,[-16.592592592592723,23.703703703703923]],[2,[0.0,0.0]],[3,[0.2962962962964184,4.888888888889028]],[4,[-3.0120068298679143,-0.036289238914037014]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[268,{"inputs":[{"Node":{"node_id":272,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[55.17384185481933,0.0,0.0,55.17384185481933,872.6913580246915,537.3566890964463]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[272,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[872.6913580246915,564.7407407407408]],[2,[885.701646090535,534.2283950617283]],[3,[896.2037037037037,507.6111111111111]],[4,[919.7592592592592,507.7592592592593]],[5,[927.7592592592592,537.8333333333333]],[6,[873.7839506172841,571.9567901234568]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[8.404909667028619,-14.163252363220296]],[2,[2.6337448559671657,-9.349794238682987]],[3,[5.629629629629449,-5.185185185185162]],[4,[9.641681333516315,12.166883587532825]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,null],[2,[-6.29752559155645,5.8003525185389435]],[3,[-6.222222222222285,-7.851851851851904]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[274,{"inputs":[{"Node":{"node_id":275,"output_index":0}},{"Node":{"node_id":1453710883947581217,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[275,{"inputs":[{"Node":{"node_id":11427960919145580782,"output_index":0}},{"Node":{"node_id":16360261423333265502,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[277,{"inputs":[{"Node":{"node_id":281,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.83076996,"green":0.4910209,"blue":0.06301004,"alpha":1.0,"linear":true},{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.83076996,"green":0.4910209,"blue":0.06301004,"alpha":1.0,"linear":true},{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-78.0453977819351,448.78024244222814,-448.78024244222814,-78.0453977819351,1028.8189601428448,127.72470794395991]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[281,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[1026.168038408779,250.70576131687224]],[2,[998.8209876543212,150.42592592592595]],[3,[972.746913580247,118.22839506172843]],[4,[929.6851851851852,121.58641975308646]],[5,[923.3641975308644,158.72222222222226]],[6,[923.4629629629628,289.38888888888886]],[7,[926.7222222222222,528.7962962962963]],[8,[1026.2777777777776,592.5]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]],"handle_primary":[[1,[-10.22770919067159,-29.761316872427727]],[2,[-4.543209876543415,-11.06172839506172]],[3,[-17.77777777777783,-3.753086419753074]],[4,[-5.135802469135797,10.864197530864176]],[5,[0.0,11.061728395061747]],[6,[0.2962962962964184,19.259259259259295]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"handle_end":[[1,[4.543209876543187,11.06172839506172]],[2,[17.77777777777783,3.753086419753089]],[3,[5.135802469135797,-10.864197530864176]],[4,[0.0,-11.061728395061747]],[5,[-0.2962962962964184,-19.259259259259295]],[6,[-2.370370370370324,-53.03703703703695]],[7,[0.0,0.0]],[8,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[283,{"inputs":[{"Node":{"node_id":287,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[56.58641975308615,0.0,0.0,56.58641975308615,898.2777777777778,341.15948801789966]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[287,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[954.864197530864,116.14814814814812]],[2,[934.9526748971192,114.67283950617282]],[3,[913.619341563786,134.1625514403292]],[4,[910.06378600823,174.98559670781898]],[5,[904.5,283.46296296296293]],[6,[898.2777777777778,520.5]],[7,[944.7962962962962,568.2037037037037]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-9.481481481481635,1.8436213991769392]],[3,[-2.2386831275719032,10.008230452674894]],[4,[-0.7901234567891606,29.102880658436305]],[5,[-3.5555555555556566,34.37037037037038]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[1,[9.481481481481635,-1.8436213991769392]],[2,[2.677546335770103,-11.970207148147836]],[3,[0.370701337431683,-13.654165928739786]],[4,[3.5555555555554292,-34.37037037037038]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[290,{"inputs":[{"Node":{"node_id":291,"output_index":0}},{"Node":{"node_id":300,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[291,{"inputs":[{"Node":{"node_id":292,"output_index":0}},{"Node":{"node_id":306,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[292,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":312,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[300,{"inputs":[{"Node":{"node_id":304,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[99.06627546613834,0.0,0.0,99.06627546613834,645.3333333333333,601.349243326633]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[304,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[645.3333333333333,614.013717421125]],[2,[658.574074074074,609.6851851851851]],[3,[680.2695473251027,600.730452674897]],[4,[699.4958847736627,594.497256515775]],[5,[744.3996087994716,586.9732002235431]],[6,[717.5809327846364,593.2681755829904]],[7,[702.5246913580245,600.8931773149878]],[8,[708.7139917695473,601.783950617284]],[9,[713.2108672458469,610.5533455265964]],[10,[712.0500685871053,614.4420508944315]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,[0.0,0.0]],[2,[4.740740740740762,-4.148148148148152]],[3,[7.374485596707928,-0.92181069958815]],[4,[4.444444444444002,-5.662551440328798]],[5,[0.0,0.0]],[6,[-10.886145404663694,2.8971193415636662]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-58.35223289132739,3.851425709744945]]],"handle_end":[[1,[-4.740740740740762,4.148148148148152]],[2,[-6.174173455107166,0.7717716818881399]],[3,[-1.6866098186769705,2.1488658430550913]],[4,[-5.794238683127446,-2.0192043895747247]],[5,[10.516302710276136,-2.79869346321857]],[6,[0.0,0.0]],[7,[-2.89711934156378,-1.975308641975289]],[8,[-2.5361987501905787,-3.706752019509281]],[9,[-0.08779149519853036,-2.2109123484780184]],[10,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[306,{"inputs":[{"Node":{"node_id":310,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[81.66803840877935,0.0,0.0,81.66803840877935,698.0912208504803,600.730600472027]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[310,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[744.3996087994717,586.9732002235432]],[2,[734.9571457603006,587.5194584158918]],[3,[698.0912208504803,600.3792866941013]],[4,[706.1680384087791,607.8415637860082]],[5,[710.9477975918305,613.6358024691357]],[6,[729.3449931412895,610.3875171467763]],[7,[779.7592592592597,612.6204267490609]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[2.1947873799731497,4.691071467853249]],[5,[7.452522481329197,2.721536351166037]],[6,[15.119646395366544,2.853223593964344]],[7,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[6.496570644718986,-11.149519890260422]],[3,[-2.494608558449272,-5.331900091455282]],[4,null],[5,null],[6,[0.0,0.0]],[7,[9.28638926992835,13.56378600823075]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[312,{"inputs":[{"Node":{"node_id":316,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[54.46552409086371,0.0,0.0,54.46552409086371,740.3456790123458,598.202467627757]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[316,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[740.3456790123458,588.2030178326476]],[2,[755.3312757201647,586.2448559670783]],[3,[794.0473251028808,582.3820301783265]],[4,[789.2187928669412,601.4967933823075]],[5,[767.1831275720166,614.1625514403293]],[6,[751.1172839506169,611.1776406035664]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[9.481481481481524,0.4824094931645959]],[3,[0.0,0.0]],[4,[-8.427983539094612,8.539557783673331]],[5,[-11.149519890260535,0.2794994541025062]],[6,[0.0,0.0]]],"handle_end":[[1,[-9.481481481481524,-0.4824094931645959]],[2,[-9.305898491083669,-1.1412894375856697]],[3,[8.427983539094612,-8.539557783673331]],[4,[11.149519890260535,-0.2794994541025062]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[318,{"inputs":[{"Node":{"node_id":319,"output_index":0}},{"Node":{"node_id":323,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[319,{"inputs":[{"Node":{"node_id":290,"output_index":0}},{"Node":{"node_id":329,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[321,{"inputs":[{"Node":{"node_id":325,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.8387991,"green":0.47353154,"blue":0.06662595,"alpha":1.0,"linear":true},{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.8387991,"green":0.47353154,"blue":0.06662595,"alpha":1.0,"linear":true},{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-71.11111111111109,410.66666666666663,-410.66666666666663,-71.11111111111109,698.2777777777778,196.05555555555557]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[323,{"inputs":[{"Node":{"node_id":321,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[325,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9],"remove":[],"delta":[[1,[744.0,592.0]],[2,[733.1666666666666,489.16666666666663]],[3,[708.5,335.16666666666663]],[4,[695.8333333333333,239.16666666666663]],[5,[660.5,187.83333333333331]],[6,[619.8333333333333,207.83333333333331]],[7,[619.8333333333333,577.1666666666666]],[8,[631.8333333333333,608.5]],[9,[677.1666666666666,609.1666666666666]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-4.666666666666629,-50.666666666666686]],[3,[-6.6666666666667425,-57.333333333333314]],[4,[-3.3333333333332575,-21.33333333333331]],[5,[-36.0,-6.666666666666686]],[6,[0.0,16.666666666666686]],[7,[0.0,12.666666666666742]],[8,[12.666666666666742,4.666666666666629]],[9,[18.66666666666663,-5.3333333333332575]]],"handle_end":[[1,[4.666666666666629,50.66666666666663]],[2,[6.6666666666667425,57.333333333333314]],[3,[3.3333333333332575,21.33333333333331]],[4,[36.0,6.666666666666657]],[5,[0.0,-16.666666666666686]],[6,[0.0,-12.666666666666742]],[7,[-12.666666666666742,-4.666666666666629]],[8,[-18.66666666666663,5.3333333333332575]],[9,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":9}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[327,{"inputs":[{"Node":{"node_id":331,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[304.21114779625265,0.0,0.0,304.21114779625265,446.6563786008233,402.4609146286176]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[329,{"inputs":[{"Node":{"node_id":327,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[331,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[659.4434537418081,187.67146776406028]],[2,[622.9855967078189,184.4670781893004]],[3,[588.0884773662551,227.52880658436212]],[4,[563.1666666666666,433.38888888888886]],[5,[540.9444444444443,605.8710283878144]],[6,[523.3861454046643,611.9385002286241]],[7,[486.7770919067218,613.3724279835391]],[8,[446.6563786008233,618.9032921810701]],[9,[661.5370370370372,619.7592592592594]],[10,[750.8539094650207,617.9375857338821]],[11,[675.4629629629632,591.0185185185186]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,1]],"handle_primary":[[1,[-3.9798811156837246,-1.1315348270080108]],[2,[-6.716049382716051,0.9218106995884908]],[3,[-3.950617283950692,42.13991769547326]],[4,[-10.222222222222172,79.55555555555549]],[5,[0.0,0.0]],[6,[0.0,0.0]],[7,[-3.511659807956221,0.819387288523103]],[8,[0.0,0.0]],[9,[43.09465020576113,-0.9876543209876444]],[10,[1.1851851851849915,-37.53086419753106]],[11,[0.0,0.0]]],"handle_end":[[1,[6.716049382716051,-0.9218106995884624]],[2,[3.950617283950692,-42.13991769547323]],[3,[10.222222222222172,-79.55555555555549]],[4,[0.0,0.0]],[5,[5.5601280292639785,-9.422953818016254]],[6,[5.110425979711636,-1.1924327285993286]],[7,[1.5363511659809888,-3.599451303154865]],[8,[-14.51772944216873,0.33272107201298695]],[9,[-22.386831275720624,5.3991769547326385]],[10,[0.0,0.0]],[11,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[393,{"inputs":[{"Node":{"node_id":394,"output_index":0}},{"Node":{"node_id":398,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[394,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":404,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[396,{"inputs":[{"Node":{"node_id":400,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true},{"red":0.80695236,"green":0.42869055,"blue":0.05951124,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.47353154,"green":0.06662595,"blue":0.02415763,"alpha":1.0,"linear":true},{"red":0.80695236,"green":0.42869055,"blue":0.05951124,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[49.53072008266122,-286.1470598605872,286.1470598605872,49.53072008266122,383.56460319901373,558.8232326636307]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[398,{"inputs":[{"Node":{"node_id":396,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[400,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[531.0946502057612,568.230452674897]],[2,[513.0925925925925,455.6111111111111]],[3,[499.1666666666666,380.94444444444446]],[4,[487.3148148148147,333.24074074074076]],[5,[482.47530864197535,316.35185185185185]],[6,[457.9814814814815,279.4135802469136]],[7,[411.7592592592593,261.83333333333337]],[8,[381.7345679012346,268.5493827160494]],[9,[378.57407407407413,324.0555555555556]],[10,[378.8703703703703,472.7962962962963]],[11,[378.8703703703703,545.3888888888889]],[12,[399.3148148148148,564.0555555555555]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-6.51851851851859,-35.55555555555554]],[3,[-1.7777777777777717,-12.444444444444455]],[4,[0.0,0.0]],[5,[-2.1728395061728065,-7.703703703703695]],[6,[-20.345679012345727,-8.691358024691397]],[7,[-5.925925925925924,-0.9876543209876444]],[8,[-6.716049382716051,13.62962962962962]],[9,[0.1975308641974607,16.395061728395035]],[10,[-0.8888888888888573,38.81481481481478]],[11,[0.0,6.518518518518476]],[12,[22.22222222222223,-1.1851851851852189]]],"handle_end":[[1,[6.51851851851859,35.55555555555554]],[2,[1.7777777777777717,12.444444444444455]],[3,[8.888888888888971,23.407407407407447]],[4,[2.1728395061728065,7.703703703703695]],[5,[20.345679012345784,8.691358024691397]],[6,[5.925925925925924,0.9876543209876444]],[7,[6.716049382716051,-13.62962962962962]],[8,[-0.1975308641974607,-16.395061728395035]],[9,[0.8888888888888573,-38.81481481481478]],[10,[0.0,-6.518518518518476]],[11,[-22.22222222222223,1.1851851851852189]],[12,[-37.99794238683137,-21.306584362139915]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[402,{"inputs":[{"Node":{"node_id":406,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[96.4444444444444,0.0,0.0,96.4444444444444,332.5,420.64658044287665]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[404,{"inputs":[{"Node":{"node_id":402,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[406,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[401.70713305898494,260.36282578875165]],[2,[380.6371742112481,265.1035665294926]],[3,[369.7510288065844,308.3847736625514]],[4,[353.38888888888886,444.5]],[5,[332.5,581.8333333333333]],[6,[428.9444444444444,568.9444444444443]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[-10.359396433470463,-3.160493827160451]],[2,[-10.643715697978225,7.851921416541302]],[3,[-1.3105663299890011,14.89279920442118]],[4,[-5.333333333333314,40.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,null],[2,[0.9657064471879266,-10.97393689986285]],[3,[5.333333333333314,-40.0]],[4,[4.0,-30.666666666666742]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[408,{"inputs":[{"Node":{"node_id":409,"output_index":0}},{"Node":{"node_id":411,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[409,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":442,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[411,{"inputs":[{"Node":{"node_id":412,"output_index":0}},{"Node":{"node_id":415,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[412,{"inputs":[{"Node":{"node_id":413,"output_index":0}},{"Node":{"node_id":421,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[413,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":436,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[415,{"inputs":[{"Node":{"node_id":418,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":0.80859375,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":0.0,"linear":true}],"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":0.80859375,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":0.0,"linear":true}],"position":[0.0,0.5,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.4164402886534021,1.1102230246251563e-16,0.0,0.886331167266568,0.30473369160482133,-0.27613184386946]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[418,{"inputs":[{"Node":{"node_id":419,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[83.16666666666677,614.179527199694]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[294.3945373546583,138.32047280030588]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[419,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[421,{"inputs":[{"Node":{"node_id":422,"output_index":0}},{"Node":{"node_id":424,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[422,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":430,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[424,{"inputs":[{"Node":{"node_id":427,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.48093295,"green":0.119827025,"blue":0.036873188,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.1499598,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.68668544,"green":0.1980693,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.07456140350877193,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.48093295,"green":0.119827025,"blue":0.036873188,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.1499598,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.68668544,"green":0.1980693,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.07456140350877193,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.0,1.4339622641509435,-1.4339622641509435,0.0,0.48367901287206416,-0.4339622641509434]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[427,{"inputs":[{"Node":{"node_id":428,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[583.9293351067386,697.6163522012579]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[428,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.17362079214327678,-0.41509433962264153]],[2,[0.8076864692090735,-0.4339622641509434]],[3,[0.7349403737393546,1.0000000000000002]],[4,[0.1596715565350542,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[430,{"inputs":[{"Node":{"node_id":433,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.4751555,"green":0.11386405,"blue":0.03377812,"alpha":1.0,"linear":true},{"red":0.48514998,"green":0.14702728,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.5972019,"green":0.20863685,"blue":0.04231141,"alpha":1.0,"linear":true}],"position":[0.0,0.09210526315789476,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.4751555,"green":0.11386405,"blue":0.03377812,"alpha":1.0,"linear":true},{"red":0.48514998,"green":0.14702728,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.5972019,"green":0.20863685,"blue":0.04231141,"alpha":1.0,"linear":true}],"position":[0.0,0.09210526315789476,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.0,1.4339622641509435,-1.4339622641509435,0.0,0.7253033882459253,-0.4339622641509434]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[433,{"inputs":[{"Node":{"node_id":434,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[628.6154039265571,697.6163522012579]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[434,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5926327057682128,-0.43396226415094336]],[2,[0.8076864692090735,-0.4339622641509434]],[3,[1.0069833844920426,0.9999999999999988]],[4,[0.4436233919998075,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[436,{"inputs":[{"Node":{"node_id":439,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.5209957,"green":0.11697067,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.1499598,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.68668544,"green":0.1980693,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.08176100628930963,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.5209957,"green":0.11697067,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.1499598,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.68668544,"green":0.1980693,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,0.08176100628930963,1.0],"midpoint":[0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.0,1.0,-1.0,0.0,0.5177419354838715,0.0]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[439,{"inputs":[{"Node":{"node_id":440,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[344.5177419354837,697.8333333333333]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[440,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.035483870967742,1.0]],[4,[0.0387096774193552,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[442,{"inputs":[{"Node":{"node_id":445,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.22322798,"green":0.057805434,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.30498737,"green":0.07618539,"blue":0.034339808,"alpha":1.0,"linear":true},{"red":0.41788515,"green":0.090841725,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.5534663,"green":0.19362296,"blue":0.039487094,"alpha":1.0,"linear":true}],"position":[0.0,0.14354235440709684,0.5,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.22322798,"green":0.057805434,"blue":0.033104762,"alpha":1.0,"linear":true},{"red":0.30498737,"green":0.07618539,"blue":0.034339808,"alpha":1.0,"linear":true},{"red":0.41788515,"green":0.090841725,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.5534663,"green":0.19362296,"blue":0.039487094,"alpha":1.0,"linear":true}],"position":[0.0,0.14354235440709684,0.5,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-0.0014164305949008194,1.002296541178966,-1.002296541178966,-0.0014164305949008194,0.5063739376770537,0.01352247091271197]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[445,{"inputs":[{"Node":{"node_id":446,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[83.1666666666668,614.1795271996941]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[941.3333333333331,154.32047280030588]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[446,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[448,{"inputs":[{"Node":{"node_id":449,"output_index":0}},{"Node":{"node_id":455,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[449,{"inputs":[{"Node":{"node_id":450,"output_index":0}},{"Node":{"node_id":6015109908395573189,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[450,{"inputs":[{"Node":{"node_id":451,"output_index":0}},{"Node":{"node_id":467,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[451,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":471,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[455,{"inputs":[{"Node":{"node_id":457,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[457,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[-4.833333333333332,345.83333333333326]],[2,[80.05555555555559,484.94444444444446]],[3,[129.38888888888889,628.0555555555557]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[32.038317168599576,69.73045501401077]]],"handle_end":[[1,[-45.33333333333338,-98.66666666666669]],[2,[0.0,0.0]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[459,{"inputs":[{"Node":{"node_id":463,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[134.22222222222223,0.0,0.0,134.22222222222223,-4.833333333333348,486.94444444444446]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[463,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-4.833333333333348,600.0555555555555]],[2,[-4.833333333333332,345.83333333333326]],[3,[80.05555555555559,484.94444444444446]],[4,[129.38888888888889,628.0555555555557]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[32.038317168599576,69.73045501401077]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[-45.33333333333338,-98.66666666666669]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[465,{"inputs":[{"Node":{"node_id":469,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.74540436,"green":0.36130688,"blue":0.048171822,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.74540436,"green":0.36130688,"blue":0.048171822,"alpha":1.0,"linear":true},{"red":0.6514057,"green":0.111932434,"blue":0.035601314,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-39.224288802976176,223.5773806604142,-223.5773806604142,-39.224288802976176,118.2360641327914,146.75000000000003]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[467,{"inputs":[{"Node":{"node_id":465,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Round"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[469,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13],"remove":[],"delta":[[1,[137.75,641.0]],[2,[-7.000000000000025,626.675562328647]],[3,[-7.030559365950182,200.5]],[4,[50.72222222222222,278.78532235939633]],[5,[81.68518518518522,338.8703703703703]],[6,[110.91975308641976,406.62345679012344]],[7,[129.38888888888886,443.61235349483104]],[8,[82.0,29.5]],[9,[111.83431058292848,134.6107990062408]],[10,[137.68518518518513,236.64814814814815]],[11,[177.83333333333343,384.49999999999994]],[12,[199.1666666666667,473.1666666666667]],[13,[223.25,608.7633744855967]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[31.078939476013172,37.97283968100555]],[4,[7.654320987654309,14.850480109739408]],[5,[6.73334689148848,12.881185357630102]],[6,[8.537957281505157,20.688127259031944]],[7,[-20.788075479416264,-70.61235349483104]],[8,[0.0,0.0]],[9,[5.9990227504048335,27.666978771536947]],[10,[12.334360893667936,45.715346431469186]],[11,[6.410520201070284,29.915760938327992]],[12,[11.42335240155694,63.4630688975397]],[13,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[-14.856706650648782,-28.82414089604376]],[4,[-9.08641975308646,-17.382716049382736]],[5,[-10.271604938271594,-24.88888888888897]],[6,[0.0,0.0]],[7,[14.499999999999943,172.0]],[8,[-13.354098963944438,-61.58795989288773]],[9,[-13.510174692931455,-48.54050114169854]],[10,[-12.0,-55.99999999999994]],[11,[-5.999999999999915,-33.33333333333343]],[12,[0.0,0.0]],[13,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":13}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[471,{"inputs":[{"Node":{"node_id":475,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[149.67286608061644,0.0,0.0,149.67286608061644,22.827133919383556,278.6463191586647]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[475,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[22.827133919383556,312.5]],[2,[46.49999999999994,177.5]],[3,[81.20964791952444,29.23708276177412]],[4,[85.15294924554185,45.49314128943759]],[5,[172.5,512.0555555555555]],[6,[102.27777777777776,528.0555555555553]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[15.777777777777828,-79.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[-14.820678206547353,74.20776200602205]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[477,{"inputs":[{"Node":{"node_id":478,"output_index":0}},{"Node":{"node_id":6272196533192700024,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[478,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":7135480377162524224,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[481,{"inputs":[{"Node":{"node_id":485,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.78353786,"green":0.40724027,"blue":0.06480328,"alpha":1.0,"linear":true},{"red":0.49693304,"green":0.11697067,"blue":0.033104762,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.78353786,"green":0.40724027,"blue":0.06480328,"alpha":1.0,"linear":true},{"red":0.49693304,"green":0.11697067,"blue":0.033104762,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.0,211.8086099761528,-211.8086099761528,0.0,892.4321840439206,337.850704492352]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[485,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[901.7869989330896,337.4632677945435]],[2,[881.6925011431184,340.0384849870446]],[3,[873.1913580246915,359.61111111111114]],[4,[873.611111111111,465.6111111111111]],[5,[874.2777777777776,540.5]],[6,[879.873428946497,552.0307817039356]],[7,[907.1666666666664,501.16666666666663]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-5.885745135394927,5.678500588373993]],[3,[0.09876543209873034,9.87654320987656]],[4,[-0.22222222222228535,37.77777777777777]],[5,[1.086419753086716,4.000000000000114]],[6,[4.0,1.7777777777777146]],[7,[2.888888888889028,-35.111111111111086]]],"handle_end":[[1,[5.5406188081085475,-5.34552659655543]],[2,[-0.09876543209873034,-9.87654320987656]],[3,[0.22222222222228535,-37.77777777777777]],[4,[-0.9901901223357754,-3.645699995871837]],[5,[-4.0,-1.7777777777777146]],[6,[-2.8888888888888005,35.111111111111086]],[7,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[487,{"inputs":[{"Node":{"node_id":491,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.26819557,"green":0.076641515,"blue":0.047158927,"alpha":1.0,"linear":true},{"red":0.14009783,"green":0.05885609,"blue":0.04175822,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.26819557,"green":0.076641515,"blue":0.047158927,"alpha":1.0,"linear":true},{"red":0.14009783,"green":0.05885609,"blue":0.04175822,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.0,217.67585483414956,-217.67585483414956,0.0,888.5000000000001,336.1666666666667]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[491,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[903.3333333333331,336.44444444444446]],[2,[867.3888888888889,344.05555555555554]],[3,[858.2777777777777,377.8333333333333]],[4,[851.3888888888889,542.2777777777777]],[5,[876.9444444444443,582.1008216600221]],[6,[908.5000000000005,581.0432098765432]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-9.555555555555657,12.444444444444455]],[3,[-0.4444444444444571,14.444444444444455]],[4,[-2.888888888888914,28.66666666666663]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[9.555555555555657,-12.444444444444455]],[2,[0.4444444444444571,-14.444444444444455]],[3,[2.888888888888914,-28.66666666666663]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.16666666666685614,-0.2777777777777146]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[493,{"inputs":[{"Node":{"node_id":496,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.022358121,"green":0.21412316,"blue":0.23637938,"alpha":1.0,"linear":true},{"red":0.051269464,"green":0.2581829,"blue":0.23074007,"alpha":1.0,"linear":true},{"red":0.1980693,"green":0.27049786,"blue":0.13286833,"alpha":1.0,"linear":true},{"red":0.49693304,"green":0.20863685,"blue":0.043735027,"alpha":1.0,"linear":true}],"position":[0.0,0.33108336235841895,0.6158954287284122,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.022358121,"green":0.21412316,"blue":0.23637938,"alpha":1.0,"linear":true},{"red":0.051269464,"green":0.2581829,"blue":0.23074007,"alpha":1.0,"linear":true},{"red":0.1980693,"green":0.27049786,"blue":0.13286833,"alpha":1.0,"linear":true},{"red":0.49693304,"green":0.20863685,"blue":0.043735027,"alpha":1.0,"linear":true}],"position":[0.0,0.33108336235841895,0.6158954287284122,1.0],"midpoint":[0.5,0.5,0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.0,0.911795540119222,-0.911795540119222,0.0,0.5224609375,-0.000170829498767594]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[496,{"inputs":[{"Node":{"node_id":1866101479320869962,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[512.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,600.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[36935169817407978,{"inputs":[{"Node":{"node_id":15848750910363784662,"output_index":0}},{"Node":{"node_id":11279424538712841875,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[97478832511923699,{"inputs":[{"Node":{"node_id":2999157202967297847,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[486.78967826851385,539.8989473007496]},"exposed":false}},{"Value":{"tagged_value":{"F64":-8.547050926324854},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[24.603566707484493,77.5880766500041]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925423,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[600590258445096812,{"inputs":[{"Node":{"node_id":9778003574990260202,"output_index":0}},{"Node":{"node_id":12435496696188763850,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[989999757220954936,{"inputs":[{"Node":{"node_id":10544930474333783117,"output_index":0}},{"Node":{"node_id":5105625446268484763,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1453710883947581217,{"inputs":[{"Node":{"node_id":277,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1598976462838094167,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[1,[506.7057613168725,531.9348803536052]],[2,[497.8388203017833,534.5393613778391]],[3,[488.5329218106997,551.6587029416252]],[4,[500.77983539094663,544.0208428593207]],[5,[500.4506172839507,547.5105547934772]],[6,[490.17901234567904,556.0043819539711]],[7,[495.90740740740733,567.882982777016]],[8,[502.6234567901235,563.1154930650816]],[9,[510.261316872428,573.2078189300412]],[10,[496.50000000000006,582.6234567901236]],[11,[504.00617283950623,588.9444444444446]],[12,[513.3888888888889,585.5544307531777]],[13,[516.8017832647463,593.4437585733884]],[14,[496.49999999999994,603.4117893613783]],[15,[496.30246913580254,612.3006782502672]],[16,[478.9197530864198,618.6875095259874]],[17,[448.3683127572017,617.6340115836006]],[18,[438.2283950617284,585.5544307531777]],[19,[468.05555555555594,550.6710486206383]],[20,[480.89506172839504,532.4323654930657]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-7.188100137174104,2.6138545953361927]],[3,[4.565157750342848,-4.301783264746064]],[4,null],[5,[-6.737997256515712,3.1824417009599983]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[0.0,0.0]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[0.0,0.0]],[20,[7.46503467504715,-4.02781143068205]]],"handle_end":[[1,[3.4386245260820374,-1.250408918575317]],[2,[0.27087722942241044,-5.120145445603839]],[3,null],[4,null],[5,[0.0,0.0]],[6,[-2.508333333333439,-2.0902777777778283]],[7,[-3.6872427983540206,1.4485596707820605]],[8,[-1.7777777777777717,-5.728395061728406]],[9,[6.716049382716108,-8.49382716049422]],[10,[-2.765432098765416,-3.555555555555543]],[11,[-3.851851851851848,0.7581344568814075]],[12,[-0.39506172839503506,-1.975308641975289]],[13,[0.0,0.0]],[14,[-0.7901234567900701,-4.938271604938336]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[-3.394604481024089,3.2873037646699004]],[20,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1635416892097245588,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":11472292186872186521,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1644624352314732667,{"inputs":[{"Node":{"node_id":3930114406985796561,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[337.1982047610469,692.7466487935636]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[50.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1866101479320869962,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"BoxCorners":[]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"vector_nodes::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2489761779922717592,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[156.18106995884773,623.2098765432096]],[2,[161.81687242798355,618.7716049382714]],[3,[205.93209876543213,600.5987654320988]],[4,[282.37654320987656,585.9814814814815]],[5,[338.4753086419753,574.1296296296297]],[6,[468.0555555555556,551.0185185185187]],[7,[455.2160493827161,586.8374485596709]],[8,[481.88271604938296,600.2037037037037]],[9,[447.46059205066985,619.9047655337092]],[10,[288.6975308641976,620.1543209876544]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,[0.0,0.0]],[2,[5.925925925925924,-2.370370370370324]],[3,[21.135802469135797,-7.703703703703695]],[4,[22.71604938271605,-4.9382716049382225]],[5,[0.0,0.0]],[6,[-0.19753086419751753,-0.19753086419757435]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-70.32098765432102,1.975308641975289]]],"handle_end":[[1,[-5.925925925925924,2.370370370370324]],[2,[-21.135802469135797,7.703703703703695]],[3,[-22.71604938271605,4.9382716049382225]],[4,[0.0,0.0]],[5,[-40.09876543209879,-8.09876543209873]],[6,[4.345679012345613,-25.481481481481524]],[7,[-8.691358024691567,-7.308641975308547]],[8,[11.358024691357969,-11.390946502057773]],[9,[70.32098765432102,-1.975308641975289]],[10,[41.77160493827162,-2.8703703703704377]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2999157202967297847,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.09890842105846484,-0.06578040790199424]],[2,[0.8379395417513005,-0.05940639119491883]],[3,[1.0362898771040632,0.9994054840058096]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3707802522175443254,{"inputs":[{"Node":{"node_id":10278740841813346388,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[81.66803840877935,0.0,0.0,81.66803840877935,698.0912208504803,600.730600472027]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3719764965605527929,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[0.024789182815927936,-0.19742232174172225]],[2,[0.5284291926980893,-0.05749241759918103]],[3,[0.9294778693529006,0.07804966382593222]],[4,[1.0925954941660798,1.0006513038165834]],[5,[0.5092009949861728,0.9569233045341342]],[6,[-0.007635827307500006,0.8135210708932508]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.21441988872806772,0.05895880273641681]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-0.28124758738050376,-0.047835328360902984]],[6,[0.0,0.0]]],"handle_end":[[1,[-0.16942059711236046,-0.046585396643413435]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.26857587477611267,0.04568009019878494]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3885641499621884510,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":600590258445096812,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3930114406985796561,{"inputs":[{"Node":{"node_id":4454263454059119441,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4454263454059119441,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4633399390154487467,{"inputs":[{"Node":{"node_id":11155094820673141470,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4913361824430066698,{"inputs":[{"Node":{"node_id":11807598261442997948,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[60.115226337448235,0.0,0.0,60.115226337448235,481.882716049383,573.0717312226245]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5105625446268484763,{"inputs":[{"Node":{"node_id":9422094883894860610,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[60.115226337448235,0.0,0.0,60.115226337448235,481.882716049383,573.0717312226245]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5175066652268973319,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.09890842105846484,-0.06578040790199424]],[2,[0.8379395417513005,-0.05940639119491883]],[3,[1.0362898771040632,0.9994054840058096]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5364427239360309137,{"inputs":[{"Node":{"node_id":12325841371509826180,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5382879283978921947,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[740.3456790123458,588.2030178326476]],[2,[755.3312757201647,586.2448559670783]],[3,[794.0473251028808,582.3820301783265]],[4,[789.2187928669412,601.4967933823075]],[5,[767.1831275720166,614.1625514403293]],[6,[751.1172839506169,611.1776406035664]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[9.481481481481524,0.4824094931645959]],[3,[0.0,0.0]],[4,[-8.427983539094612,8.539557783673331]],[5,[-11.149519890260535,0.2794994541025062]],[6,[0.0,0.0]]],"handle_end":[[1,[-9.481481481481524,-0.4824094931645959]],[2,[-9.305898491083669,-1.1412894375856697]],[3,[8.427983539094612,-8.539557783673331]],[4,[11.149519890260535,-0.2794994541025062]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[5714505144727602368,{"inputs":[{"Node":{"node_id":18142347460553706128,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[742.4503588311712,593.3522045638366]},"exposed":false}},{"Value":{"tagged_value":{"F64":-54.607358405925375},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[11.868580002725764,37.42791872115287]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925435,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6015109908395573189,{"inputs":[{"Node":{"node_id":459,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-8.0,2.6666666666000083]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6272196533192700024,{"inputs":[{"Node":{"node_id":481,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[28.815503095243457,-49.74366671015599]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.29474475571},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6710503329407068595,{"inputs":[{"Node":{"node_id":16831252454255560063,"output_index":0}},{"Node":{"node_id":10486443711686704000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6873123446543957690,{"inputs":[{"Node":{"node_id":12717405604755313921,"output_index":0}},{"Node":{"node_id":3707802522175443254,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6926019345498826421,{"inputs":[{"Node":{"node_id":989999757220954936,"output_index":0}},{"Node":{"node_id":17020523203516467057,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[6980979116665635870,{"inputs":[{"Node":{"node_id":5175066652268973319,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[486.78967826851385,539.8989473007496]},"exposed":false}},{"Value":{"tagged_value":{"F64":-8.547050926324854},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[24.603566707484493,77.5880766500041]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-7.194955915925423,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7134154821675013808,{"inputs":[{"Node":{"node_id":408,"output_index":0}},{"Node":{"node_id":14205611254835578455,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7135480377162524224,{"inputs":[{"Node":{"node_id":487,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[28.82327697714288,-49.808276940773226]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.29474475571},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[7148230379224894975,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[1,[506.7057613168725,531.9348803536052]],[2,[497.8388203017833,534.5393613778391]],[3,[488.5329218106997,551.6587029416252]],[4,[500.77983539094663,544.0208428593207]],[5,[500.4506172839507,547.5105547934772]],[6,[490.17901234567904,556.0043819539711]],[7,[495.90740740740733,567.882982777016]],[8,[502.6234567901235,563.1154930650816]],[9,[510.261316872428,573.2078189300412]],[10,[496.50000000000006,582.6234567901236]],[11,[504.00617283950623,588.9444444444446]],[12,[513.3888888888889,585.5544307531777]],[13,[516.8017832647463,593.4437585733884]],[14,[496.49999999999994,603.4117893613783]],[15,[496.30246913580254,612.3006782502672]],[16,[478.9197530864198,618.6875095259874]],[17,[448.3683127572017,617.6340115836006]],[18,[438.2283950617284,585.5544307531777]],[19,[468.05555555555594,550.6710486206383]],[20,[480.89506172839504,532.4323654930657]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16],[17,17],[18,18],[19,19],[20,20]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17],[17,18],[18,19],[19,20],[20,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-7.188100137174104,2.6138545953361927]],[3,[4.565157750342848,-4.301783264746064]],[4,null],[5,[-6.737997256515712,3.1824417009599983]],[6,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[14,[0.0,0.0]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[0.0,0.0]],[20,[7.46503467504715,-4.02781143068205]]],"handle_end":[[1,[3.4386245260820374,-1.250408918575317]],[2,[0.27087722942241044,-5.120145445603839]],[3,null],[4,null],[5,[0.0,0.0]],[6,[-2.508333333333439,-2.0902777777778283]],[7,[-3.6872427983540206,1.4485596707820605]],[8,[-1.7777777777777717,-5.728395061728406]],[9,[6.716049382716108,-8.49382716049422]],[10,[-2.765432098765416,-3.555555555555543]],[11,[-3.851851851851848,0.7581344568814075]],[12,[-0.39506172839503506,-1.975308641975289]],[13,[0.0,0.0]],[14,[-0.7901234567900701,-4.938271604938336]],[15,[0.0,0.0]],[16,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[19,[-3.394604481024089,3.2873037646699004]],[20,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],[12,0],[13,0],[14,0],[15,0],[16,0],[17,0],[18,0],[19,0],[20,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[8861964493222160710,{"inputs":[{"Node":{"node_id":16894739051789815098,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":0.0390625,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":0.0390625,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.4003149237651733,0.0,0.0,0.4003149237651733,0.5,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9286544882258200464,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[480.8950617283949,532.7798353909467]],[2,[472.818244170096,545.5973936899862]],[3,[455.2160493827161,586.837448559671]],[4,[464.82921810699577,552.1378600823044]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-5.249967385837806,9.166609721304098]],[3,[0.0,0.0]],[4,[4.236143848022095,-8.765075372687306]]],"handle_end":[[1,[5.530864197530832,-9.657064471879266]],[2,[0.0,0.0]],[3,[-10.501290993452583,21.72839506172852]],[4,[-3.58969669257732,1.843621399176868]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9422094883894860610,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[527.0733882030179,547.0898491083676]],[2,[500.121399176955,531.6385459533608]],[3,[481.882716049383,533.8333333333337]],[4,[495.38065843621376,614.5137174211251]],[5,[541.9979423868313,611.7921810699589]],[6,[530.2777777777774,564.9115226337451]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[5.684341886080804e-14,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[16.644617182340255,-0.4357059391355733]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9570557034533539493,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[740.3456790123458,588.2030178326476]],[2,[755.3312757201647,586.2448559670783]],[3,[794.0473251028808,582.3820301783265]],[4,[789.2187928669412,601.4967933823075]],[5,[767.1831275720166,614.1625514403293]],[6,[751.1172839506169,611.1776406035664]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[9.481481481481524,0.4824094931645959]],[3,[0.0,0.0]],[4,[-8.427983539094612,8.539557783673331]],[5,[-11.149519890260535,0.2794994541025062]],[6,[0.0,0.0]]],"handle_end":[[1,[-9.481481481481524,-0.4824094931645959]],[2,[-9.305898491083669,-1.1412894375856697]],[3,[8.427983539094612,-8.539557783673331]],[4,[11.149519890260535,-0.2794994541025062]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9603838021022368374,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[744.3996087994717,586.9732002235432]],[2,[734.9571457603006,587.5194584158918]],[3,[698.0912208504803,600.3792866941013]],[4,[706.1680384087791,607.8415637860082]],[5,[710.9477975918305,613.6358024691357]],[6,[729.3449931412895,610.3875171467763]],[7,[779.7592592592597,612.6204267490609]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[2.1947873799731497,4.691071467853249]],[5,[7.452522481329197,2.721536351166037]],[6,[15.119646395366544,2.853223593964344]],[7,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[6.496570644718986,-11.149519890260422]],[3,[-2.494608558449272,-5.331900091455282]],[4,null],[5,null],[6,[0.0,0.0]],[7,[9.28638926992835,13.56378600823075]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[9778003574990260202,{"inputs":[{"Node":{"node_id":6926019345498826421,"output_index":0}},{"Node":{"node_id":5364427239360309137,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10278740841813346388,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[744.3996087994717,586.9732002235432]],[2,[734.9571457603006,587.5194584158918]],[3,[698.0912208504803,600.3792866941013]],[4,[706.1680384087791,607.8415637860082]],[5,[710.9477975918305,613.6358024691357]],[6,[729.3449931412895,610.3875171467763]],[7,[779.7592592592597,612.6204267490609]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[2.1947873799731497,4.691071467853249]],[5,[7.452522481329197,2.721536351166037]],[6,[15.119646395366544,2.853223593964344]],[7,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[6.496570644718986,-11.149519890260422]],[3,[-2.494608558449272,-5.331900091455282]],[4,null],[5,null],[6,[0.0,0.0]],[7,[9.28638926992835,13.56378600823075]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10486443711686704000,{"inputs":[{"Node":{"node_id":5714505144727602368,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.8017490634762537,-0.01414534358159647,0.01414534358159647,0.8017490634762537,0.16624251433851747,0.4151795327805333]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[10544930474333783117,{"inputs":[{"Node":{"node_id":17173383864410319040,"output_index":0}},{"Node":{"node_id":4633399390154487467,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11155094820673141470,{"inputs":[{"Node":{"node_id":97478832511923699,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.9551417334224788,-0.015106261802889598,0.015106261802889598,0.9551417334224788,0.00021974161476479015,0.4897044414953709]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11279424538712841875,{"inputs":[{"Node":{"node_id":2489761779922717592,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[325.70395367352455,0.0,0.0,325.70395367352455,156.17876237585838,586.4433196420664]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11345069121502219134,{"inputs":[{"Node":{"node_id":12068777759187203228,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[99.06627546613834,0.0,0.0,99.06627546613834,645.3333333333333,601.349243326633]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11377169273880889832,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":14433811491576609500,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11427960919145580782,{"inputs":[{"Node":{"node_id":6873123446543957690,"output_index":0}},{"Node":{"node_id":11345069121502219134,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11472292186872186521,{"inputs":[{"Node":{"node_id":8861964493222160710,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-1367.319046874664,107.29818643577867]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[4.24444444444444,0.8618453375356869]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11807598261442997948,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[527.0733882030179,547.0898491083676]],[2,[500.121399176955,531.6385459533608]],[3,[481.882716049383,533.8333333333337]],[4,[495.38065843621376,614.5137174211251]],[5,[541.9979423868313,611.7921810699589]],[6,[530.2777777777774,564.9115226337451]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[2,[5.684341886080804e-14,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[16.644617182340255,-0.4357059391355733]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[11891167879168294182,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[112.52194787379976,598.7990397805213]],[2,[104.00617283950618,624.6097393689986]],[3,[148.91152263374485,614.1625514403293]],[4,[126.900438957476,611.0020576131687]],[5,[118.93072702331962,598.7990397805213]],[6,[119.98422496570645,609.4218106995885]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[1,[-2.370370370370395,22.25514403292175]],[2,[0.0,0.0]],[3,null],[4,[-2.058260034882977,-0.6051267923739942]],[5,[0.0,0.0]],[6,[-4.477366255144005,-1.843621399176868]]],"handle_end":[[1,[0.0,0.0]],[2,[-21.11385459533605,1.053497942386798]],[3,null],[4,[0.0,0.0]],[5,[0.7023319615912413,-1.9314128943758533]],[6,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12068777759187203228,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[645.3333333333333,614.013717421125]],[2,[658.574074074074,609.6851851851851]],[3,[680.2695473251027,600.730452674897]],[4,[699.4958847736627,594.497256515775]],[5,[744.3996087994716,586.9732002235431]],[6,[717.5809327846364,593.2681755829904]],[7,[702.5246913580245,600.8931773149878]],[8,[708.7139917695473,601.783950617284]],[9,[713.2108672458469,610.5533455265964]],[10,[712.0500685871053,614.4420508944315]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,[0.0,0.0]],[2,[4.740740740740762,-4.148148148148152]],[3,[7.374485596707928,-0.92181069958815]],[4,[4.444444444444002,-5.662551440328798]],[5,[0.0,0.0]],[6,[-10.886145404663694,2.8971193415636662]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-58.35223289132739,3.851425709744945]]],"handle_end":[[1,[-4.740740740740762,4.148148148148152]],[2,[-6.174173455107166,0.7717716818881399]],[3,[-1.6866098186769705,2.1488658430550913]],[4,[-5.794238683127446,-2.0192043895747247]],[5,[10.516302710276136,-2.79869346321857]],[6,[0.0,0.0]],[7,[-2.89711934156378,-1.975308641975289]],[8,[-2.5361987501905787,-3.706752019509281]],[9,[-0.08779149519853036,-2.2109123484780184]],[10,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12325841371509826180,{"inputs":[{"Node":{"node_id":6980979116665635870,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.9551417334224788,-0.015106261802889598,0.015106261802889598,0.9551417334224788,0.00021974161476479015,0.4897044414953709]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12435496696188763850,{"inputs":[{"Node":{"node_id":9286544882258200464,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[25.697601339011612,0.0,0.0,25.697601339011612,455.1974603893833,559.8086419753088]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12717405604755313921,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":15483449862348058100,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12768614558324028960,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":6710503329407068595,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[12875520257830460085,{"inputs":[{"Node":{"node_id":11891167879168294182,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[44.90534979423869,0.0,0.0,44.90534979423869,104.00617283950616,611.70438957476]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[13606781735926093266,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[1,[645.3333333333333,614.013717421125]],[2,[658.574074074074,609.6851851851851]],[3,[680.2695473251027,600.730452674897]],[4,[699.4958847736627,594.497256515775]],[5,[744.3996087994716,586.9732002235431]],[6,[717.5809327846364,593.2681755829904]],[7,[702.5246913580245,600.8931773149878]],[8,[708.7139917695473,601.783950617284]],[9,[713.2108672458469,610.5533455265964]],[10,[712.0500685871053,614.4420508944315]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]],"end_point":[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10],[10,1]],"handle_primary":[[1,[0.0,0.0]],[2,[4.740740740740762,-4.148148148148152]],[3,[7.374485596707928,-0.92181069958815]],[4,[4.444444444444002,-5.662551440328798]],[5,[0.0,0.0]],[6,[-10.886145404663694,2.8971193415636662]],[7,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-58.35223289132739,3.851425709744945]]],"handle_end":[[1,[-4.740740740740762,4.148148148148152]],[2,[-6.174173455107166,0.7717716818881399]],[3,[-1.6866098186769705,2.1488658430550913]],[4,[-5.794238683127446,-2.0192043895747247]],[5,[10.516302710276136,-2.79869346321857]],[6,[0.0,0.0]],[7,[-2.89711934156378,-1.975308641975289]],[8,[-2.5361987501905787,-3.706752019509281]],[9,[-0.08779149519853036,-2.2109123484780184]],[10,null]],"stroke":[[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14080831508667499826,{"inputs":[{"Node":{"node_id":11377169273880889832,"output_index":0}},{"Node":{"node_id":14113040319560793790,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14113040319560793790,{"inputs":[{"Node":{"node_id":9603838021022368374,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[81.66803840877935,0.0,0.0,81.66803840877935,698.0912208504803,600.730600472027]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14205611254835578455,{"inputs":[{"Node":{"node_id":14579754335592291854,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-1339.7031164295145,65.50112655997924]},"exposed":false}},{"Value":{"tagged_value":{"F64":-2.429481024944041},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[4.244995417859058,0.8619572141015625]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2.80968031327194e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14433811491576609500,{"inputs":[{"Node":{"node_id":9570557034533539493,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[54.46552409086371,0.0,0.0,54.46552409086371,740.3456790123458,598.202467627757]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[14579754335592291854,{"inputs":[{"Node":{"node_id":1644624352314732667,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true},{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":0.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Radial"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[0.4003149237651733,0.0,0.0,0.4003149237651733,0.5,0.5]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15277819403265847073,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":4913361824430066698,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15483449862348058100,{"inputs":[{"Node":{"node_id":5382879283978921947,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.21952623,"green":0.057805434,"blue":0.034339808,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[54.46552409086371,0.0,0.0,54.46552409086371,740.3456790123458,598.202467627757]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15552693212536925398,{"inputs":[{"Node":{"node_id":1598976462838094167,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.08794502,"green":0.031974703,"blue":0.02463841,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.08794502,"green":0.031974703,"blue":0.02463841,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-3.736881038589957,16.277244152244293,-16.277244152244293,-3.736881038589957,465.40560531842544,602.410265373743]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[15848750910363784662,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::graphic::Graphic"}}}},"exposed":true}},{"Node":{"node_id":17911294938421300842,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16164610528699022118,{"inputs":[{"Node":{"node_id":7134154821675013808,"output_index":0}},{"Node":{"node_id":12875520257830460085,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16360261423333265502,{"inputs":[{"Node":{"node_id":283,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"DashPattern":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16815500381887058038,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}},"exposed":true}},{"Node":{"node_id":74,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,768.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"Generic":"T"}]},"import_index":1}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":2}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":3}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":4}},{"Import":{"import_type":{"Item":{"Concrete":{"name":"graph_craft::document::value::TaggedValue"}}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Import":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>"}},{"List":{"Concrete":{"name":"graphic_types::artboard::Artboard"}}}]},"import_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16821952675128396603,{"inputs":[{"Node":{"node_id":3885641499621884510,"output_index":0}},{"Node":{"node_id":36935169817407978,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16831252454255560063,{"inputs":[{"Node":{"node_id":14080831508667499826,"output_index":0}},{"Node":{"node_id":17257434333682934071,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[16894739051789815098,{"inputs":[{"Node":{"node_id":17245613731534563958,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[337.1982047610469,692.7466487935636]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[50.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":1}},{"Import":{"import_type":{"Concrete":{"name":"f64"}},"import_index":2}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":3}},{"Import":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2"}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"transform_nodes::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17020523203516467057,{"inputs":[{"Node":{"node_id":7148230379224894975,"output_index":0}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.08794502,"green":0.031974703,"blue":0.02463841,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.11697067,"green":0.045186203,"blue":0.035601314,"alpha":1.0,"linear":true},{"red":0.08794502,"green":0.031974703,"blue":0.02463841,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[-3.736881038589957,16.277244152244293,-16.277244152244293,-3.736881038589957,465.40560531842544,602.410265373743]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17173383864410319040,{"inputs":[{"Node":{"node_id":15277819403265847073,"output_index":0}},{"Node":{"node_id":15552693212536925398,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":5,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::AsGraphicNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::IntoGroupNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[2,{"inputs":[{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::PathOfSubgraphNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Value":{"tagged_value":{"String":"editor:layer_path"},"exposed":false}},{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::WriteAttributeNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[5,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":4,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphic_nodes::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17245613731534563958,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17257434333682934071,{"inputs":[{"Node":{"node_id":13606781735926093266,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[99.06627546613834,0.0,0.0,99.06627546613834,645.3333333333333,601.349243326633]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17414691604179185270,{"inputs":[{"Value":{"tagged_value":{"TypeDefault":{"Item":{"Concrete":{"name":"vector_types::vector::vector_types::Vector"}}}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[546.1069958847736,566.7818930041152]],[2,[530.2777777777771,564.9115226337452]],[3,[539.3641975308641,608.7633744855966]],[4,[547.6604938271604,606.7880658436213]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Import":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true,"context_features":{"extract":"","inject":""}}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Import":{"import_type":{"Concrete":{"name":"vector_types::vector::vector_modification::VectorModification"}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"vector_nodes::vector_modification_nodes::PathModifyNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[17911294938421300842,{"inputs":[{"Node":{"node_id":17414691604179185270,"output_index":0}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.048171822,"green":0.028426038,"blue":0.03071344,"alpha":1.0,"linear":true}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0,"linear":true},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0,"linear":true}],"position":[0.0,1.0],"midpoint":[0.5,0.5]},"gradient_space":"RgbGamma"}},"exposed":false}},{"Value":{"tagged_value":{"GradientForm":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[17.382716049383248,0.0,0.0,17.382716049383248,530.2777777777771,586.837448559671]},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}],[18142347460553706128,{"inputs":[{"Node":{"node_id":3719764965605527929,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>"}},"implementation":{"ProtoNode":{"name":"blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false,"context_features":{"extract":"","inject":""}}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[74,{"persistent_metadata":{"display_name":"Foreground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-5,4]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[75,{"persistent_metadata":{"display_name":"Slab Spires","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":41}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[76,{"persistent_metadata":{"display_name":"Ground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":143}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[77,{"persistent_metadata":{"display_name":"Spike Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":28}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[78,{"persistent_metadata":{"display_name":"Distant Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":12}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[79,{"persistent_metadata":{"display_name":"Sky","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":7}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[81,{"persistent_metadata":{"display_name":"Left Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,7]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[82,{"persistent_metadata":{"display_name":"Right Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[83,{"persistent_metadata":{"display_name":"Stone Cluster","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[85,{"persistent_metadata":{"display_name":"Left Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":16}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[87,{"persistent_metadata":{"display_name":"Ball","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,10]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[88,{"persistent_metadata":{"display_name":"Left Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[90,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[93,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[94,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[96,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[99,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[100,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[102,{"persistent_metadata":{"display_name":"Agave Plant","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,19]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[103,{"persistent_metadata":{"display_name":"Right Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[105,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[108,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[109,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[111,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[114,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[115,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[117,{"persistent_metadata":{"display_name":"Stones","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,28]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[118,{"persistent_metadata":{"display_name":"Highlight","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[119,{"persistent_metadata":{"display_name":"Highlight","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[120,{"persistent_metadata":{"display_name":"Ground Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[122,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[126,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[128,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[132,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[134,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[138,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[140,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[143,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[144,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[155,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[159,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[161,{"persistent_metadata":{"display_name":"Rocky Outcropping","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,51]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[162,{"persistent_metadata":{"display_name":"Right Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":60}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[164,{"persistent_metadata":{"display_name":"Center Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[165,{"persistent_metadata":{"display_name":"Rocky Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[166,{"persistent_metadata":{"display_name":"Left Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":33}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[168,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,54]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[169,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[170,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[171,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[172,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[173,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[174,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[175,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[176,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[177,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[178,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[179,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[180,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[181,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[182,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[184,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[188,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[190,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[191,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[193,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[194,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[196,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[200,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[202,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[206,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[208,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[212,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[214,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[218,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[220,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[224,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[226,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[227,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[229,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[230,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[232,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[236,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[238,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[242,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[244,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[248,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[250,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[254,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[256,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[257,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[259,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[260,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[262,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[266,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[268,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[272,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[274,{"persistent_metadata":{"display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,117]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[275,{"persistent_metadata":{"display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[277,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[281,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[283,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[287,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[290,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[291,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[292,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[300,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[304,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[306,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[310,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[312,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[316,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[318,{"persistent_metadata":{"display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,135]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[319,{"persistent_metadata":{"display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[321,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[323,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[325,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[327,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[329,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[331,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[393,{"persistent_metadata":{"display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,189]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[394,{"persistent_metadata":{"display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[396,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[398,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[400,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[402,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[404,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[406,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[408,{"persistent_metadata":{"display_name":"Reflections","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[409,{"persistent_metadata":{"display_name":"Ground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[411,{"persistent_metadata":{"display_name":"From Spike Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,206]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[412,{"persistent_metadata":{"display_name":"From Center Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[413,{"persistent_metadata":{"display_name":"From Left Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[415,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[418,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[419,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[421,{"persistent_metadata":{"display_name":"Left Half","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,212]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[422,{"persistent_metadata":{"display_name":"Right Half","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[424,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[427,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[428,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[430,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[433,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[434,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[436,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[439,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[440,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[442,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[445,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[446,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[448,{"persistent_metadata":{"display_name":"Shadow Fissure","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,228]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[449,{"persistent_metadata":{"display_name":"Shadow Lower","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[450,{"persistent_metadata":{"display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[451,{"persistent_metadata":{"display_name":"Shadow Upper","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[455,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[457,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[459,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[463,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[465,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[467,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[469,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[471,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[475,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[477,{"persistent_metadata":{"display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,243]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[478,{"persistent_metadata":{"display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[481,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[485,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[487,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[491,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[493,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[496,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[36935169817407978,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,156]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[97478832511923699,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[600590258445096812,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,165]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[989999757220954936,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1453710883947581217,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1598976462838094167,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1635416892097245588,{"persistent_metadata":{"display_name":"Shading","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1644624352314732667,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[1866101479320869962,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2489761779922717592,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[2999157202967297847,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3707802522175443254,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3719764965605527929,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3885641499621884510,{"persistent_metadata":{"display_name":"Rock Outcropping","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[3930114406985796561,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4454263454059119441,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[4633399390154487467,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4913361824430066698,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5105625446268484763,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5175066652268973319,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5364427239360309137,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5382879283978921947,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[5714505144727602368,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6015109908395573189,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6272196533192700024,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6710503329407068595,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,102]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6873123446543957690,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6926019345498826421,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[6980979116665635870,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7134154821675013808,{"persistent_metadata":{"display_name":"Left Slope Shading","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7135480377162524224,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[7148230379224894975,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[8861964493222160710,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9286544882258200464,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9422094883894860610,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9570557034533539493,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9603838021022368374,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[9778003574990260202,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10278740841813346388,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[10486443711686704000,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10544930474333783117,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11155094820673141470,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11279424538712841875,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11345069121502219134,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11377169273880889832,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11427960919145580782,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11472292186872186521,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11807598261442997948,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[11891167879168294182,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12068777759187203228,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12325841371509826180,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12435496696188763850,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12717405604755313921,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12768614558324028960,{"persistent_metadata":{"display_name":"Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[12875520257830460085,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13606781735926093266,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14080831508667499826,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14113040319560793790,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14205611254835578455,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[14433811491576609500,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14579754335592291854,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15277819403265847073,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[15483449862348058100,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15552693212536925398,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15848750910363784662,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16164610528699022118,{"persistent_metadata":{"display_name":"Spike Spire Corner Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,197]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16360261423333265502,{"persistent_metadata":{"display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint","input_description":"The stroke paint.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke thickness.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Pattern","input_description":"The stroke dash pattern. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16815500381887058038,{"persistent_metadata":{"display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-1,1]}}},"network_metadata":{"persistent_metadata":{"reference":"Artboard","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"Graphics to include within the artboard.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Location","input_description":"Coordinate of the top-left corner of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dimensions","input_description":"Width and height of the artboard within the document.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Background","input_description":"Color of the artboard background.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"Whether to cut off the contained content that extends outside the artboard, or keep it visible.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16821952675128396603,{"persistent_metadata":{"display_name":"Main Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,153]}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16831252454255560063,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[16894739051789815098,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Origin Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Scale Appearance","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":null,"node_metadata":[[0,{"persistent_metadata":{"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17020523203516467057,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17173383864410319040,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"reference":"Merge","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-2]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The list to set the named attribute on (one value per item).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Name","input_description":"The attribute name (key) to write or replace.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"The node that produces the attribute value for each item. Called once per item with the item's index in context.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[5,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Base","input_description":"The list whose items will appear at the start of the extended list.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"New","input_description":"The list whose items will appear at the end of the extended list.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-2]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17245613731534563958,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17257434333682934071,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17414691604179185270,{"persistent_metadata":{"display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"reference":"Path","node_metadata":[[0,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Node Path","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_width":0.0}}}}}],[17911294938421300842,{"persistent_metadata":{"display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient Form","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Has Transform","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Transform","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18142347460553706128,{"persistent_metadata":{"display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The layer stack that will be composited when rendering.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Opacity","input_description":"Whether the *Opacity* property is enabled, multiplying the existing opacity by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Opacity","input_description":"How visible the content should be, including any content clipped to it.\nRanges from the default of 100% (fully opaque) to 0% (fully transparent).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Has Fill","input_description":"Whether the *Fill* property is enabled, multiplying the existing fill by the chosen percentage.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"optional_percentage","input_name":"Fill","input_description":"How visible the content should be, independent of any content clipped to it.\nRanges from 0% (fully transparent) to the default of 100% (fully opaque).\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}]],"pinned_node_order":[],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[588.5,-558.5],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1579.0,22.0],"node_graph_width":1980.0}}}},"collapsed":[[16815500381887058038,74,81],[16815500381887058038,74,82],[16815500381887058038,74,83],[16815500381887058038,75,161,12768614558324028960],[16815500381887058038,75,161,168],[16815500381887058038,75,161,12768614558324028960,6710503329407068595],[16815500381887058038,75,161,12768614558324028960,11377169273880889832],[16815500381887058038,75,161,12768614558324028960,14080831508667499826],[16815500381887058038,75,161,12768614558324028960,16831252454255560063],[16815500381887058038,75,161,182],[16815500381887058038,75,161,181],[16815500381887058038,75,161,180],[16815500381887058038,75,161,179],[16815500381887058038,75,161,178],[16815500381887058038,75,161,177],[16815500381887058038,75,161,176],[16815500381887058038,75,161,175],[16815500381887058038,75,161,174],[16815500381887058038,75,161,173],[16815500381887058038,75,161,172],[16815500381887058038,75,161,171],[16815500381887058038,75,161,170],[16815500381887058038,75,161,169],[16815500381887058038,75,161],[16815500381887058038,75,168],[16815500381887058038,75,12768614558324028960],[16815500381887058038,75,12768614558324028960,6710503329407068595],[16815500381887058038,75,12768614558324028960,11377169273880889832],[16815500381887058038,75,12768614558324028960,14080831508667499826],[16815500381887058038,75,12768614558324028960,16831252454255560063],[16815500381887058038,75,182],[16815500381887058038,75,181],[16815500381887058038,75,180],[16815500381887058038,75,179],[16815500381887058038,75,178],[16815500381887058038,75,177],[16815500381887058038,75,176],[16815500381887058038,75,175],[16815500381887058038,75,174],[16815500381887058038,75,173],[16815500381887058038,75,172],[16815500381887058038,75,171],[16815500381887058038,75,170],[16815500381887058038,75,169],[16815500381887058038,75,166],[16815500381887058038,75,166,393],[16815500381887058038,75,166,394],[16815500381887058038,75,165],[16815500381887058038,75,165,36935169817407978],[16815500381887058038,75,165,15848750910363784662],[16815500381887058038,75,165,16821952675128396603],[16815500381887058038,75,165,3885641499621884510],[16815500381887058038,75,165,3885641499621884510,600590258445096812],[16815500381887058038,75,165,3885641499621884510,15277819403265847073],[16815500381887058038,75,165,3885641499621884510,17173383864410319040],[16815500381887058038,75,165,3885641499621884510,10544930474333783117],[16815500381887058038,75,165,3885641499621884510,989999757220954936],[16815500381887058038,75,165,3885641499621884510,6926019345498826421],[16815500381887058038,75,165,3885641499621884510,9778003574990260202],[16815500381887058038,75,165,16821952675128396603,36935169817407978],[16815500381887058038,75,165,16821952675128396603,15848750910363784662],[16815500381887058038,75,164],[16815500381887058038,75,164,318],[16815500381887058038,75,164,292],[16815500381887058038,75,164,291],[16815500381887058038,75,164,290],[16815500381887058038,75,164,319],[16815500381887058038,75,162],[16815500381887058038,75,162,274],[16815500381887058038,75,162,12717405604755313921],[16815500381887058038,75,162,6873123446543957690],[16815500381887058038,75,162,11427960919145580782],[16815500381887058038,75,162,275],[16815500381887058038,76,16164610528699022118],[16815500381887058038,76,409],[16815500381887058038,76,408],[16815500381887058038,76,408,411],[16815500381887058038,76,408,413],[16815500381887058038,76,408,412],[16815500381887058038,76,408,412,421],[16815500381887058038,76,408,412,422],[16815500381887058038,76,7134154821675013808],[16815500381887058038,77,448],[16815500381887058038,77,451],[16815500381887058038,77,450],[16815500381887058038,77,449],[16815500381887058038,78],[16815500381887058038,77],[16815500381887058038,76],[16815500381887058038,75],[16815500381887058038,74]],"properties_panel_collapsed_sections":[],"commit_hash":"","document_ptz":{"pan":[-512.25,-384.4351851851852],"tilt":0.0,"zoom":1.0,"flip":false},"render_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"layer_origin_cross":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"color":"#cccccc","dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index b68f76ac76..2acd03a872 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -3,7 +3,7 @@ name = "graphite-desktop" version = "0.1.0" description = "Graphite Desktop" authors = ["Graphite Authors "] -license = "Apache-2.0" +license = "MIT OR Apache-2.0" repository = "" edition = "2024" rust-version = "1.87" diff --git a/desktop/bundle/Cargo.toml b/desktop/bundle/Cargo.toml index acaaa2ec49..4521ab79eb 100644 --- a/desktop/bundle/Cargo.toml +++ b/desktop/bundle/Cargo.toml @@ -3,7 +3,7 @@ name = "graphite-desktop-bundle" version = "0.0.0" description = "Graphite Desktop Bundle" authors = ["Graphite Authors "] -license = "Apache-2.0" +license = "MIT OR Apache-2.0" repository = "" edition = "2024" rust-version = "1.87" diff --git a/desktop/embedded-resources/Cargo.toml b/desktop/embedded-resources/Cargo.toml index b14c08b1de..a8ea69c1fe 100644 --- a/desktop/embedded-resources/Cargo.toml +++ b/desktop/embedded-resources/Cargo.toml @@ -3,7 +3,7 @@ name = "graphite-desktop-embedded-resources" version = "0.1.0" description = "Graphite Desktop Embedded Resources" authors = ["Graphite Authors "] -license = "Apache-2.0" +license = "MIT OR Apache-2.0" repository = "" edition = "2024" rust-version = "1.87" diff --git a/desktop/platform/linux/Cargo.toml b/desktop/platform/linux/Cargo.toml index ed50d6a6da..6f146156f4 100644 --- a/desktop/platform/linux/Cargo.toml +++ b/desktop/platform/linux/Cargo.toml @@ -3,7 +3,7 @@ name = "graphite-desktop-platform-linux" version = "0.0.0" description = "Graphite Desktop Platform Linux" authors = ["Graphite Authors "] -license = "Apache-2.0" +license = "MIT OR Apache-2.0" repository = "" edition = "2024" rust-version = "1.87" diff --git a/desktop/platform/mac/Cargo.toml b/desktop/platform/mac/Cargo.toml index 9566c9ba75..e666770f3e 100644 --- a/desktop/platform/mac/Cargo.toml +++ b/desktop/platform/mac/Cargo.toml @@ -3,7 +3,7 @@ name = "graphite-desktop-platform-mac" version = "0.0.0" description = "Graphite Desktop Platform Mac" authors = ["Graphite Authors "] -license = "Apache-2.0" +license = "MIT OR Apache-2.0" repository = "" edition = "2024" rust-version = "1.87" diff --git a/desktop/platform/win/Cargo.toml b/desktop/platform/win/Cargo.toml index e268622cca..d5cd2db1fa 100644 --- a/desktop/platform/win/Cargo.toml +++ b/desktop/platform/win/Cargo.toml @@ -3,7 +3,7 @@ name = "graphite-desktop-platform-win" version = "0.0.0" description = "Graphite Desktop Platform Windows" authors = ["Graphite Authors "] -license = "Apache-2.0" +license = "MIT OR Apache-2.0" repository = "" edition = "2024" rust-version = "1.87" diff --git a/desktop/src/app.rs b/desktop/src/app.rs index 887e19fb88..e14b1666b3 100644 --- a/desktop/src/app.rs +++ b/desktop/src/app.rs @@ -9,19 +9,21 @@ use std::sync::mpsc::{Receiver, SyncSender}; use std::thread; use std::time::{Duration, Instant}; use winit::application::ApplicationHandler; -use winit::dpi::{PhysicalPosition, PhysicalSize}; -use winit::event::{ButtonSource, ElementState, MouseButton, StartCause, WindowEvent}; +use winit::dpi::PhysicalSize; +use winit::event::{ElementState, MouseButton, StartCause, WindowEvent}; +use winit::event_loop::run_on_demand::EventLoopExtRunOnDemand; use winit::event_loop::{ActiveEventLoop, ControlFlow, EventLoop}; use winit::window::WindowId; use crate::dirs; use crate::event::{AppEvent, AppEventScheduler}; +use crate::input::InputState; use crate::persist; use crate::preferences; use crate::render::{RenderError, RenderState}; -use crate::ui::{UiCommand, UiInstance}; +use crate::ui::{InputEvent, UiCommand, UiInstance}; use crate::window::Window; -use crate::wrapper::messages::{DesktopFrontendMessage, DesktopWrapperMessage, InputMessage, MouseKeys, MouseState, Preferences}; +use crate::wrapper::messages::{DesktopFrontendMessage, DesktopWrapperMessage, Preferences}; use crate::wrapper::{DesktopWrapper, MmapResourceStorage, NodeGraphExecutionResult, WgpuContext, serialize_frontend_messages}; pub(crate) struct App { @@ -33,8 +35,7 @@ pub(crate) struct App { window_maximized: bool, window_fullscreen: bool, window_pending_drag: bool, - pointer_position: PhysicalPosition, - pointer_lock_position: Option>, + input_state: InputState, ui_scale: f64, app_event_receiver: Receiver, app_event_scheduler: AppEventScheduler, @@ -111,8 +112,7 @@ impl App { window_maximized: false, window_fullscreen: false, window_pending_drag: false, - pointer_position: Default::default(), - pointer_lock_position: Default::default(), + input_state: InputState::new(), ui_scale: 1., app_event_receiver, app_event_scheduler, @@ -130,8 +130,8 @@ impl App { } } - pub(crate) fn run(mut self, event_loop: EventLoop) -> ExitReason { - event_loop.run_app(&mut self).unwrap(); + pub(crate) fn run(mut self, mut event_loop: EventLoop) -> ExitReason { + event_loop.run_app_on_demand(&mut self).unwrap(); self.exit_reason } @@ -269,6 +269,8 @@ impl App { }); } DesktopFrontendMessage::UpdateViewportPhysicalBounds { x, y, width, height } => { + self.input_state.set_viewport_info(x, y, width, height, self.window_scale); + if let Some(render_state) = &mut self.render_state && let Some(window) = &self.window { @@ -283,6 +285,9 @@ impl App { render_state.set_viewport_scale([viewport_scale_x as f32, viewport_scale_y as f32]); } } + DesktopFrontendMessage::WindowUpdateDirectInput { enabled } => { + self.input_state.set_direct_input(enabled); + } DesktopFrontendMessage::UpdateUIScale { scale } => { self.ui_scale = scale; self.resize(); @@ -347,7 +352,7 @@ impl App { } } DesktopFrontendMessage::PointerLock => { - self.pointer_lock_position = Some(self.pointer_position); + self.input_state.lock_pointer(); if let Some(window) = &self.window { window.start_pointer_lock(); } @@ -540,26 +545,26 @@ impl ApplicationHandler for App { fn window_event(&mut self, _event_loop: &dyn ActiveEventLoop, _window_id: WindowId, event: WindowEvent) { // Handle pointer lock release - if let Some(pointer_lock_position) = self.pointer_lock_position - && let WindowEvent::PointerButton { - state: ElementState::Released, - button: ButtonSource::Mouse(MouseButton::Left), - .. - } = event + if let WindowEvent::PointerButton { + state: ElementState::Released, + button, + .. + } = &event && button.clone().mouse_button() == Some(MouseButton::Left) + && let Some(pointer_lock_position) = self.input_state.unlock_pointer() { - self.pointer_lock_position = None; if let Some(window) = &self.window { window.end_pointer_lock(); } - self.ui.send(UiCommand::Input(WindowEvent::PointerMoved { - device_id: None, - position: pointer_lock_position, - primary: true, - source: winit::event::PointerSource::Mouse, - })); + self.ui.send(UiCommand::Input( + InputEvent::pointer().position(pointer_lock_position).moved().modifiers(self.input_state.modifiers()).build(), + )); } - self.ui.send(UiCommand::Input(event.clone())); + self.input_state.process( + &event, + |message| self.app_event_scheduler.schedule(AppEvent::DesktopWrapperMessage(DesktopWrapperMessage::Input(message))), + |input| self.ui.send(UiCommand::Input(input)), + ); match event { WindowEvent::CloseRequested => { @@ -616,50 +621,20 @@ impl ApplicationHandler for App { } } - // Forward and Back buttons are not supported by CEF and thus need to be directly forwarded the editor - WindowEvent::PointerButton { - button: ButtonSource::Mouse(button), - state: ElementState::Pressed, - .. - } => { - let mouse_keys = match button { - MouseButton::Back => Some(MouseKeys::BACK), - MouseButton::Forward => Some(MouseKeys::FORWARD), - _ => None, - }; - if let Some(mouse_keys) = mouse_keys { - let message = DesktopWrapperMessage::Input(InputMessage::PointerDown { - editor_mouse_state: MouseState { mouse_keys, ..Default::default() }, - modifier_keys: Default::default(), - }); - self.app_event_scheduler.schedule(AppEvent::DesktopWrapperMessage(message)); - - let message = DesktopWrapperMessage::Input(InputMessage::PointerUp { - editor_mouse_state: Default::default(), - modifier_keys: Default::default(), - }); - self.app_event_scheduler.schedule(AppEvent::DesktopWrapperMessage(message)); - } - } - - WindowEvent::PointerMoved { position, .. } | WindowEvent::PointerLeft { position: Some(position), .. } | WindowEvent::PointerEntered { position, .. } - if self.pointer_lock_position.is_none() => + WindowEvent::PointerMoved { .. } | WindowEvent::PointerLeft { position: Some(_), .. } | WindowEvent::PointerEntered { .. } + if !self.input_state.pointer_locked() && self.window_pending_drag => { - self.pointer_position = position; - - if self.window_pending_drag { - self.window_pending_drag = false; - if let Some(window) = &self.window { - window.start_drag(); - } + self.window_pending_drag = false; + if let Some(window) = &self.window { + window.start_drag(); } } WindowEvent::PointerButton { - button: ButtonSource::Mouse(MouseButton::Left), + button, state: ElementState::Released, .. - } => { + } if button.clone().mouse_button() == Some(MouseButton::Left) => { self.window_pending_drag = false; } @@ -668,7 +643,7 @@ impl ApplicationHandler for App { } fn device_event(&mut self, _event_loop: &dyn ActiveEventLoop, _device_id: Option, event: winit::event::DeviceEvent) { - if self.pointer_lock_position.is_some() + if self.input_state.pointer_locked() && let winit::event::DeviceEvent::PointerMotion { delta: (x, y) } = event { let message = DesktopWrapperMessage::PointerLockMove { x, y }; diff --git a/desktop/src/input.rs b/desktop/src/input.rs new file mode 100644 index 0000000000..731f43fdba --- /dev/null +++ b/desktop/src/input.rs @@ -0,0 +1,453 @@ +use std::collections::VecDeque; +use std::time::{Duration, Instant}; +use winit::dpi::PhysicalPosition; +use winit::event::{ButtonSource, ElementState, MouseButton, MouseScrollDelta, PointerSource, TabletToolData, TabletToolKind, WindowEvent}; +use winit::keyboard::ModifiersState; + +use crate::ui::{InputEvent, MULTICLICK_ALLOWED_TRAVEL, MULTICLICK_TIMEOUT, PINCH_ZOOM_SPEED, SCROLL_LINE_HEIGHT, SCROLL_LINE_WIDTH, SCROLL_SPEED_X, SCROLL_SPEED_Y}; +use crate::wrapper::messages::{EditorPointerState, InputMessage, ModifierKeys, MouseKeys, ScrollDelta}; + +// Marks input event as observe-only, meaning it should not result in any input messages being send by the frontend. +// And should instead be ignored by frontend input processing and only be used to update the UI state (hover, cursor). +// TODO(Timon): Remove and find a less hacky solution +trait ObserveOnlyExt { + fn observe_only(self) -> Self; +} +impl ObserveOnlyExt for crate::ui::InputEventBuilder { + fn observe_only(self) -> Self { + self.num_lock(true) + } +} + +pub(crate) struct InputState { + start: Instant, + viewport_info: Option, + direct_input: bool, + modifiers: ModifiersState, + pointer_position: PhysicalPosition, + pointer_state: PointerState, + click_tracker: ClickTracker, + shake_tracker: ShakeTracker, +} + +impl InputState { + pub(crate) fn new() -> Self { + Self { + start: Instant::now(), + viewport_info: None, + direct_input: false, + modifiers: ModifiersState::default(), + pointer_position: PhysicalPosition::default(), + pointer_state: PointerState::Hover { route: Route::Ui }, + click_tracker: ClickTracker::default(), + shake_tracker: ShakeTracker::default(), + } + } + + pub(crate) fn set_viewport_info(&mut self, x: f64, y: f64, width: f64, height: f64, scale: f64) { + self.viewport_info = Some(ViewportInfo { x, y, width, height, scale }); + } + + pub(crate) fn set_direct_input(&mut self, enabled: bool) { + self.direct_input = enabled; + } + + pub(crate) fn lock_pointer(&mut self) { + self.pointer_state = match self.pointer_state { + PointerState::Hover { route } => PointerState::Locked { + route, + keys: MouseKeys::empty(), + position: self.pointer_position, + }, + PointerState::Stroke { route, keys } | PointerState::Locked { route, keys, .. } => PointerState::Locked { + route, + keys, + position: self.pointer_position, + }, + }; + } + + pub(crate) fn unlock_pointer(&mut self) -> Option> { + let PointerState::Locked { + route: resume, + keys, + position: restore, + } = self.pointer_state + else { + return None; + }; + self.pointer_position = restore; + self.pointer_state = match keys.is_empty() { + true => PointerState::Hover { route: Route::Ui }, + false => PointerState::Stroke { route: resume, keys }, + }; + Some(restore) + } + + pub(crate) fn pointer_locked(&self) -> bool { + matches!(self.pointer_state, PointerState::Locked { .. }) + } + + pub(crate) fn modifiers(&self) -> ModifiersState { + self.modifiers + } + + pub(crate) fn process(&mut self, event: &WindowEvent, mut editor_callback: impl FnMut(InputMessage), mut ui_callback: impl FnMut(InputEvent)) { + match event { + WindowEvent::PointerMoved { position, source, .. } => { + self.pointer_position = *position; + + let route = match self.pointer_state { + PointerState::Hover { .. } => { + let next = self.route(*position); + self.pointer_state = PointerState::Hover { route: next }; + next + } + PointerState::Stroke { route, .. } => route, + PointerState::Locked { keys, route: resume, .. } => match keys.is_empty() { + true => Route::Ui, + false => resume, + }, + }; + match route { + Route::Ui => ui_callback(InputEvent::pointer().position(*position).moved().modifiers(self.modifiers).build()), + Route::Editor => { + if !self.pointer_locked() { + ui_callback(InputEvent::pointer().position(*position).moved().modifiers(self.modifiers).observe_only().build()); + } + let editor_mouse_state = match source { + PointerSource::TabletTool { kind, data } => self.tablet_pointer_state(kind, data), + _ => self.pointer_state(), + }; + let modifier_keys = self.modifier_keys(); + if self.shake_tracker.detect(*position, self.start.elapsed()) { + editor_callback(InputMessage::PointerShake { editor_mouse_state, modifier_keys }); + } + editor_callback(InputMessage::PointerMove { editor_mouse_state, modifier_keys }); + } + } + } + WindowEvent::PointerEntered { position, .. } => { + self.pointer_position = *position; + ui_callback(InputEvent::pointer().position(*position).entered().modifiers(self.modifiers).build()) + } + WindowEvent::PointerLeft { position: Some(position), .. } => { + self.pointer_position = *position; + ui_callback(InputEvent::pointer().position(*position).exited().modifiers(self.modifiers).build()) + } + WindowEvent::PointerLeft { position: None, .. } => ui_callback(InputEvent::pointer().exited().modifiers(self.modifiers).build()), + WindowEvent::PointerButton { state, button, position, .. } => { + self.pointer_position = *position; + + let mouse_button = button.clone().mouse_button(); + let keys = match mouse_button { + Some(MouseButton::Left) => MouseKeys::LEFT, + Some(MouseButton::Right) => MouseKeys::RIGHT, + Some(MouseButton::Middle) => MouseKeys::MIDDLE, + Some(MouseButton::Back) => MouseKeys::BACK, + Some(MouseButton::Forward) => MouseKeys::FORWARD, + _ => MouseKeys::NONE, + }; + + let (pointer, route) = match self.pointer_state { + PointerState::Hover { route } => match (state.is_pressed(), keys.is_empty()) { + (true, false) => { + let route = self.route(*position); + (PointerState::Stroke { route, keys }, route) + } + (true, true) => (PointerState::Hover { route }, self.route(*position)), + (false, _) => (PointerState::Hover { route }, route), + }, + PointerState::Stroke { route, keys: mut held } => { + match state.is_pressed() { + true => held.insert(keys), + false => held.remove(keys), + } + match held.is_empty() { + true => (PointerState::Hover { route }, route), + false => (PointerState::Stroke { route, keys: held }, route), + } + } + PointerState::Locked { route, keys: mut held, position } => { + let resume = if state.is_pressed() && held.is_empty() { Route::Ui } else { route }; + match state.is_pressed() { + true => held.insert(keys), + false => held.remove(keys), + } + (PointerState::Locked { route: resume, keys: held, position }, Route::Ui) + } + }; + self.pointer_state = pointer; + + let count = mouse_button.map_or(1, |button| self.click_tracker.input(*position, button, *state)); + + let back_or_forward = matches!(mouse_button, Some(MouseButton::Back | MouseButton::Forward)); + let pointer = InputEvent::pointer().position(*position); + let input = match state { + ElementState::Pressed => pointer.pressed(button.clone(), count), + ElementState::Released => pointer.released(button.clone(), count), + } + .modifiers(self.modifiers); + if self.pointer_locked() || keys.is_empty() || !(back_or_forward || route == Route::Editor) { + ui_callback(input.build()); + return; + } + if route == Route::Editor { + ui_callback(input.observe_only().build()); + } + + let editor_mouse_state = match button { + ButtonSource::TabletTool { kind, data, .. } => self.tablet_pointer_state(kind, data), + _ => self.pointer_state(), + }; + let modifier_keys = self.modifier_keys(); + match state { + ElementState::Pressed => editor_callback(InputMessage::PointerDown { editor_mouse_state, modifier_keys }), + ElementState::Released if count % 2 == 0 => { + editor_callback(InputMessage::PointerUp { editor_mouse_state, modifier_keys }); + editor_callback(InputMessage::DoubleClick { + editor_mouse_state: EditorPointerState { + mouse_keys: keys, + ..editor_mouse_state + }, + modifier_keys, + }); + } + ElementState::Released => editor_callback(InputMessage::PointerUp { editor_mouse_state, modifier_keys }), + } + } + WindowEvent::MouseWheel { delta, .. } => { + if self.pointer_locked() || self.ui_captures(self.pointer_position) { + let input = match delta { + MouseScrollDelta::LineDelta(x, y) => InputEvent::pointer().scrolled_lines(f64::from(*x), f64::from(*y)), + MouseScrollDelta::PixelDelta(position) => InputEvent::pointer().scrolled_pixels(position.x, position.y), + }; + ui_callback(input.modifiers(self.modifiers).build()); + return; + } + + let (x, y) = match delta { + MouseScrollDelta::LineDelta(x, y) => (f64::from(*x) * SCROLL_LINE_WIDTH, f64::from(*y) * SCROLL_LINE_HEIGHT), + MouseScrollDelta::PixelDelta(position) => (position.x, position.y), + }; + + let scroll_delta = ScrollDelta::new(-x * SCROLL_SPEED_X, -y * SCROLL_SPEED_Y, 0.); + + editor_callback(InputMessage::WheelScroll { + editor_mouse_state: EditorPointerState { scroll_delta, ..self.pointer_state() }, + modifier_keys: self.modifier_keys(), + }); + } + WindowEvent::PinchGesture { delta, .. } => { + if self.pointer_locked() || self.ui_captures(self.pointer_position) || !delta.is_normal() { + ui_callback(InputEvent::pointer().zoomed(*delta).modifiers(self.modifiers).build()); + return; + } + + // TODO: This is a temporary solution to handle pinch gestures, we should handle pinch gestures editor-side instead. + let scroll_delta = ScrollDelta::new(0., -delta * PINCH_ZOOM_SPEED, 0.); + editor_callback(InputMessage::WheelScroll { + editor_mouse_state: EditorPointerState { scroll_delta, ..self.pointer_state() }, + modifier_keys: self.modifier_keys() | ModifierKeys::CONTROL, + }); + } + WindowEvent::ModifiersChanged(modifiers) => { + self.modifiers = modifiers.state(); + } + WindowEvent::KeyboardInput { event, .. } => ui_callback(InputEvent::key(event).modifiers(self.modifiers).build()), + _ => {} + } + } + + fn scale(&self) -> f64 { + self.viewport_info.as_ref().map_or(1., |info| info.scale) + } + + fn ui_captures(&self, position: PhysicalPosition) -> bool { + !self.direct_input || !self.viewport_info.as_ref().is_some_and(|info| info.contains(position)) + } + + fn route(&self, position: PhysicalPosition) -> Route { + if self.ui_captures(position) { Route::Ui } else { Route::Editor } + } + + fn pointer_keys(&self) -> MouseKeys { + match self.pointer_state { + PointerState::Hover { .. } => MouseKeys::empty(), + PointerState::Stroke { keys, .. } | PointerState::Locked { keys, .. } => keys, + } + } + + fn pointer_state(&self) -> EditorPointerState { + EditorPointerState { + editor_position: (self.pointer_position.x / self.scale(), self.pointer_position.y / self.scale()).into(), + mouse_keys: self.pointer_keys(), + time: Some(self.start.elapsed().as_secs_f64() * 1000.), + ..Default::default() + } + } + + fn tablet_pointer_state(&self, kind: &TabletToolKind, data: &TabletToolData) -> EditorPointerState { + EditorPointerState { + pressure: data.force.map(|force| force.normalized(None)), + tilt: data.clone().tilt().map(|tilt| (f64::from(tilt.x), f64::from(tilt.y)).into()), + twist: data.twist.map(f64::from), + wheel: data.tangential_force.map(f64::from), + eraser: matches!(kind, TabletToolKind::Eraser), + ..self.pointer_state() + } + } + + fn modifier_keys(&self) -> ModifierKeys { + let mut keys = ModifierKeys::empty(); + keys.set(ModifierKeys::SHIFT, self.modifiers.shift_key()); + keys.set(ModifierKeys::CONTROL, self.modifiers.control_key()); + keys.set(ModifierKeys::ALT, self.modifiers.alt_key()); + keys.set(ModifierKeys::META_OR_COMMAND, self.modifiers.meta_key()); + keys + } +} + +#[derive(Clone, Copy)] +enum PointerState { + Hover { route: Route }, + Stroke { route: Route, keys: MouseKeys }, + Locked { route: Route, keys: MouseKeys, position: PhysicalPosition }, +} + +#[derive(Clone, Copy, PartialEq)] +enum Route { + Ui, + Editor, +} + +struct ViewportInfo { + x: f64, + y: f64, + width: f64, + height: f64, + scale: f64, +} + +impl ViewportInfo { + fn contains(&self, position: PhysicalPosition) -> bool { + position.x >= self.x && position.y >= self.y && position.x <= self.x + self.width && position.y <= self.y + self.height + } +} + +#[derive(Default)] +struct ClickTracker { + left: ClickChains, + right: ClickChains, + middle: ClickChains, + back: ClickChains, + forward: ClickChains, +} + +impl ClickTracker { + fn input(&mut self, position: PhysicalPosition, button: MouseButton, state: ElementState) -> u32 { + let position = (position.x as i32, position.y as i32); + let clicks = match button { + MouseButton::Left => &mut self.left, + MouseButton::Right => &mut self.right, + MouseButton::Middle => &mut self.middle, + MouseButton::Back => &mut self.back, + MouseButton::Forward => &mut self.forward, + _ => return 1, + }; + let chain = match state { + ElementState::Pressed => &mut clicks.down, + ElementState::Released => &mut clicks.up, + }; + + let now = Instant::now(); + let count = match chain { + Some(previous) => { + let within_time = now.saturating_duration_since(previous.time) <= MULTICLICK_TIMEOUT; + let dx = position.0.abs_diff(previous.position.0) as usize; + let dy = position.1.abs_diff(previous.position.1) as usize; + let within_distance = dx <= MULTICLICK_ALLOWED_TRAVEL && dy <= MULTICLICK_ALLOWED_TRAVEL; + if within_time && within_distance { previous.count.saturating_add(1) } else { 1 } + } + None => 1, + }; + *chain = Some(Click { time: now, position, count }); + count + } +} + +#[derive(Default)] +struct ClickChains { + down: Option, + up: Option, +} + +struct Click { + time: Instant, + position: (i32, i32), + count: u32, +} + +#[derive(Default)] +struct ShakeTracker { + samples: VecDeque<(PhysicalPosition, Duration)>, + last: Option, +} + +// Keep heuristic and constants in sync with `detectShake` in `frontend/src/utility-functions/input.ts`. +impl ShakeTracker { + const SENSITIVITY_DIRECTION_CHANGES: usize = 3; + const SENSITIVITY_DISTANCE_TO_DISPLACEMENT_RATIO: f64 = 0.1; + const DETECTION_WINDOW: Duration = Duration::from_millis(500); + const DEBOUNCE: Duration = Duration::from_millis(1000); + + fn detect(&mut self, position: PhysicalPosition, now: Duration) -> bool { + self.samples.push_back((position, now)); + + while self.samples.front().is_some_and(|&(_, time)| now.saturating_sub(time) > Self::DETECTION_WINDOW) { + self.samples.pop_front(); + } + + if self.samples.len() <= 3 || self.last.is_some_and(|time| now.saturating_sub(time) <= Self::DEBOUNCE) { + return false; + } + + let mut total_distance_squared = 0.; + for i in 1..self.samples.len() { + let (p1, _) = self.samples[i - 1]; + let (p2, _) = self.samples[i]; + total_distance_squared += (p2.x - p1.x).powi(2) + (p2.y - p1.y).powi(2); + } + + let mut direction_changes = 0; + let mut average = PhysicalPosition::new(0., 0.); + let interior_count = self.samples.len() - 2; + for i in 0..interior_count { + let (p1, _) = self.samples[i]; + let (p2, _) = self.samples[i + 1]; + let (p3, _) = self.samples[i + 2]; + + let vector1 = (p2.x - p1.x, p2.y - p1.y); + let vector2 = (p3.x - p2.x, p3.y - p2.y); + if vector1.0 * vector2.0 + vector1.1 * vector2.1 < 0. { + direction_changes += 1; + } + + average.x += p2.x; + average.y += p2.y; + } + average.x /= interior_count as f64; + average.y /= interior_count as f64; + + let (last, _) = self.samples[self.samples.len() - 1]; + let displacement_squared = (last.x - average.x).powi(2) + (last.y - average.y).powi(2); + + if Self::SENSITIVITY_DISTANCE_TO_DISPLACEMENT_RATIO * total_distance_squared >= displacement_squared && direction_changes >= Self::SENSITIVITY_DIRECTION_CHANGES { + self.last = Some(now); + self.samples.clear(); + return true; + } + + false + } +} diff --git a/desktop/src/lib.rs b/desktop/src/lib.rs index c87f70c19f..cfff56cd5b 100644 --- a/desktop/src/lib.rs +++ b/desktop/src/lib.rs @@ -17,6 +17,7 @@ mod cli; mod dirs; mod event; mod gpu_context; +mod input; mod persist; mod preferences; mod render; diff --git a/desktop/src/render/composite_shader.wgsl b/desktop/src/render/composite_shader.wgsl index 7863621979..0ac4d12cd9 100644 --- a/desktop/src/render/composite_shader.wgsl +++ b/desktop/src/render/composite_shader.wgsl @@ -52,13 +52,12 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { return srgb_to_linear(immediates.background_color); } - let ui_linear = srgb_to_linear(textureSample(t_ui, s_diffuse, ui_coordinate)); - if (ui_linear.a >= 0.999) { - return ui_linear; + let ui_sample = textureSample(t_ui, s_diffuse, ui_coordinate); + if (ui_sample.a >= 0.999) { + return srgb_to_linear(ui_sample); } - // UI texture is premultiplied, we need to unpremultiply before blending - let ui_srgb = linear_to_srgb(unpremultiply(ui_linear)); + let ui_srgb = unpremultiply(ui_sample); let viewport_coordinate = (in.tex_coords - immediates.viewport_offset) * immediates.viewport_scale; if (viewport_coordinate.x < 0.0 || viewport_coordinate.x > 1.0 || diff --git a/desktop/src/render/state.rs b/desktop/src/render/state.rs index b3ced6709e..c3395c16a4 100644 --- a/desktop/src/render/state.rs +++ b/desktop/src/render/state.rs @@ -1,7 +1,7 @@ use wgpu::PresentMode; use crate::window::Window; -use crate::wrapper::{WgpuContext, WgpuCurrentSurfaceTexture, WgpuExecutor, WgpuSurface}; +use crate::wrapper::{Texture, WgpuContext, WgpuCurrentSurfaceTexture, WgpuExecutor, WgpuSurface}; #[derive(derivative::Derivative)] #[derivative(Debug)] @@ -10,14 +10,14 @@ pub(crate) struct RenderState { executor: WgpuExecutor, config: wgpu::SurfaceConfiguration, render_pipeline: wgpu::RenderPipeline, - transparent_texture: std::sync::Arc, + transparent_texture: Texture, sampler: wgpu::Sampler, desired_width: u32, desired_height: u32, viewport_scale: [f32; 2], viewport_offset: [f32; 2], - viewport_texture: Option>, - overlays_texture: Option>, + viewport_texture: Option, + overlays_texture: Option, ui_texture: Option, bind_group: Option, #[derivative(Debug = "ignore")] @@ -46,8 +46,8 @@ impl RenderState { surface.configure(&context.device, &config); - let transparent_texture = std::sync::Arc::new(context.device.create_texture(&wgpu::TextureDescriptor { - label: Some("Transparent Texture"), + let transparent_texture = Texture::from(context.device.create_texture(&wgpu::TextureDescriptor { + label: Some("transparent_fallback"), size: wgpu::Extent3d { width: 1, height: 1, @@ -193,7 +193,7 @@ impl RenderState { self.surface_outdated = true; } - pub(crate) fn bind_viewport_texture(&mut self, viewport_texture: std::sync::Arc) { + pub(crate) fn bind_viewport_texture(&mut self, viewport_texture: Texture) { self.viewport_texture = Some(viewport_texture); self.update_bindgroup(); } @@ -231,7 +231,7 @@ impl RenderState { let result = self.executor.render_vello_scene(&scene, size, &Default::default(), None); match result { Ok(texture) => { - self.overlays_texture = Some(texture.into()); + self.overlays_texture = Some(texture); } Err(e) => { self.overlays_texture = None; diff --git a/desktop/src/window/win/native_handle.rs b/desktop/src/window/win/native_handle.rs index 113b0154f6..6185df2888 100644 --- a/desktop/src/window/win/native_handle.rs +++ b/desktop/src/window/win/native_handle.rs @@ -344,6 +344,14 @@ unsafe fn position_helper(main: HWND, helper: HWND) { let h = (r.bottom - r.top) + RESIZE_BAND_THICKNESS * 2; let _ = unsafe { SetWindowPos(helper, Some(main), x, y, w, h, SWP_NOACTIVATE | SWP_NOSENDCHANGING) }; + + let outer = unsafe { CreateRectRgn(0, 0, w, h) }; + let inner = unsafe { CreateRectRgn(RESIZE_BAND_THICKNESS, RESIZE_BAND_THICKNESS, w - RESIZE_BAND_THICKNESS, h - RESIZE_BAND_THICKNESS) }; + let _ = unsafe { CombineRgn(Some(outer), Some(outer), Some(inner), RGN_DIFF) }; + let _ = unsafe { DeleteObject(inner.into()) }; + if unsafe { SetWindowRgn(helper, Some(outer), false) } == 0 { + let _ = unsafe { DeleteObject(outer.into()) }; + } } unsafe fn calculate_hit(helper: HWND, lparam: LPARAM) -> u32 { diff --git a/desktop/ui/src/consts.rs b/desktop/ui/src/consts.rs index b459466748..9a04adc259 100644 --- a/desktop/ui/src/consts.rs +++ b/desktop/ui/src/consts.rs @@ -1,5 +1,23 @@ use std::time::Duration; +pub const MULTICLICK_TIMEOUT: Duration = Duration::from_millis(500); +pub const MULTICLICK_ALLOWED_TRAVEL: usize = 4; + +pub const SCROLL_LINE_HEIGHT: f64 = 40.; +pub const SCROLL_LINE_WIDTH: f64 = 40.; + +#[cfg(target_os = "linux")] +pub const SCROLL_SPEED_X: f64 = 3.; +#[cfg(target_os = "linux")] +pub const SCROLL_SPEED_Y: f64 = 3.; + +#[cfg(not(target_os = "linux"))] +pub const SCROLL_SPEED_X: f64 = 1.; +#[cfg(not(target_os = "linux"))] +pub const SCROLL_SPEED_Y: f64 = 1.; + +pub const PINCH_ZOOM_SPEED: f64 = 300.; + pub(crate) const RESOURCE_SCHEME: &str = "resources"; pub(crate) const RESOURCE_DOMAIN: &str = "resources"; @@ -17,21 +35,3 @@ pub(crate) const HOST_SHUTDOWN_TIMEOUT: Duration = Duration::from_secs(5); #[cfg(target_os = "macos")] pub(crate) const IPC_BOOTSTRAP_PREFIX: &str = "art.graphite.Graphite.ipc."; - -pub(crate) const SCROLL_LINE_HEIGHT: usize = 40; -pub(crate) const SCROLL_LINE_WIDTH: usize = 40; - -#[cfg(target_os = "linux")] -pub(crate) const SCROLL_SPEED_X: f32 = 3.; -#[cfg(target_os = "linux")] -pub(crate) const SCROLL_SPEED_Y: f32 = 3.; - -#[cfg(not(target_os = "linux"))] -pub(crate) const SCROLL_SPEED_X: f32 = 1.; -#[cfg(not(target_os = "linux"))] -pub(crate) const SCROLL_SPEED_Y: f32 = 1.; - -pub(crate) const PINCH_ZOOM_SPEED: f64 = 300.; - -pub(crate) const MULTICLICK_TIMEOUT: Duration = Duration::from_millis(500); -pub(crate) const MULTICLICK_ALLOWED_TRAVEL: usize = 4; diff --git a/desktop/ui/src/context.rs b/desktop/ui/src/context.rs index c54005c185..c99ee20196 100644 --- a/desktop/ui/src/context.rs +++ b/desktop/ui/src/context.rs @@ -223,6 +223,7 @@ fn create_browser(delegate: BrowserDelegate, frames: FrameStreamer, view_info_se .map(|browser| BrowserContext { delegate, browser, + input: input::InputState::default(), view_info_sender, _instance_dir: instance_dir, }) @@ -252,12 +253,8 @@ pub(crate) enum InitError { pub(crate) struct CefContextHandle; impl CefContextHandle { - pub(crate) fn apply_input(&self, events: Vec) { - with_context(move |context| { - for event in &events { - input::apply(&context.browser, event); - } - }); + pub(crate) fn process_input(&self, event: InputEvent) { + with_context(move |context| input::process(&mut context.input, &context.browser, &event)); } pub(crate) fn update_view_info(&self, update: ViewInfoUpdate) { @@ -276,6 +273,7 @@ impl CefContextHandle { struct BrowserContext { delegate: BrowserDelegate, browser: Browser, + input: input::InputState, view_info_sender: Sender, _instance_dir: TempDir, } diff --git a/desktop/ui/src/input.rs b/desktop/ui/src/input.rs index a98b72cc48..bfc52664ba 100644 --- a/desktop/ui/src/input.rs +++ b/desktop/ui/src/input.rs @@ -1,251 +1,235 @@ -use cef::sys::{cef_key_event_type_t, cef_mouse_button_type_t}; -use cef::{Browser, ImplBrowser, ImplBrowserHost, KeyEvent, MouseEvent}; -use winit::event::{ButtonSource, ElementState, MouseButton, MouseScrollDelta, WindowEvent}; +pub(crate) mod event; +pub(crate) use event::InputEvent; mod keymap; use keymap::{ToCharRepresentation, ToNativeKeycode, ToVKBits}; -mod state; -pub(crate) use state::{CefModifiers, InputState}; +use cef::sys::{cef_event_flags_t, cef_key_event_type_t, cef_mouse_button_type_t}; +use cef::{Browser, ImplBrowser, ImplBrowserHost, KeyEvent, MouseEvent}; +use winit::dpi::PhysicalPosition; +use winit::keyboard::{Key, KeyLocation, NamedKey}; use super::consts::{PINCH_ZOOM_SPEED, SCROLL_LINE_HEIGHT, SCROLL_LINE_WIDTH, SCROLL_SPEED_X, SCROLL_SPEED_Y}; +use event::{InputEventKind, KeyAction, Modifiers, MouseButton, PointerAction}; -/// A window input translated into the plain data CEF consumes β€” no winit types, so it can -/// be applied to a browser living in another process. -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub(crate) enum InputEvent { - MouseMove { data: MouseData, leave: bool }, - MouseClick { data: MouseData, button: MouseButtonKind, up: bool, click_count: i32 }, - MouseWheel { data: MouseData, delta_x: i32, delta_y: i32 }, - Key(KeyData), +#[derive(Default)] +pub(crate) struct InputState { + position: PhysicalPosition, + buttons: ButtonStates, } -#[derive(Clone, Copy, Debug, serde::Serialize, serde::Deserialize)] -pub(crate) struct MouseData { - pub(crate) x: i32, - pub(crate) y: i32, - pub(crate) modifiers: u32, +impl InputState { + fn pointer_move(&mut self, position: PhysicalPosition) -> bool { + let moved = (position.x as i32, position.y as i32) != (self.position.x as i32, self.position.y as i32); + self.position = position; + moved + } } -#[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] -pub(crate) enum MouseButtonKind { - Left, - Right, - Middle, -} - -#[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] -pub(crate) enum KeyEventKind { - RawKeyDown, - KeyUp, - Char, -} - -#[derive(Clone, Copy, Debug, serde::Serialize, serde::Deserialize)] -pub(crate) struct KeyData { - pub(crate) kind: KeyEventKind, - pub(crate) modifiers: u32, - pub(crate) windows_key_code: i32, - pub(crate) native_key_code: i32, - pub(crate) character: u16, - pub(crate) unmodified_character: u16, -} - -/// Turns a winit event into zero or more [`InputEvent`]s, updating the tracked input state -/// (cursor position, click counting, modifiers) along the way. -pub(crate) fn translate(input_state: &mut InputState, event: &WindowEvent) -> Vec { - match event { - WindowEvent::PointerMoved { position, .. } => { - if !input_state.cursor_move(position) { - return Vec::new(); - } - vec![InputEvent::MouseMove { - data: input_state.mouse_data(), - leave: false, - }] - } - WindowEvent::PointerEntered { position, .. } => { - let _ = input_state.cursor_move(position); - vec![InputEvent::MouseMove { - data: input_state.mouse_data(), - leave: false, - }] - } - WindowEvent::PointerLeft { position, .. } => { - if let Some(position) = position { - let _ = input_state.cursor_move(position); - } - vec![InputEvent::MouseMove { - data: input_state.mouse_data(), - leave: true, - }] - } - WindowEvent::PointerButton { state, button, position, .. } => { - let mouse_button = match button { - ButtonSource::Mouse(mouse_button) => mouse_button, - _ => { - return Vec::new(); // TODO: Handle touch input +pub(crate) fn process(state: &mut InputState, browser: &Browser, event: &InputEvent) { + let Some(host) = browser.host() else { return }; + match &event.kind { + InputEventKind::Pointer { position, action } => { + let position = position.unwrap_or(state.position); + match *action { + PointerAction::Move => { + if !state.pointer_move(position) { + return; + } + let flags = event_flags(&event.modifiers, &state.buttons); + host.send_mouse_move_event(Some(&mouse_event(position, flags)), 0); } - }; + PointerAction::Enter => { + state.pointer_move(position); + let flags = event_flags(&event.modifiers, &state.buttons); + host.send_mouse_move_event(Some(&mouse_event(position, flags)), 0); + } + PointerAction::Exit => { + state.pointer_move(position); + let flags = event_flags(&event.modifiers, &state.buttons); + host.send_mouse_move_event(Some(&mouse_event(position, flags)), 1); + } + PointerAction::Press { button, count } | PointerAction::Release { button, count } => { + state.pointer_move(position); + let cef_button = match button { + MouseButton::Left => cef_mouse_button_type_t::MBT_LEFT, + MouseButton::Right => cef_mouse_button_type_t::MBT_RIGHT, + MouseButton::Middle => cef_mouse_button_type_t::MBT_MIDDLE, + MouseButton::Unknown => return, + }; + let up = matches!(action, PointerAction::Release { .. }); + state.buttons.update(button, !up); - let _ = input_state.cursor_move(position); - let click_count = input_state.mouse_input(mouse_button, state).into(); - let up = matches!(state, ElementState::Released); - let button = match mouse_button { - MouseButton::Left => MouseButtonKind::Left, - MouseButton::Right => MouseButtonKind::Right, - MouseButton::Middle => MouseButtonKind::Middle, - _ => return Vec::new(), - }; + // CEF only understands single, double and triple clicks; further clicks alternate between double and triple. + let count = match count { + 0 | 1 => 1, + count if count % 2 == 0 => 2, + _ => 3, + }; - vec![InputEvent::MouseClick { - data: input_state.mouse_data(), - button, - up, - click_count, - }] + let flags = event_flags(&event.modifiers, &state.buttons); + host.send_mouse_click_event(Some(&mouse_event(position, flags)), cef::MouseButtonType::from(cef_button), up as i32, count); + } + PointerAction::ScrollLines { x, y } => { + let flags = event_flags(&event.modifiers, &state.buttons); + let delta_x = (x * SCROLL_LINE_WIDTH * SCROLL_SPEED_X) as i32; + let delta_y = (y * SCROLL_LINE_HEIGHT * SCROLL_SPEED_Y) as i32; + host.send_mouse_wheel_event(Some(&mouse_event(position, flags)), delta_x, delta_y); + } + PointerAction::ScrollPixels { x, y } => { + let flags = event_flags(&event.modifiers, &state.buttons) | PRECISION_SCROLLING_DELTA; + host.send_mouse_wheel_event(Some(&mouse_event(position, flags)), (x * SCROLL_SPEED_X) as i32, (y * SCROLL_SPEED_Y) as i32); + } + PointerAction::Zoom(delta) => { + if !delta.is_normal() { + return; + } + let flags = CONTROL_DOWN | PRECISION_SCROLLING_DELTA; + host.send_mouse_wheel_event(Some(&mouse_event(position, flags)), 0, (delta * PINCH_ZOOM_SPEED).round() as i32); + } + } } - WindowEvent::MouseWheel { delta, phase: _, device_id: _, .. } => { - let (mut delta_x, mut delta_y) = match delta { - MouseScrollDelta::LineDelta(x, y) => (x * SCROLL_LINE_WIDTH as f32, y * SCROLL_LINE_HEIGHT as f32), - MouseScrollDelta::PixelDelta(physical_position) => (physical_position.x as f32, physical_position.y as f32), - }; - delta_x *= SCROLL_SPEED_X; - delta_y *= SCROLL_SPEED_Y; + InputEventKind::Key { + key, + key_without_modifiers, + physical_key, + location, + text, + action, + } => { + let mut flags = event_flags(&event.modifiers, &state.buttons); - vec![InputEvent::MouseWheel { - data: input_state.mouse_data(), - delta_x: delta_x as i32, - delta_y: delta_y as i32, - }] - } - WindowEvent::ModifiersChanged(modifiers) => { - input_state.modifiers_changed(&modifiers.state()); - Vec::new() - } - WindowEvent::KeyboardInput { device_id: _, event, is_synthetic: _ } => { - input_state.modifiers_apply_key_event(&event.logical_key, &event.state); - - let mut kind = match (event.state, &event.logical_key) { - (ElementState::Pressed, winit::keyboard::Key::Character(_)) => KeyEventKind::Char, - (ElementState::Pressed, _) => KeyEventKind::RawKeyDown, - (ElementState::Released, _) => KeyEventKind::KeyUp, - }; - - let modifiers = input_state.cef_modifiers(&event.location, event.repeat).into(); - - let windows_key_code = match &event.logical_key { - winit::keyboard::Key::Named(named) => named.to_vk_bits(), - winit::keyboard::Key::Character(char) => char.chars().next().unwrap_or_default().to_vk_bits(), + let own_flag = match key { + Key::Named(NamedKey::Shift) => SHIFT_DOWN, + Key::Named(NamedKey::Control) => CONTROL_DOWN, + Key::Named(NamedKey::Alt) => ALT_DOWN, + Key::Named(NamedKey::AltGraph) => ALTGR_DOWN, + Key::Named(NamedKey::Meta) => COMMAND_DOWN, _ => 0, }; + match action { + KeyAction::Press | KeyAction::Repeat => flags |= own_flag, + KeyAction::Release => flags &= !own_flag, + } - let native_key_code = event.physical_key.to_native_keycode(); + flags |= match location { + KeyLocation::Left => IS_LEFT, + KeyLocation::Right => IS_RIGHT, + KeyLocation::Numpad => IS_KEY_PAD, + KeyLocation::Standard => 0, + }; + if *action == KeyAction::Repeat { + flags |= IS_REPEAT; + } - let char_representation = event.logical_key.to_char_representation(); + let windows_key_code = match key { + Key::Named(named) => named.to_vk_bits(), + Key::Character(char) => char.chars().next().unwrap_or_default().to_vk_bits(), + _ => 0, + }; + let native_key_code = physical_key.to_native_keycode(); + + let char_representation = key.to_char_representation(); #[allow(unused_mut)] let mut character = char_representation as u16; - - if event.state == ElementState::Pressed && character != 0 { - kind = KeyEventKind::Char; - } - - let unmodified_character = event.key_without_modifiers.to_char_representation() as u16; + let unmodified_character = key_without_modifiers.to_char_representation() as u16; #[cfg(target_os = "macos")] // See https://www.magpcss.org/ceforum/viewtopic.php?start=10&t=11650 - if character == 0 && unmodified_character == 0 && event.text_with_all_modifiers.is_some() { + if character == 0 && unmodified_character == 0 && text.is_some() { character = 1; } + #[cfg(not(target_os = "macos"))] + let _ = text; - let key = KeyData { - kind, - modifiers, + let key_event = |kind: cef_key_event_type_t, windows_key_code: i32| KeyEvent { + type_: kind.into(), + modifiers: flags, windows_key_code, native_key_code, character, unmodified_character, - }; - - if kind == KeyEventKind::Char { - // CEF expects a raw key-down before the character event it produces. - vec![ - InputEvent::Key(KeyData { - kind: KeyEventKind::RawKeyDown, - ..key - }), - InputEvent::Key(KeyData { - windows_key_code: char_representation as i32, - ..key - }), - ] - } else { - vec![InputEvent::Key(key)] - } - } - WindowEvent::PinchGesture { delta, .. } => { - if !delta.is_normal() { - return Vec::new(); - } - - let data = MouseData { - modifiers: CefModifiers::PINCH_MODIFIERS.into(), - ..input_state.mouse_data() - }; - - vec![InputEvent::MouseWheel { - data, - delta_x: 0, - delta_y: (delta * PINCH_ZOOM_SPEED).round() as i32, - }] - } - _ => Vec::new(), - } -} - -/// Sends a translated [`InputEvent`] to the browser. Must run on the thread owning the browser. -pub(crate) fn apply(browser: &Browser, event: &InputEvent) { - let Some(host) = browser.host() else { return }; - match event { - InputEvent::MouseMove { data, leave } => { - host.send_mouse_move_event(Some(&data.into()), *leave as i32); - } - InputEvent::MouseClick { data, button, up, click_count } => { - let cef_button = cef::MouseButtonType::from(match button { - MouseButtonKind::Left => cef_mouse_button_type_t::MBT_LEFT, - MouseButtonKind::Right => cef_mouse_button_type_t::MBT_RIGHT, - MouseButtonKind::Middle => cef_mouse_button_type_t::MBT_MIDDLE, - }); - host.send_mouse_click_event(Some(&data.into()), cef_button, *up as i32, *click_count); - } - InputEvent::MouseWheel { data, delta_x, delta_y } => { - host.send_mouse_wheel_event(Some(&data.into()), *delta_x, *delta_y); - } - InputEvent::Key(key) => { - let key_event = KeyEvent { - type_: match key.kind { - KeyEventKind::RawKeyDown => cef_key_event_type_t::KEYEVENT_RAWKEYDOWN, - KeyEventKind::KeyUp => cef_key_event_type_t::KEYEVENT_KEYUP, - KeyEventKind::Char => cef_key_event_type_t::KEYEVENT_CHAR, - } - .into(), - modifiers: key.modifiers, - windows_key_code: key.windows_key_code, - native_key_code: key.native_key_code, - character: key.character, - unmodified_character: key.unmodified_character, ..Default::default() }; - host.send_key_event(Some(&key_event)); + + match action { + KeyAction::Press | KeyAction::Repeat if char_representation != '\0' => { + host.send_key_event(Some(&key_event(cef_key_event_type_t::KEYEVENT_RAWKEYDOWN, windows_key_code))); + host.send_key_event(Some(&key_event(cef_key_event_type_t::KEYEVENT_CHAR, char_representation as i32))); + } + KeyAction::Press | KeyAction::Repeat => { + host.send_key_event(Some(&key_event(cef_key_event_type_t::KEYEVENT_RAWKEYDOWN, windows_key_code))); + } + KeyAction::Release => { + host.send_key_event(Some(&key_event(cef_key_event_type_t::KEYEVENT_KEYUP, windows_key_code))); + } + } } } } -impl From<&MouseData> for MouseEvent { - fn from(data: &MouseData) -> Self { - MouseEvent { - x: data.x, - y: data.y, - modifiers: data.modifiers, +#[derive(Default)] +struct ButtonStates { + left: bool, + right: bool, + middle: bool, +} + +impl ButtonStates { + fn update(&mut self, button: MouseButton, held: bool) { + match button { + MouseButton::Left => self.left = held, + MouseButton::Right => self.right = held, + MouseButton::Middle => self.middle = held, + MouseButton::Unknown => {} } } } + +fn mouse_event(position: PhysicalPosition, flags: u32) -> MouseEvent { + MouseEvent { + x: position.x as i32, + y: position.y as i32, + modifiers: flags, + } +} + +fn event_flags(modifiers: &Modifiers, buttons: &ButtonStates) -> u32 { + let bit = |condition: bool, flag: u32| if condition { flag } else { 0 }; + bit(modifiers.shift, SHIFT_DOWN) + | bit(modifiers.control, CONTROL_DOWN) + | bit(modifiers.alt, ALT_DOWN) + | bit(modifiers.alt_graph, ALTGR_DOWN) + | bit(modifiers.meta, COMMAND_DOWN) + | bit(modifiers.caps_lock, CAPS_LOCK_ON) + | bit(modifiers.num_lock, NUM_LOCK_ON) + | bit(buttons.left, LEFT_MOUSE_BUTTON) + | bit(buttons.right, RIGHT_MOUSE_BUTTON) + | bit(buttons.middle, MIDDLE_MOUSE_BUTTON) +} + +const fn flag(flag: cef_event_flags_t) -> u32 { + #[cfg(not(target_os = "windows"))] + { + flag.0 + } + #[cfg(target_os = "windows")] + { + flag.0 as u32 + } +} + +const SHIFT_DOWN: u32 = flag(cef_event_flags_t::EVENTFLAG_SHIFT_DOWN); +const CONTROL_DOWN: u32 = flag(cef_event_flags_t::EVENTFLAG_CONTROL_DOWN); +const ALT_DOWN: u32 = flag(cef_event_flags_t::EVENTFLAG_ALT_DOWN); +const ALTGR_DOWN: u32 = flag(cef_event_flags_t::EVENTFLAG_ALTGR_DOWN); +const COMMAND_DOWN: u32 = flag(cef_event_flags_t::EVENTFLAG_COMMAND_DOWN); +const CAPS_LOCK_ON: u32 = flag(cef_event_flags_t::EVENTFLAG_CAPS_LOCK_ON); +const NUM_LOCK_ON: u32 = flag(cef_event_flags_t::EVENTFLAG_NUM_LOCK_ON); +const LEFT_MOUSE_BUTTON: u32 = flag(cef_event_flags_t::EVENTFLAG_LEFT_MOUSE_BUTTON); +const MIDDLE_MOUSE_BUTTON: u32 = flag(cef_event_flags_t::EVENTFLAG_MIDDLE_MOUSE_BUTTON); +const RIGHT_MOUSE_BUTTON: u32 = flag(cef_event_flags_t::EVENTFLAG_RIGHT_MOUSE_BUTTON); +const IS_LEFT: u32 = flag(cef_event_flags_t::EVENTFLAG_IS_LEFT); +const IS_RIGHT: u32 = flag(cef_event_flags_t::EVENTFLAG_IS_RIGHT); +const IS_KEY_PAD: u32 = flag(cef_event_flags_t::EVENTFLAG_IS_KEY_PAD); +const IS_REPEAT: u32 = flag(cef_event_flags_t::EVENTFLAG_IS_REPEAT); +const PRECISION_SCROLLING_DELTA: u32 = flag(cef_event_flags_t::EVENTFLAG_PRECISION_SCROLLING_DELTA); diff --git a/desktop/ui/src/input/event.rs b/desktop/ui/src/input/event.rs new file mode 100644 index 0000000000..2c985baef7 --- /dev/null +++ b/desktop/ui/src/input/event.rs @@ -0,0 +1,245 @@ +use winit::dpi::PhysicalPosition; +use winit::event::{ElementState, KeyEvent}; +use winit::keyboard::{Key, KeyLocation, ModifiersState, PhysicalKey, SmolStr}; + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct InputEvent { + pub(crate) kind: InputEventKind, + pub(crate) modifiers: Modifiers, +} + +impl InputEvent { + pub fn pointer() -> PointerInputEventBuilder { + PointerInputEventBuilder { position: UnknownPosition } + } + + pub fn key(event: &KeyEvent) -> InputEventBuilder { + let action = match (event.state, event.repeat) { + (ElementState::Pressed, false) => KeyAction::Press, + (ElementState::Pressed, true) => KeyAction::Repeat, + (ElementState::Released, _) => KeyAction::Release, + }; + InputEventBuilder::new(InputEventKind::Key { + key: event.logical_key.clone(), + key_without_modifiers: event.key_without_modifiers.clone(), + physical_key: event.physical_key, + location: event.location, + text: event.text_with_all_modifiers.clone(), + action, + }) + } +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum MouseButton { + Left, + Right, + Middle, + Unknown, +} + +impl From for MouseButton { + fn from(button: winit::event::MouseButton) -> Self { + match button { + winit::event::MouseButton::Left => Self::Left, + winit::event::MouseButton::Right => Self::Right, + winit::event::MouseButton::Middle => Self::Middle, + _ => Self::Unknown, + } + } +} + +impl From for MouseButton { + fn from(button: winit::event::ButtonSource) -> Self { + button.mouse_button().map_or(Self::Unknown, Self::from) + } +} + +#[must_use] +#[derive(Clone, Debug)] +pub struct PointerInputEventBuilder

{ + position: P, +} + +impl PointerInputEventBuilder { + pub fn position(self, position: PhysicalPosition) -> PointerInputEventBuilder> { + PointerInputEventBuilder { position } + } +} + +impl PointerInputEventBuilder> { + pub fn moved(self) -> InputEventBuilder { + self.finish(PointerAction::Move) + } + + pub fn entered(self) -> InputEventBuilder { + self.finish(PointerAction::Enter) + } +} + +impl PointerInputEventBuilder

{ + pub fn exited(self) -> InputEventBuilder { + self.finish(PointerAction::Exit) + } + + pub fn pressed(self, button: impl Into, count: u32) -> InputEventBuilder { + self.finish(PointerAction::Press { button: button.into(), count }) + } + + pub fn released(self, button: impl Into, count: u32) -> InputEventBuilder { + self.finish(PointerAction::Release { button: button.into(), count }) + } + + pub fn scrolled_lines(self, x: f64, y: f64) -> InputEventBuilder { + self.finish(PointerAction::ScrollLines { x, y }) + } + + pub fn scrolled_pixels(self, x: f64, y: f64) -> InputEventBuilder { + self.finish(PointerAction::ScrollPixels { x, y }) + } + + pub fn zoomed(self, delta: f64) -> InputEventBuilder { + self.finish(PointerAction::Zoom(delta)) + } + + fn finish(self, action: PointerAction) -> InputEventBuilder { + InputEventBuilder::new(InputEventKind::Pointer { + position: self.position.position(), + action, + }) + } +} + +#[must_use] +#[derive(Clone, Debug)] +pub struct InputEventBuilder { + kind: InputEventKind, + modifiers: Modifiers, +} + +impl InputEventBuilder { + fn new(kind: InputEventKind) -> Self { + Self { + kind, + modifiers: Modifiers::default(), + } + } + + pub fn shift(mut self, on: bool) -> Self { + self.modifiers.shift = on; + self + } + + pub fn control(mut self, on: bool) -> Self { + self.modifiers.control = on; + self + } + + pub fn alt(mut self, on: bool) -> Self { + self.modifiers.alt = on; + self + } + + pub fn alt_graph(mut self, on: bool) -> Self { + self.modifiers.alt_graph = on; + self + } + + pub fn meta(mut self, on: bool) -> Self { + self.modifiers.meta = on; + self + } + + pub fn caps_lock(mut self, on: bool) -> Self { + self.modifiers.caps_lock = on; + self + } + + pub fn num_lock(mut self, on: bool) -> Self { + self.modifiers.num_lock = on; + self + } + + pub fn modifiers(mut self, modifiers: ModifiersState) -> Self { + self.modifiers.shift = modifiers.shift_key(); + self.modifiers.control = modifiers.control_key(); + self.modifiers.alt = modifiers.alt_key(); + self.modifiers.meta = modifiers.meta_key(); + self + } + + pub fn build(self) -> InputEvent { + InputEvent { + kind: self.kind, + modifiers: self.modifiers, + } + } +} + +#[expect(private_bounds)] +pub trait PointerPosition: OptionalPosition {} +impl PointerPosition for UnknownPosition {} +impl PointerPosition for PhysicalPosition {} + +#[derive(Clone, Copy, Debug)] +pub struct UnknownPosition; + +trait OptionalPosition { + fn position(self) -> Option>; +} +impl OptionalPosition for UnknownPosition { + fn position(self) -> Option> { + None + } +} +impl OptionalPosition for PhysicalPosition { + fn position(self) -> Option> { + Some(self) + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub(crate) enum InputEventKind { + Pointer { + position: Option>, + action: PointerAction, + }, + Key { + key: Key, + key_without_modifiers: Key, + physical_key: PhysicalKey, + location: KeyLocation, + text: Option, + action: KeyAction, + }, +} + +#[derive(Clone, Copy, Debug, serde::Serialize, serde::Deserialize)] +pub(crate) enum PointerAction { + Move, + Enter, + Exit, + Press { button: MouseButton, count: u32 }, + Release { button: MouseButton, count: u32 }, + ScrollLines { x: f64, y: f64 }, + ScrollPixels { x: f64, y: f64 }, + Zoom(f64), +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub(crate) enum KeyAction { + Press, + Repeat, + Release, +} + +#[derive(Clone, Copy, Debug, Default, serde::Serialize, serde::Deserialize)] +pub(crate) struct Modifiers { + pub(crate) shift: bool, + pub(crate) control: bool, + pub(crate) alt: bool, + pub(crate) alt_graph: bool, + pub(crate) meta: bool, + pub(crate) caps_lock: bool, + pub(crate) num_lock: bool, +} diff --git a/desktop/ui/src/input/state.rs b/desktop/ui/src/input/state.rs deleted file mode 100644 index aceedd6872..0000000000 --- a/desktop/ui/src/input/state.rs +++ /dev/null @@ -1,256 +0,0 @@ -use cef::sys::cef_event_flags_t; -use std::time::Instant; -use winit::dpi::PhysicalPosition; -use winit::event::{ElementState, MouseButton}; -use winit::keyboard::{Key, KeyLocation, ModifiersState, NamedKey}; - -use super::MouseData; -use crate::consts::{MULTICLICK_ALLOWED_TRAVEL, MULTICLICK_TIMEOUT}; - -#[derive(Default)] -pub(crate) struct InputState { - modifiers: ModifiersState, - mouse_position: MousePosition, - mouse_state: MouseState, - mouse_click_tracker: ClickTracker, -} -impl InputState { - pub(crate) fn modifiers_changed(&mut self, modifiers: &ModifiersState) { - self.modifiers = *modifiers; - } - - pub(crate) fn modifiers_apply_key_event(&mut self, key: &Key, state: &ElementState) { - let bits = match key { - Key::Named(NamedKey::Shift) => ModifiersState::SHIFT, - Key::Named(NamedKey::Control) => ModifiersState::CONTROL, - Key::Named(NamedKey::Alt) => ModifiersState::ALT, - Key::Named(NamedKey::Meta) => ModifiersState::META, - _ => return, - }; - let is_pressed = matches!(state, ElementState::Pressed); - self.modifiers.set(bits, is_pressed); - } - - pub(crate) fn cursor_move(&mut self, position: &PhysicalPosition) -> bool { - let new = position.into(); - if self.mouse_position == new { - return false; - } - self.mouse_position = new; - true - } - - pub(crate) fn mouse_input(&mut self, button: &MouseButton, state: &ElementState) -> ClickCount { - self.mouse_state.update(button, state); - self.mouse_click_tracker.input(button, state, self.mouse_position) - } - - pub(crate) fn cef_modifiers(&self, location: &KeyLocation, is_repeat: bool) -> CefModifiers { - CefModifiers::new(self, location, is_repeat) - } - - pub(crate) fn cef_mouse_modifiers(&self) -> CefModifiers { - self.cef_modifiers(&KeyLocation::Standard, false) - } - - pub(crate) fn mouse_data(&self) -> MouseData { - MouseData { - x: self.mouse_position.x, - y: self.mouse_position.y, - modifiers: self.cef_mouse_modifiers().into(), - } - } -} - -#[derive(Default, Clone, Copy, Eq, PartialEq)] -pub(crate) struct MousePosition { - x: i32, - y: i32, -} -impl From<&PhysicalPosition> for MousePosition { - fn from(position: &PhysicalPosition) -> Self { - Self { - x: position.x as i32, - y: position.y as i32, - } - } -} - -#[derive(Default, Clone)] -pub(crate) struct MouseState { - left: bool, - right: bool, - middle: bool, -} -impl MouseState { - pub(crate) fn update(&mut self, button: &MouseButton, state: &ElementState) { - match state { - ElementState::Pressed => match button { - MouseButton::Left => self.left = true, - MouseButton::Right => self.right = true, - MouseButton::Middle => self.middle = true, - _ => {} - }, - ElementState::Released => match button { - MouseButton::Left => self.left = false, - MouseButton::Right => self.right = false, - MouseButton::Middle => self.middle = false, - _ => {} - }, - } - } -} - -#[derive(Default)] -struct ClickTracker { - left: Option, - middle: Option, - right: Option, -} -impl ClickTracker { - fn input(&mut self, button: &MouseButton, state: &ElementState, position: MousePosition) -> ClickCount { - let record = match button { - MouseButton::Left => &mut self.left, - MouseButton::Right => &mut self.right, - MouseButton::Middle => &mut self.middle, - _ => return ClickCount::Single, - }; - - let Some(record) = record else { - *record = Some(ClickRecord { - down_position: position, - up_position: position, - ..Default::default() - }); - return ClickCount::Single; - }; - - let now = Instant::now(); - let within_time = now.saturating_duration_since(record.time) <= MULTICLICK_TIMEOUT; - - let (prev_count, prev_position) = match state { - ElementState::Pressed => (record.down_count, record.down_position), - ElementState::Released => (record.up_count, record.up_position), - }; - - let dx = position.x.abs_diff(prev_position.x) as usize; - let dy = position.y.abs_diff(prev_position.y) as usize; - let within_dist = dx <= MULTICLICK_ALLOWED_TRAVEL && dy <= MULTICLICK_ALLOWED_TRAVEL; - - let count = match (prev_count, within_time, within_dist) { - (ClickCount::Single, true, true) => ClickCount::Double, - (ClickCount::Double, true, true) => ClickCount::Triple, - (ClickCount::Triple, true, true) => ClickCount::Double, - _ => ClickCount::Single, - }; - - record.time = now; - - match state { - ElementState::Pressed => { - record.down_position = position; - record.down_count = count; - } - ElementState::Released => { - record.up_position = position; - record.up_count = count; - } - } - - count - } -} - -#[derive(Clone, Copy, PartialEq, Default)] -pub(crate) enum ClickCount { - #[default] - Single, - Double, - Triple, -} -impl From for i32 { - fn from(count: ClickCount) -> i32 { - match count { - ClickCount::Single => 1, - ClickCount::Double => 2, - ClickCount::Triple => 3, - } - } -} - -#[derive(Clone, Copy)] -struct ClickRecord { - time: Instant, - down_position: MousePosition, - up_position: MousePosition, - down_count: ClickCount, - up_count: ClickCount, -} - -impl Default for ClickRecord { - fn default() -> Self { - Self { - time: Instant::now(), - down_position: Default::default(), - up_position: Default::default(), - down_count: Default::default(), - up_count: Default::default(), - } - } -} - -pub(crate) struct CefModifiers(cef_event_flags_t); -impl CefModifiers { - fn new(input_state: &InputState, location: &KeyLocation, is_repeat: bool) -> Self { - let mut inner = cef_event_flags_t::EVENTFLAG_NONE; - - if input_state.modifiers.shift_key() { - inner |= cef_event_flags_t::EVENTFLAG_SHIFT_DOWN; - } - if input_state.modifiers.control_key() { - inner |= cef_event_flags_t::EVENTFLAG_CONTROL_DOWN; - } - if input_state.modifiers.alt_key() { - inner |= cef_event_flags_t::EVENTFLAG_ALT_DOWN; - } - if input_state.modifiers.meta_key() { - inner |= cef_event_flags_t::EVENTFLAG_COMMAND_DOWN; - } - - if input_state.mouse_state.left { - inner |= cef_event_flags_t::EVENTFLAG_LEFT_MOUSE_BUTTON; - } - if input_state.mouse_state.right { - inner |= cef_event_flags_t::EVENTFLAG_RIGHT_MOUSE_BUTTON; - } - if input_state.mouse_state.middle { - inner |= cef_event_flags_t::EVENTFLAG_MIDDLE_MOUSE_BUTTON; - } - - if is_repeat { - inner |= cef_event_flags_t::EVENTFLAG_IS_REPEAT; - } - - inner |= match location { - KeyLocation::Left => cef_event_flags_t::EVENTFLAG_IS_LEFT, - KeyLocation::Right => cef_event_flags_t::EVENTFLAG_IS_RIGHT, - KeyLocation::Numpad => cef_event_flags_t::EVENTFLAG_IS_KEY_PAD, - KeyLocation::Standard => cef_event_flags_t::EVENTFLAG_NONE, - }; - - Self(inner) - } - - pub(super) const PINCH_MODIFIERS: Self = Self(cef_event_flags_t( - cef_event_flags_t::EVENTFLAG_CONTROL_DOWN.0 | cef_event_flags_t::EVENTFLAG_PRECISION_SCROLLING_DELTA.0, - )); -} - -impl From for u32 { - fn from(val: CefModifiers) -> Self { - #[cfg(not(target_os = "windows"))] - return val.0.0; - #[cfg(target_os = "windows")] - return val.0.0 as u32; - } -} diff --git a/desktop/ui/src/lib.rs b/desktop/ui/src/lib.rs index 5b82cd31f1..13968b5263 100644 --- a/desktop/ui/src/lib.rs +++ b/desktop/ui/src/lib.rs @@ -22,6 +22,9 @@ mod resources; mod utility; mod view; +pub use consts::{MULTICLICK_ALLOWED_TRAVEL, MULTICLICK_TIMEOUT, PINCH_ZOOM_SPEED, SCROLL_LINE_HEIGHT, SCROLL_LINE_WIDTH, SCROLL_SPEED_X, SCROLL_SPEED_Y}; +pub use input::event::{InputEvent, InputEventBuilder, MouseButton, PointerInputEventBuilder, PointerPosition, UnknownPosition}; + pub struct UiContext { inner: S::ContextData, } @@ -67,7 +70,6 @@ impl UiContext { Ok(UiInstance { inner: Arc::new(UiInstanceInner { host: self.inner.clone(), - input: Mutex::new(input::InputState::default()), events: Mutex::new(events), queue, shutdown_complete: Mutex::new(shutdown_complete), @@ -141,7 +143,6 @@ pub struct UiInstance { pub(crate) struct UiInstanceInner { host: Arc, - input: Mutex, events: Mutex>, queue: events::EventQueue, shutdown_complete: Mutex>, @@ -152,18 +153,7 @@ impl UiInstance { pub fn send(&self, command: UiCommand) { let shared = &self.inner; match command { - UiCommand::Input(event) => { - let events = { - let Ok(mut input) = shared.input.lock() else { - tracing::error!("Failed to lock the input state"); - return; - }; - input::translate(&mut input, &event) - }; - if !events.is_empty() { - shared.host.send(HostControlMessage::Input(events)); - } - } + UiCommand::Input(event) => shared.host.send(HostControlMessage::Input(event)), UiCommand::Resized { width, height } => shared.host.send(HostControlMessage::UpdateViewInfo(view::ViewInfoUpdate::Size { width, height })), UiCommand::ScaleChanged(scale) => shared.host.send(HostControlMessage::UpdateViewInfo(view::ViewInfoUpdate::Scale(scale))), UiCommand::Refresh => shared.host.send(HostControlMessage::RefreshViewInfo), @@ -220,7 +210,7 @@ impl Drop for UiInstanceInner { #[derive(Debug)] pub enum UiCommand { - Input(winit::event::WindowEvent), + Input(InputEvent), Resized { width: u32, height: u32 }, ScaleChanged(f64), Refresh, diff --git a/desktop/ui/src/remote/host.rs b/desktop/ui/src/remote/host.rs index cb3d0c26b7..7db52fdd65 100644 --- a/desktop/ui/src/remote/host.rs +++ b/desktop/ui/src/remote/host.rs @@ -99,7 +99,7 @@ enum ControlOutcome { fn control_loop(receiver: &IpcReceiver, context: &CefContextHandle, sequence: &SequenceState) -> ControlOutcome { loop { match receiver.recv() { - Ok(HostControlMessage::Input(events)) => context.apply_input(events), + Ok(HostControlMessage::Input(event)) => context.process_input(event), Ok(HostControlMessage::UpdateViewInfo(update)) => context.update_view_info(update), Ok(HostControlMessage::RefreshViewInfo) => context.refresh_view_info(), Ok(HostControlMessage::SendWebMessage(message)) => context.send_web_message(message), diff --git a/desktop/ui/src/remote/messages.rs b/desktop/ui/src/remote/messages.rs index 79e12b966e..5afa339c4a 100644 --- a/desktop/ui/src/remote/messages.rs +++ b/desktop/ui/src/remote/messages.rs @@ -8,7 +8,7 @@ use crate::view::ViewInfoUpdate; #[derive(Serialize, Deserialize)] pub(crate) enum HostControlMessage { - Input(Vec), + Input(InputEvent), UpdateViewInfo(ViewInfoUpdate), RefreshViewInfo, SendWebMessage(Vec), diff --git a/desktop/wrapper/Cargo.toml b/desktop/wrapper/Cargo.toml index be949c8353..cae0417273 100644 --- a/desktop/wrapper/Cargo.toml +++ b/desktop/wrapper/Cargo.toml @@ -3,7 +3,7 @@ name = "graphite-desktop-wrapper" version = "0.1.0" description = "Graphite Desktop Wrapper" authors = ["Graphite Authors "] -license = "Apache-2.0" +license = "MIT OR Apache-2.0" repository = "" edition = "2024" rust-version = "1.87" diff --git a/desktop/wrapper/src/intercept_frontend_message.rs b/desktop/wrapper/src/intercept_frontend_message.rs index b82b837929..6d13e4bc4c 100644 --- a/desktop/wrapper/src/intercept_frontend_message.rs +++ b/desktop/wrapper/src/intercept_frontend_message.rs @@ -3,25 +3,25 @@ use graphite_editor::messages::layout::utility_types::layout_widget::LayoutTarge use graphite_editor::messages::prelude::FrontendMessage; use super::DesktopWrapperMessageDispatcher; -use super::messages::{DesktopFrontendMessage, FileFilter, OpenFileDialogContext, SaveFileDialogContext}; +use super::messages::{DesktopFrontendMessage, OpenFileDialogContext, SaveFileDialogContext}; pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageDispatcher, message: FrontendMessage) -> Option { match message { FrontendMessage::RenderOverlays { context } => { dispatcher.respond(DesktopFrontendMessage::UpdateOverlays(context.take_scene())); } - FrontendMessage::TriggerOpen => { + FrontendMessage::TriggerOpen { filters } => { dispatcher.respond(DesktopFrontendMessage::OpenFileDialog { title: "Open Document".to_string(), - filters: vec![], + filters, multiple: true, context: OpenFileDialogContext::Open, }); } - FrontendMessage::TriggerImport => { + FrontendMessage::TriggerImport { filters } => { dispatcher.respond(DesktopFrontendMessage::OpenFileDialog { title: "Import File".to_string(), - filters: vec![], + filters, multiple: false, context: OpenFileDialogContext::Import, }); @@ -31,32 +31,29 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD name, path, folder, + filters, content, } => { let content = content.into_vec(); if let Some(path) = path { dispatcher.respond(DesktopFrontendMessage::WriteFile { path, content }); } else { - let extension = std::path::Path::new(&name).extension().and_then(|extension| extension.to_str()).unwrap_or("*").to_string(); dispatcher.respond(DesktopFrontendMessage::SaveFileDialog { title: "Save Document".to_string(), default_filename: name, default_folder: folder, - filters: vec![FileFilter { - name: "Graphite Document".to_string(), - extensions: vec![extension], - }], + filters, context: SaveFileDialogContext::Document { document_id, content }, }); } } - FrontendMessage::TriggerSaveFile { name, folder, content } => { + FrontendMessage::TriggerSaveFile { name, folder, filters, content } => { let content = content.into_vec(); dispatcher.respond(DesktopFrontendMessage::SaveFileDialog { title: "Save File".to_string(), default_filename: name, default_folder: folder, - filters: Vec::new(), + filters, context: SaveFileDialogContext::File { content }, }); } @@ -125,6 +122,9 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD FrontendMessage::WindowPointerLock => { dispatcher.respond(DesktopFrontendMessage::PointerLock); } + FrontendMessage::WindowUpdateDirectInput { enabled } => { + dispatcher.respond(DesktopFrontendMessage::WindowUpdateDirectInput { enabled }); + } FrontendMessage::WindowClose => { dispatcher.respond(DesktopFrontendMessage::WindowClose); } diff --git a/desktop/wrapper/src/lib.rs b/desktop/wrapper/src/lib.rs index ff89db7636..8f586ba348 100644 --- a/desktop/wrapper/src/lib.rs +++ b/desktop/wrapper/src/lib.rs @@ -10,6 +10,7 @@ use std::sync::Arc; pub use graph_craft::application_io::resource::MmapResourceStorage; pub use graphite_editor::consts::{DOUBLE_CLICK_MILLISECONDS, FILE_EXTENSION}; +pub use wgpu_executor::Texture; pub use wgpu_executor::WgpuBackends; pub use wgpu_executor::WgpuContext; pub use wgpu_executor::WgpuContextBuilder; @@ -59,14 +60,14 @@ impl DesktopWrapper { pub async fn execute_node_graph() -> NodeGraphExecutionResult { let result = graphite_editor::node_graph_executor::run_node_graph().await; match result { - (true, texture) => NodeGraphExecutionResult::HasRun(texture.map(Into::into)), + (true, texture) => NodeGraphExecutionResult::HasRun(texture), (false, _) => NodeGraphExecutionResult::NotRun, } } } pub enum NodeGraphExecutionResult { - HasRun(Option>), + HasRun(Option), NotRun, } diff --git a/desktop/wrapper/src/messages.rs b/desktop/wrapper/src/messages.rs index 031a1cc207..0559e02f36 100644 --- a/desktop/wrapper/src/messages.rs +++ b/desktop/wrapper/src/messages.rs @@ -3,9 +3,9 @@ use std::path::PathBuf; pub(crate) use graphite_editor::messages::prelude::Message as EditorMessage; -pub use graphite_editor::messages::frontend::utility_types::{DocumentInfo, PersistedState}; -pub use graphite_editor::messages::input_mapper::utility_types::input_keyboard::{Key, ModifierKeys}; -pub use graphite_editor::messages::input_mapper::utility_types::input_mouse::{EditorMouseState as MouseState, EditorPosition as Position, MouseKeys}; +pub use graphite_editor::messages::frontend::utility_types::{DocumentInfo, FileFilter, PersistedState}; +pub use graphite_editor::messages::input_mapper::utility_types::keyboard::{Key, ModifierKeys}; +pub use graphite_editor::messages::input_mapper::utility_types::pointer::{EditorPointerState, MouseKeys, ScrollDelta}; pub use graphite_editor::messages::prelude::DocumentId; pub use graphite_editor::messages::prelude::InputPreprocessorMessage as InputMessage; pub use graphite_editor::messages::prelude::PreferencesMessageHandler as Preferences; @@ -40,6 +40,9 @@ pub enum DesktopFrontendMessage { UpdateUIScale { scale: f64, }, + WindowUpdateDirectInput { + enabled: bool, + }, UpdateOverlays(vello::Scene), PersistenceWriteDocument { id: DocumentId, @@ -100,11 +103,6 @@ pub enum DesktopWrapperMessage { LoadThirdPartyLicenses { text: String }, } -pub struct FileFilter { - pub name: String, - pub extensions: Vec, -} - #[derive(Clone, Copy)] pub enum OpenFileDialogContext { Open, diff --git a/desktop/wrapper/src/utils.rs b/desktop/wrapper/src/utils.rs index 5b60cceeaf..433ae4d3c6 100644 --- a/desktop/wrapper/src/utils.rs +++ b/desktop/wrapper/src/utils.rs @@ -3,7 +3,7 @@ pub(crate) mod menu { use base64::engine::Engine; use base64::engine::general_purpose::STANDARD as BASE64; - use graphite_editor::messages::input_mapper::utility_types::input_keyboard::{Key, LabeledKeyOrMouseMotion, LabeledShortcut}; + use graphite_editor::messages::input_mapper::utility_types::keyboard::{Key, LabeledKeyOrMouseMotion, LabeledShortcut}; use graphite_editor::messages::input_mapper::utility_types::misc::ActionShortcut; use graphite_editor::messages::layout::LayoutMessage; use graphite_editor::messages::tool::tool_messages::tool_prelude::{Layout, LayoutGroup, LayoutTarget, MenuListEntry, Widget, WidgetId, WidgetRow}; diff --git a/editor/Cargo.toml b/editor/Cargo.toml index 7db04a35b0..874a4487d3 100644 --- a/editor/Cargo.toml +++ b/editor/Cargo.toml @@ -8,7 +8,7 @@ edition = "2024" readme = "../README.md" homepage = "https://graphite.art" repository = "https://github.com/GraphiteEditor/Graphite" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [features] default = ["gpu"] @@ -44,6 +44,7 @@ tsify = { workspace = true } dyn-any = { workspace = true } num_enum = { workspace = true } usvg = { workspace = true } +simplecss = { workspace = true } once_cell = { workspace = true } web-sys = { workspace = true } vello = { workspace = true } @@ -71,3 +72,5 @@ wasm-bindgen-futures = { workspace = true } # Workspace dependencies env_logger = { workspace = true } futures = { workspace = true } +node-macro = { workspace = true } +core-types = { workspace = true } diff --git a/editor/build.rs b/editor/build.rs index 5abbb8a38a..2d35387791 100644 --- a/editor/build.rs +++ b/editor/build.rs @@ -1,7 +1,7 @@ use std::env; use std::process::Command; -const GRAPHITE_RELEASE_SERIES: &str = "Alpha 4"; +const GRAPHITE_RELEASE_SERIES: &str = "Alpha 5"; fn main() { // Instruct Cargo to rerun this build script if any of these environment variables change. diff --git a/editor/src/consts.rs b/editor/src/consts.rs index a014e8891f..9913023b56 100644 --- a/editor/src/consts.rs +++ b/editor/src/consts.rs @@ -135,7 +135,9 @@ pub const LINE_ROTATE_SNAP_ANGLE: f64 = 15.; // BRUSH TOOL pub const BRUSH_SIZE_CHANGE_KEYBOARD: f64 = 5.; -pub const DEFAULT_BRUSH_SIZE: f64 = 20.; +pub const BRUSH_SIZE_DEFAULT: f64 = 40.; +pub const BRUSH_HARDNESS_DEFAULT: f64 = 0.; +pub const BRUSH_FLOW_DEFAULT: f64 = 100.; // EYEDROPPER TOOL pub const EYEDROPPER_PREVIEW_AREA_RESOLUTION: u32 = 11; diff --git a/editor/src/dispatcher.rs b/editor/src/dispatcher.rs index f2c665648d..1dec01ac61 100644 --- a/editor/src/dispatcher.rs +++ b/editor/src/dispatcher.rs @@ -36,7 +36,7 @@ pub struct DispatcherMessageHandlers { pub(crate) portfolio_message_handler: PortfolioMessageHandler, preferences_message_handler: PreferencesMessageHandler, pub(crate) resource_storage_message_handler: ResourceStorageMessageHandler, - tool_message_handler: ToolMessageHandler, + pub(crate) tool_message_handler: ToolMessageHandler, viewport_message_handler: ViewportMessageHandler, } @@ -96,8 +96,9 @@ impl Dispatcher { s } + #[cfg(test)] pub fn with_executor(executor: crate::node_graph_executor::NodeGraphExecutor) -> Self { - let mut s = Self::default(); + let mut s = Self::new(Arc::new(graph_craft::application_io::resource::HashMapResourceStorage::new()), None); s.message_handlers.portfolio_message_handler = PortfolioMessageHandler::with_executor(executor); s } diff --git a/editor/src/messages/app_window/app_window_message.rs b/editor/src/messages/app_window/app_window_message.rs index 1a68fdc938..b6e9641a16 100644 --- a/editor/src/messages/app_window/app_window_message.rs +++ b/editor/src/messages/app_window/app_window_message.rs @@ -5,6 +5,7 @@ use crate::messages::prelude::*; pub enum AppWindowMessage { PointerLock, PointerLockMove { x: f64, y: f64 }, + DirectInput { enabled: bool }, Restart, Close, Minimize, diff --git a/editor/src/messages/app_window/app_window_message_handler.rs b/editor/src/messages/app_window/app_window_message_handler.rs index 0477bed6e7..e09ad3c19c 100644 --- a/editor/src/messages/app_window/app_window_message_handler.rs +++ b/editor/src/messages/app_window/app_window_message_handler.rs @@ -17,6 +17,12 @@ impl MessageHandler for AppWindowMessageHandler { AppWindowMessage::PointerLockMove { x, y } => { responses.add(FrontendMessage::WindowPointerLockMove { position: (x, y) }); } + AppWindowMessage::DirectInput { enabled } => { + #[cfg(not(target_family = "wasm"))] + responses.add(FrontendMessage::WindowUpdateDirectInput { enabled }); + #[cfg(target_family = "wasm")] + let _ = enabled; + } AppWindowMessage::Close => { #[cfg(not(target_family = "wasm"))] responses.add(FrontendMessage::WindowClose); diff --git a/editor/src/messages/broadcast/event/event_message.rs b/editor/src/messages/broadcast/event/event_message.rs index b2c77111d3..e2abb38c6b 100644 --- a/editor/src/messages/broadcast/event/event_message.rs +++ b/editor/src/messages/broadcast/event/event_message.rs @@ -8,5 +8,7 @@ pub enum EventMessage { CanvasTransformed, ToolAbort, SelectionChanged, + /// The document graph's nodes or wires changed, so state derived from the selection's chains may be stale + GraphChanged, WorkingColorChanged, } diff --git a/editor/src/messages/clipboard/clipboard_message_handler.rs b/editor/src/messages/clipboard/clipboard_message_handler.rs index 408e760478..73b72b7d6e 100644 --- a/editor/src/messages/clipboard/clipboard_message_handler.rs +++ b/editor/src/messages/clipboard/clipboard_message_handler.rs @@ -12,10 +12,10 @@ use graph_craft::application_io::resource::{DataSource, ResourceHash}; use graph_craft::document::NodeId; use graphene_std::Color; use graphene_std::raster::Image; -use graphene_std::subpath::BezierHandles; -use graphene_std::vector::misc::HandleId; +use graphene_std::vector::misc::{BezierHandles, HandleId, point_to_dvec2, segment_to_handles}; use graphene_std::vector::{PointId, SegmentId, VectorModificationType}; use graphite_proc_macros::{ExtractField, message_handler_data}; +use kurbo::ParamCurve; use std::sync::Arc; const CLIPBOARD_PREFIX: &str = "graphite: "; @@ -182,13 +182,8 @@ impl MessageHandler> for Clipboard let mut resource_ids = HashSet::new(); for item in &items { match item { - ClipboardItem::Layer(entry) => entry - .nodes - .iter() - .for_each(|(_, template)| network_interface::collect_node_resources(&template.document_node, &mut resource_ids)), - ClipboardItem::Nodes(nodes) => nodes - .iter() - .for_each(|(_, template)| network_interface::collect_node_resources(&template.document_node, &mut resource_ids)), + ClipboardItem::Layer(entry) => entry.nodes.iter().for_each(|(_, template)| network_interface::collect_template_resources(template, &mut resource_ids)), + ClipboardItem::Nodes(nodes) => nodes.iter().for_each(|(_, template)| network_interface::collect_template_resources(template, &mut resource_ids)), ClipboardItem::Vector(_) | ClipboardItem::Resource(_) => {} } } @@ -252,9 +247,20 @@ impl MessageHandler> for Clipboard let mut vectors = Vec::new(); let mut resources = Vec::new(); for item in items { + // Pasted templates skip document migration, so stored types normalize here match item { - ClipboardItem::Layer(entry) => layers.push(entry), - ClipboardItem::Nodes(nodes) => node_groups.push(nodes), + ClipboardItem::Layer(mut entry) => { + for (_, template) in &mut entry.nodes { + template.normalize_stored_types(); + } + layers.push(entry); + } + ClipboardItem::Nodes(mut nodes) => { + for (_, template) in &mut nodes { + template.normalize_stored_types(); + } + node_groups.push(nodes); + } ClipboardItem::Vector(vector) => vectors.push(vector), ClipboardItem::Resource(resource) => resources.push(resource), } @@ -419,7 +425,7 @@ impl MessageHandler> for Clipboard // Create new segment ids and add the segments into the existing Vector path let mut segments_map = HashMap::new(); - for (segment_id, bezier, start, end) in new_vector.segment_bezier_iter() { + for (segment_id, segment, start, end) in new_vector.segment_iter() { let (Some(&start_point), Some(&end_point)) = (points_map.get(&start), points_map.get(&end)) else { warn!("Skipping pasted vector segment with an unknown endpoint"); continue; @@ -428,10 +434,12 @@ impl MessageHandler> for Clipboard let new_segment_id = SegmentId::generate(); segments_map.insert(segment_id, new_segment_id); - let handles = match bezier.handles { + let segment_start = point_to_dvec2(segment.start()); + let segment_end = point_to_dvec2(segment.end()); + let handles = match segment_to_handles(&segment) { BezierHandles::Linear => [None, None], - BezierHandles::Quadratic { handle } => [Some(handle - bezier.start), None], - BezierHandles::Cubic { handle_start, handle_end } => [Some(handle_start - bezier.start), Some(handle_end - bezier.end)], + BezierHandles::Quadratic { handle } => [Some(handle - segment_start), None], + BezierHandles::Cubic { handle_start, handle_end } => [Some(handle_start - segment_start), Some(handle_end - segment_end)], }; let points = [start_point, end_point]; diff --git a/editor/src/messages/color_picker/color_picker_message.rs b/editor/src/messages/color_picker/color_picker_message.rs index e8ec19173f..0a969d581b 100644 --- a/editor/src/messages/color_picker/color_picker_message.rs +++ b/editor/src/messages/color_picker/color_picker_message.rs @@ -1,6 +1,6 @@ use crate::messages::layout::utility_types::widgets::input_widgets::{SpectrumInputUpdate, VisualColorPickersInputUpdate}; use crate::messages::prelude::*; -use graphene_std::vector::style::FillChoice; +use graphene_std::vector::style::{FillChoice, GradientHueDirection, GradientInterpolation, GradientSpace, GradientSpread}; /// Identifies which RGB channel a numeric input change targets. #[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] @@ -47,6 +47,16 @@ pub enum ColorPickerMessage { /// `SpectrumInput` change: marker move/insert/delete, midpoint move/reset, or active marker selection changed. GradientUpdate { update: SpectrumInputUpdate }, + /// Gradient spread choice from the gradient "Ends" selection. + SetGradientSpread { gradient_spread: GradientSpread }, + /// Gradient cyclic choice: whether the stops wrap as a cycle, from the "Cyclic" checkbox. + SetGradientCyclic { gradient_cyclic: bool }, + /// Gradient space choice: the color space the stops interpolate in, from the "Space" dropdown. + SetGradientSpace { gradient_space: GradientSpace }, + /// Gradient hue direction choice: which way around the hue wheel the stops interpolate in a polar space, from the "Arc" dropdown. + SetGradientHueDirection { gradient_hue_direction: GradientHueDirection }, + /// Gradient interpolation choice: the path the stops interpolate along, from the "Intrp." dropdown. + SetGradientInterpolation { gradient_interpolation: GradientInterpolation }, /// Tell the frontend to start an undo transaction (forwarded as a `FrontendMessage` it bridges out to the picker's parent). StartTransaction, diff --git a/editor/src/messages/color_picker/color_picker_message_handler.rs b/editor/src/messages/color_picker/color_picker_message_handler.rs index 73361b4588..03d055a31b 100644 --- a/editor/src/messages/color_picker/color_picker_message_handler.rs +++ b/editor/src/messages/color_picker/color_picker_message_handler.rs @@ -5,7 +5,7 @@ use crate::messages::prelude::*; use graphene_std::Color; use graphene_std::color::SRGBA8; use graphene_std::core_types::misc::parse_css_color; -use graphene_std::vector::style::{FillChoice, FillChoiceUI, GradientStops, GradientStopsUI}; +use graphene_std::vector::style::{FillChoice, Gradient, GradientHueDirection, GradientInterpolation, GradientRamp, GradientSettings, GradientSpace, GradientSpread, GradientStops}; /// Bounds for a midpoint position (relative to the interval between two adjacent gradient stops). const MIN_MIDPOINT: f64 = 0.01; @@ -28,7 +28,12 @@ pub struct ColorPickerMessageHandler { old_is_none: bool, // When set, the picker is editing a gradient: the visual pickers and inputs target the active stop's color. - gradient: Option, + gradient: Option, + gradient_spread: GradientSpread, + gradient_space: GradientSpace, + gradient_cyclic: bool, + gradient_hue_direction: GradientHueDirection, + gradient_interpolation: GradientInterpolation, active_marker_index: Option, active_marker_is_midpoint: bool, @@ -50,6 +55,11 @@ impl Default for ColorPickerMessageHandler { old_alpha: 1., old_is_none: true, gradient: None, + gradient_spread: GradientSpread::default(), + gradient_space: GradientSpace::default(), + gradient_cyclic: false, + gradient_hue_direction: GradientHueDirection::default(), + gradient_interpolation: GradientInterpolation::default(), active_marker_index: None, active_marker_is_midpoint: false, allow_none: true, @@ -70,20 +80,36 @@ impl MessageHandler for ColorPickerMessageHandler { FillChoice::None => { self.set_new_hsva(0., 0., 0., 1., true); self.gradient = None; + self.gradient_spread = GradientSpread::default(); + self.gradient_space = GradientSpace::default(); + self.gradient_cyclic = false; + self.gradient_hue_direction = GradientHueDirection::default(); + self.gradient_interpolation = GradientInterpolation::default(); self.active_marker_index = None; self.active_marker_is_midpoint = false; } FillChoice::Solid(color) => { self.gradient = None; + self.gradient_spread = GradientSpread::default(); + self.gradient_space = GradientSpace::default(); + self.gradient_cyclic = false; + self.gradient_hue_direction = GradientHueDirection::default(); + self.gradient_interpolation = GradientInterpolation::default(); self.active_marker_index = None; self.active_marker_is_midpoint = false; self.adopt_color(color); } - FillChoice::Gradient(stops) => { + FillChoice::Gradient(ramp) => { self.active_marker_index = Some(0); self.active_marker_is_midpoint = false; - let first_color = stops.color.first().copied().unwrap_or(Color::BLACK); - self.gradient = Some(stops); + self.gradient_spread = ramp.gradient_spread; + self.gradient_space = ramp.gradient_space; + self.gradient_cyclic = ramp.gradient_cyclic; + self.gradient_hue_direction = ramp.gradient_hue_direction; + self.gradient_interpolation = ramp.gradient_interpolation; + let gradient = Gradient::from(ramp); + let first_color = gradient.color(0).unwrap_or(Color::BLACK); + self.gradient = Some(gradient); self.adopt_color(first_color); } } @@ -154,7 +180,7 @@ impl MessageHandler for ColorPickerMessageHandler { match preset { FillChoice::None => { self.set_new_hsva(0., 0., 0., 1., true); - responses.add(FrontendMessage::ColorPickerColorChanged { value: FillChoiceUI::None }); + responses.add(FrontendMessage::ColorPickerColorChanged { value: FillChoice::::None }); } FillChoice::Solid(color) => { self.adopt_color(color); @@ -179,13 +205,62 @@ impl MessageHandler for ColorPickerMessageHandler { self.set_old_hsva(temp.0, temp.1, temp.2, temp.3, temp.4); if self.is_none { - responses.add(FrontendMessage::ColorPickerColorChanged { value: FillChoiceUI::None }); + responses.add(FrontendMessage::ColorPickerColorChanged { value: FillChoice::::None }); } else { self.emit_color(responses); } self.send_layouts(responses); } ColorPickerMessage::GradientUpdate { update } => self.apply_gradient_update(update, responses), + ColorPickerMessage::SetGradientSpread { gradient_spread } => { + let Some(gradient) = &self.gradient else { return }; + responses.add(FrontendMessage::ColorPickerStartHistoryTransaction); + self.gradient_spread = gradient_spread; + responses.add(FrontendMessage::ColorPickerColorChanged { + value: FillChoice::Gradient(GradientRamp::from(gradient).with_settings(self.gradient_settings())), + }); + self.send_layouts(responses); + } + ColorPickerMessage::SetGradientCyclic { gradient_cyclic } => { + let Some(gradient) = &mut self.gradient else { return }; + responses.add(FrontendMessage::ColorPickerStartHistoryTransaction); + + let previous_cyclic = std::mem::replace(&mut self.gradient_cyclic, gradient_cyclic); + gradient.hold_positions_across_cyclic_change(previous_cyclic, gradient_cyclic); + + let ramp = GradientRamp::from(&*gradient); + responses.add(FrontendMessage::ColorPickerColorChanged { + value: FillChoice::Gradient(ramp.with_settings(self.gradient_settings())), + }); + self.send_layouts(responses); + } + ColorPickerMessage::SetGradientSpace { gradient_space } => { + let Some(gradient) = &self.gradient else { return }; + responses.add(FrontendMessage::ColorPickerStartHistoryTransaction); + self.gradient_space = gradient_space; + responses.add(FrontendMessage::ColorPickerColorChanged { + value: FillChoice::Gradient(GradientRamp::from(gradient).with_settings(self.gradient_settings())), + }); + self.send_layouts(responses); + } + ColorPickerMessage::SetGradientHueDirection { gradient_hue_direction } => { + let Some(gradient) = &self.gradient else { return }; + responses.add(FrontendMessage::ColorPickerStartHistoryTransaction); + self.gradient_hue_direction = gradient_hue_direction; + responses.add(FrontendMessage::ColorPickerColorChanged { + value: FillChoice::Gradient(GradientRamp::from(gradient).with_settings(self.gradient_settings())), + }); + self.send_layouts(responses); + } + ColorPickerMessage::SetGradientInterpolation { gradient_interpolation } => { + let Some(gradient) = &self.gradient else { return }; + responses.add(FrontendMessage::ColorPickerStartHistoryTransaction); + self.gradient_interpolation = gradient_interpolation; + responses.add(FrontendMessage::ColorPickerColorChanged { + value: FillChoice::Gradient(GradientRamp::from(gradient).with_settings(self.gradient_settings())), + }); + self.send_layouts(responses); + } ColorPickerMessage::StartTransaction => { responses.add(FrontendMessage::ColorPickerStartHistoryTransaction); } @@ -234,6 +309,17 @@ impl ColorPickerMessageHandler { self.old_is_none = is_none; } + /// The whole-ramp settings the picker is currently editing with, bundled for sampling and for emitting ramps. + fn gradient_settings(&self) -> GradientSettings { + GradientSettings { + spread: self.gradient_spread, + cyclic: self.gradient_cyclic, + space: self.gradient_space, + hue_direction: self.gradient_hue_direction, + interpolation: self.gradient_interpolation, + } + } + fn snapshot_old(&mut self) { self.old_hue = self.hue; self.old_saturation = self.saturation; @@ -266,18 +352,16 @@ impl ColorPickerMessageHandler { if let Some(gradient) = &mut self.gradient && let Some(active_index) = self.active_marker_index - && let Some(stop_color) = gradient.color.get_mut(active_index as usize) + && (active_index as usize) < gradient.len() { - *stop_color = color; - let stops = gradient.clone(); - let fill_choice = FillChoice::Gradient(stops); + gradient.set_color(active_index as usize, color); + let ramp = GradientRamp::from(&*gradient); responses.add(FrontendMessage::ColorPickerColorChanged { - value: FillChoiceUI::from(&fill_choice), + value: FillChoice::Gradient(ramp.with_settings(self.gradient_settings())), }); } else { - let fill_choice = FillChoice::Solid(color); responses.add(FrontendMessage::ColorPickerColorChanged { - value: FillChoiceUI::from(&fill_choice), + value: FillChoice::Solid(SRGBA8::from(color)), }); } } @@ -305,7 +389,7 @@ impl ColorPickerMessageHandler { self.active_marker_is_midpoint = active_marker_is_midpoint; if let Some(index) = active_marker_index && let Some(gradient) = &self.gradient - && let Some(color) = gradient.color.get(index as usize).copied() + && let Some(color) = gradient.color(index as usize) { self.adopt_color(color); self.snapshot_old(); @@ -318,30 +402,31 @@ impl ColorPickerMessageHandler { match update { SpectrumInputUpdate::MoveMarker { index, position } => { - let new_index = gradient.move_stop(index as usize, position); + let new_index = gradient.move_stop(index as usize, position, self.gradient_cyclic); if Some(index) == self.active_marker_index { self.active_marker_index = Some(new_index as u32); } } SpectrumInputUpdate::MoveMidpoint { index, position } => { - if let Some(midpoint) = gradient.midpoint.get_mut(index as usize) { - *midpoint = position.clamp(MIN_MIDPOINT, MAX_MIDPOINT); - } else { + if (index as usize) >= gradient.len() { return; } + gradient.set_midpoint(index as usize, position.clamp(MIN_MIDPOINT, MAX_MIDPOINT)); } SpectrumInputUpdate::InsertMarker { position } => { - let new_index = gradient.insert_stop(position); + let new_index = gradient.insert_stop(position, self.gradient_settings()); self.active_marker_index = Some(new_index as u32); self.active_marker_is_midpoint = false; - if let Some(color) = gradient.color.get(new_index).copied() { + if let Some(color) = gradient.color(new_index) { self.adopt_color(color); self.snapshot_old(); } } SpectrumInputUpdate::InsertDuplicate { index, position } => { let source = index as usize; - let Some(insert_index) = gradient.duplicate_stop(source, position) else { return }; + let Some(insert_index) = gradient.duplicate_stop(source, position, self.gradient_cyclic) else { + return; + }; // The dragged stop (the duplication source) stays active. Its index shifts up if the frozen copy landed at or before it. let dragged_index = if insert_index <= source { source + 1 } else { source }; self.active_marker_index = Some(dragged_index as u32); @@ -349,7 +434,7 @@ impl ColorPickerMessageHandler { } SpectrumInputUpdate::RemoveDuplicate { index } => { let anchor = index as usize; - if anchor >= gradient.position.len() || gradient.position.len() <= 2 { + if anchor >= gradient.len() || gradient.len() <= 2 { return; } // Never remove the active (dragged) stop itself, this should only ever target the frozen copy. @@ -366,14 +451,14 @@ impl ColorPickerMessageHandler { } SpectrumInputUpdate::DeleteMarker { index } => { // Enforce minimum stop count. The gradient editor needs at least 2 stops to remain meaningful. - if gradient.position.len() <= 2 || (index as usize) >= gradient.position.len() { + if gradient.len() <= 2 || (index as usize) >= gradient.len() { return; } gradient.remove(index as usize); - let new_active = (index as usize).min(gradient.position.len() - 1); + let new_active = (index as usize).min(gradient.len() - 1); self.active_marker_index = Some(new_active as u32); self.active_marker_is_midpoint = false; - if let Some(color) = gradient.color.get(new_active).copied() { + if let Some(color) = gradient.color(new_active) { self.adopt_color(color); self.snapshot_old(); } @@ -383,16 +468,17 @@ impl ColorPickerMessageHandler { } SpectrumInputUpdate::ResetMarker { index } => { let i = index as usize; - let count = gradient.position.len(); + let count = gradient.len(); if i >= count { return; } - // Each stop's "natural" position is its evenly-spaced fraction along 0..1, e.g., for 5 stops: 0, 0.25, 0.5, 0.75, 1. Falls back to the midpoint between neighbors when the natural position would push the stop past another. - let left = if i == 0 { 0. } else { gradient.position[i - 1] }; - let right = gradient.position.get(i + 1).copied().unwrap_or(1.); - let natural = if count <= 1 { 0. } else { i as f64 / (count - 1) as f64 }; + // Each stop's "natural" position is its evenly-spaced fraction along 0..1, e.g., for 5 stops: 0, 0.25, 0.5, 0.75, 1 (or fifths when cyclic, leaving the wrapped interval its share). Falls back to the midpoint between neighbors when the natural position would push the stop past another. + let left = if i == 0 { 0. } else { gradient.position(i - 1, self.gradient_cyclic) }; + let right = if i + 1 < count { gradient.position(i + 1, self.gradient_cyclic) } else { 1. }; + let denominator = if self.gradient_cyclic { count } else { count - 1 }; + let natural = if count <= 1 { 0. } else { i as f64 / denominator as f64 }; let new_position = if (left..=right).contains(&natural) { natural } else { (left + right) / 2. }; - let new_index = gradient.move_stop(i, new_position); + let new_index = gradient.move_stop(i, new_position, self.gradient_cyclic); if Some(index) == self.active_marker_index { self.active_marker_index = Some(new_index as u32); } @@ -400,11 +486,10 @@ impl ColorPickerMessageHandler { SpectrumInputUpdate::ActiveMarker { .. } => unreachable!("handled above"), } - self.gradient = Some(gradient.clone()); - let fill_choice = FillChoice::Gradient(gradient); responses.add(FrontendMessage::ColorPickerColorChanged { - value: FillChoiceUI::from(&fill_choice), + value: FillChoice::Gradient(GradientRamp::from(&gradient).with_settings(self.gradient_settings())), }); + self.gradient = Some(gradient); self.send_layouts(responses); } @@ -428,9 +513,15 @@ impl ColorPickerMessageHandler { // Gradient editor (only present when the picker is in gradient mode) if let Some(gradient) = &self.gradient { // For gradient editing, the markers' handle colors mirror their gradient stop colors - let markers = gradient.iter().map(|stop| SpectrumMarker::new(stop.position, stop.midpoint, stop.color)).collect(); + let markers = (0..gradient.len()) + .filter_map(|i| Some(SpectrumMarker::new(gradient.position(i, self.gradient_cyclic), gradient.midpoint(i), gradient.color(i)?))) + .collect(); let mut row_widgets = vec![ - SpectrumInput::new(GradientStopsUI::from(gradient)) + SpectrumInput::new(GradientStops::from(gradient)) + .track_space(self.gradient_space) + .track_cyclic(self.gradient_cyclic) + .track_hue_direction(self.gradient_hue_direction) + .track_interpolation(self.gradient_interpolation) .markers(markers) .active_marker_index(self.active_marker_index) .active_marker_is_midpoint(self.active_marker_is_midpoint) @@ -445,10 +536,10 @@ impl ColorPickerMessageHandler { if let Some(active) = self.active_marker_index { let active_index = active as usize; - let position_value = if self.active_marker_is_midpoint { - gradient.midpoint.get(active_index).copied().unwrap_or(0.) - } else { - gradient.position.get(active_index).copied().unwrap_or(0.) + let position_value = match (self.active_marker_is_midpoint, active_index < gradient.len()) { + (_, false) => 0., + (true, true) => gradient.midpoint(active_index), + (false, true) => gradient.position(active_index, self.gradient_cyclic), }; let is_midpoint = self.active_marker_is_midpoint; let captured_index = active; @@ -524,7 +615,11 @@ impl ColorPickerMessageHandler { // Hex groups.push(LayoutGroup::row(vec![ - TextLabel::new("Hex").tooltip_label("Hex Color Code").tooltip_description(HEX_DESCRIPTION).widget_instance(), + TextLabel::new("Hex") + .disabled(self.disabled) + .tooltip_label("Hex Color Code") + .tooltip_description(HEX_DESCRIPTION) + .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), TextInput::new(hex_value) .centered(true) @@ -537,7 +632,11 @@ impl ColorPickerMessageHandler { // RGB groups.push(LayoutGroup::row(vec![ - TextLabel::new("RGB").tooltip_label("Red/Green/Blue").tooltip_description("Integers 0–255.").widget_instance(), + TextLabel::new("RGB") + .disabled(self.disabled) + .tooltip_label("Red/Green/Blue") + .tooltip_description("Integers 0–255.") + .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), rgb_input(RgbChannel::Red, rgb_255.map(|(r, _, _)| r), "Red Channel", self.disabled), Separator::new(SeparatorStyle::Related).widget_instance(), @@ -549,8 +648,9 @@ impl ColorPickerMessageHandler { // HSV groups.push(LayoutGroup::row(vec![ TextLabel::new("HSV") + .disabled(self.disabled) .tooltip_label("Hue/Saturation/Value") - .tooltip_description("Also known as Hue/Saturation/Brightness (HSB). Not to be confused with Hue/Saturation/Lightness (HSL), a different color model.") + .tooltip_description("Also known as Hue/Saturation/Brightness (HSB), but distinct from Hue/Saturation/Lightness (HSL), a different color model.") .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), hsv_input( @@ -586,7 +686,11 @@ impl ColorPickerMessageHandler { // Alpha groups.push(LayoutGroup::row(vec![ - TextLabel::new("Alpha").tooltip_label("Alpha").tooltip_description(ALPHA_DESCRIPTION).widget_instance(), + TextLabel::new("Alpha") + .disabled(self.disabled) + .tooltip_label("Alpha") + .tooltip_description(ALPHA_DESCRIPTION) + .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), NumberInput::new(if self.is_none { None } else { Some(self.alpha * 100.) }) .disabled(self.disabled) @@ -602,6 +706,98 @@ impl ColorPickerMessageHandler { .widget_instance(), ])); + // Gradient spread, trailed by the cyclic wrap toggle (only present when the picker is in gradient mode) + if self.gradient.is_some() { + let entries = RadioEntryData::list_from_choice_type(|gradient_spread| ColorPickerMessage::SetGradientSpread { gradient_spread }.into()); + + groups.push(LayoutGroup::row(vec![ + TextLabel::new("Ends") + .disabled(self.disabled) + .tooltip_label("Gradient Spread / Cyclic") + .tooltip_description(ENDS_DESCRIPTION) + .widget_instance(), + Separator::new(SeparatorStyle::Related).widget_instance(), + RadioInput::new(entries) + .narrow(true) + .selected_index(Some(self.gradient_spread as u32)) + .disabled(self.disabled) + .widget_instance(), + Separator::new(SeparatorStyle::Unrelated).widget_instance(), + CheckboxInput::new(self.gradient_cyclic) + .icon("Link") + .disabled(self.disabled) + .tooltip_label("Cyclic") + .tooltip_description(CYCLIC_DESCRIPTION) + .on_update(|checkbox_input: &CheckboxInput| { + ColorPickerMessage::SetGradientCyclic { + gradient_cyclic: checkbox_input.checked, + } + .into() + }) + .widget_instance(), + ])); + } + + // Gradient interpolation (only present when the picker is in gradient mode) + if self.gradient.is_some() { + let entries = MenuListEntry::sections_from_choice_type(|gradient_interpolation| ColorPickerMessage::SetGradientInterpolation { gradient_interpolation }.into()); + + groups.push(LayoutGroup::row(vec![ + TextLabel::new("Intrp.") + .disabled(self.disabled) + .tooltip_label("Gradient Interpolation") + .tooltip_description(INTERPOLATION_DESCRIPTION) + .widget_instance(), + Separator::new(SeparatorStyle::Related).widget_instance(), + DropdownInput::new(entries) + .selected_index(Some(self.gradient_interpolation as u32)) + .disabled(self.disabled) + .tooltip_label("Gradient Interpolation") + .tooltip_description(INTERPOLATION_DESCRIPTION) + .widget_instance(), + ])); + } + + // Gradient color space (only present when the picker is in gradient mode) + if self.gradient.is_some() { + let entries = MenuListEntry::sections_from_choice_type(|gradient_space| ColorPickerMessage::SetGradientSpace { gradient_space }.into()); + + groups.push(LayoutGroup::row(vec![ + TextLabel::new("Space") + .disabled(self.disabled) + .tooltip_label("Gradient Space") + .tooltip_description(SPACE_DESCRIPTION) + .widget_instance(), + Separator::new(SeparatorStyle::Related).widget_instance(), + DropdownInput::new(entries) + .selected_index(Some(self.gradient_space as u32)) + .disabled(self.disabled) + .tooltip_label("Gradient Space") + .tooltip_description(SPACE_DESCRIPTION) + .widget_instance(), + ])); + } + + // Gradient hue direction (only present when the chosen space is polar) + if self.gradient.is_some() && self.gradient_space.is_polar() { + let entries = MenuListEntry::sections_from_choice_type(|gradient_hue_direction| ColorPickerMessage::SetGradientHueDirection { gradient_hue_direction }.into()); + + groups.push(LayoutGroup::row(vec![ + TextLabel::new("Arc") + .disabled(self.disabled) + .tooltip_label("Gradient Hue Direction") + .tooltip_description(HUE_DIRECTION_DESCRIPTION) + .widget_instance(), + Separator::new(SeparatorStyle::Related).widget_instance(), + DropdownInput::new(entries) + .selected_index(Some(self.gradient_hue_direction as u32)) + .disabled(self.disabled) + .tooltip_label("Gradient Hue Direction") + .tooltip_description(HUE_DIRECTION_DESCRIPTION) + .widget_instance(), + ])); + } + // Color presets (None / Black / White / pure colors / eyedropper) groups.push(LayoutGroup::row(vec![ ColorPresetsInput::default() @@ -655,6 +851,11 @@ const HUE_DESCRIPTION: &str = "The shade along the spectrum of the rainbow."; const SATURATION_DESCRIPTION: &str = "The vividness from grayscale to full color."; const VALUE_DESCRIPTION: &str = "The brightness from black to full color."; const ALPHA_DESCRIPTION: &str = "The level of translucency, from transparent (0%) to opaque (100%)."; +const ENDS_DESCRIPTION: &str = "The method for how the gradient continues beyond its ends, and whether its stops cycle back around from last to first."; +const CYCLIC_DESCRIPTION: &str = "Treats the stops as a cycle, interpolating from the last stop back around to the first."; +const SPACE_DESCRIPTION: &str = "The color space where stops interpolate toward their neighbors."; +const HUE_DIRECTION_DESCRIPTION: &str = "Which way around the hue wheel the stops interpolate."; +const INTERPOLATION_DESCRIPTION: &str = "The path the stops interpolate along, deciding whether the gradient jumps, turns corners, or flows smoothly through them."; /// The popover's background color as sRGB gamma-encoded channels (the `--color-2-mildblack` design token, `#222`). /// Used by the comparison swatch's outline computation to brighten the inset border for colors close to this background. diff --git a/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs b/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs index 7a4ed18610..8c0818589a 100644 --- a/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs +++ b/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs @@ -275,11 +275,7 @@ impl PreferencesDialogMessageHandler { let checkbox_id = CheckboxId::new(); let brush_tool_description = " - Enable the Brush tool to support basic raster-based layer painting.\n\ - \n\ - This legacy experimental tool has performance and quality limitations and is slated for replacement in future versions of Graphite that will have a renewed focus on raster graphics editing.\n\ - \n\ - Content created with the Brush tool may not be compatible with future versions of Graphite.\n\ + Enable the Brush tool to support basic layer painting.\n\ \n\ *Default: Off.* " diff --git a/editor/src/messages/dialog/simple_dialogs/licenses_dialog.rs b/editor/src/messages/dialog/simple_dialogs/licenses_dialog.rs index 3bdf5fc6cb..a69fef854a 100644 --- a/editor/src/messages/dialog/simple_dialogs/licenses_dialog.rs +++ b/editor/src/messages/dialog/simple_dialogs/licenses_dialog.rs @@ -46,11 +46,15 @@ impl LayoutHolder for LicensesDialog { let year = &self.localized_commit_year; let description = format!( " - Graphite source code is copyright Β© {year} Graphite contrib-\nutors and is available under the Apache License 2.0. See\n\"Source Code License\" for details.\n\ + Graphite source code is copyright Β© {year} Graphite contrib-\n\ + utors and is available under both the MIT and Apache 2.0\n\ + licenses. See \"Source Code License\" for details.\n\ \n\ - The Graphite logo, icons, and visual identity are copyright Β©\n{year} Graphite Labs, LLC. See \"Branding License\" for details.\n\ + The Graphite logo, icons, and visual identity are copyright Β©\n\ + {year} Graphite Labs, LLC. See \"Branding License\" for details.\n\ \n\ - Graphite is distributed with third-party open source code\ndependencies. See \"Dependency Licenses\" for details. + Graphite is distributed with third-party open source code\n\ + dependencies. See \"Dependency Licenses\" for details. " ); let description = description.trim(); diff --git a/editor/src/messages/frontend/frontend_message.rs b/editor/src/messages/frontend/frontend_message.rs index e227c6821a..29daaa269b 100644 --- a/editor/src/messages/frontend/frontend_message.rs +++ b/editor/src/messages/frontend/frontend_message.rs @@ -1,7 +1,7 @@ use super::IconName; use super::utility_types::{MouseCursorIcon, PersistedState}; use crate::messages::app_window::app_window_message_handler::AppWindowPlatform; -use crate::messages::frontend::utility_types::{DocumentInfo, EyedropperPreviewImage, RasterizedImage}; +use crate::messages::frontend::utility_types::{DocumentInfo, EyedropperPreviewImage, FileFilter, RasterizedImage}; use crate::messages::input_mapper::utility_types::misc::ActionShortcut; use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::portfolio::document::node_graph::utility_types::{ @@ -14,7 +14,7 @@ use crate::messages::prelude::*; use crate::messages::tool::tool_messages::eyedropper_tool::PrimarySecondary; use graph_craft::document::NodeId; use graphene_std::color::SRGBA8; -use graphene_std::vector::style::FillChoiceUI; +use graphene_std::vector::style::FillChoice; use std::path::PathBuf; #[cfg(not(target_family = "wasm"))] @@ -87,16 +87,24 @@ pub enum FrontendMessage { commit_date: String, }, TriggerDisplayThirdPartyLicensesDialog, + TriggerOpen { + filters: Vec, + }, + TriggerImport { + filters: Vec, + }, TriggerSaveDocument { document_id: DocumentId, name: String, path: Option, folder: Option, + filters: Vec, content: serde_bytes::ByteBuf, }, TriggerSaveFile { name: String, folder: Option, + filters: Vec, content: serde_bytes::ByteBuf, }, TriggerExportImage { @@ -128,8 +136,6 @@ pub enum FrontendMessage { }, TriggerOpenLaunchDocuments, TriggerLoadPreferences, - TriggerOpen, - TriggerImport, TriggerSavePreferences { #[cfg_attr(feature = "wasm", tsify(type = "unknown"))] preferences: PreferencesMessageHandler, @@ -165,7 +171,7 @@ pub enum FrontendMessage { }, /// The Rust color picker handler picked a new color/gradient. The frontend `` forwards this as its `colorOrGradient` event. ColorPickerColorChanged { - value: FillChoiceUI, + value: FillChoice, }, /// The Rust color picker handler is starting an undo transaction. The frontend `` forwards this as its `startHistoryTransaction` event. ColorPickerStartHistoryTransaction, @@ -344,6 +350,10 @@ pub enum FrontendMessage { position: (f64, f64), }, #[cfg(not(target_family = "wasm"))] + WindowUpdateDirectInput { + enabled: bool, + }, + #[cfg(not(target_family = "wasm"))] WindowClose, #[cfg(not(target_family = "wasm"))] WindowMinimize, diff --git a/editor/src/messages/frontend/utility_types.rs b/editor/src/messages/frontend/utility_types.rs index bf614b1eea..f5d31dcfd8 100644 --- a/editor/src/messages/frontend/utility_types.rs +++ b/editor/src/messages/frontend/utility_types.rs @@ -64,6 +64,26 @@ impl FileType { FileType::Svg => "image/svg+xml", } } + + pub fn extension(self) -> &'static str { + match self { + FileType::Png => "png", + FileType::Jpg => "jpg", + FileType::Svg => "svg", + } + } + + pub fn file_filter(self) -> FileFilter { + let name = match self { + FileType::Png => "PNG Image", + FileType::Jpg => "JPEG Image", + FileType::Svg => "SVG Image", + }; + FileFilter { + name: name.into(), + extensions: vec![self.extension().into()], + } + } } #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] @@ -91,3 +111,10 @@ pub struct RasterizedImage { pub height: u32, pub pixels: serde_bytes::ByteBuf, } + +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)] +pub struct FileFilter { + pub name: String, + pub extensions: Vec, +} diff --git a/editor/src/messages/input_mapper/input_mapper_message.rs b/editor/src/messages/input_mapper/input_mapper_message.rs index bfcda26c73..ffa8337d20 100644 --- a/editor/src/messages/input_mapper/input_mapper_message.rs +++ b/editor/src/messages/input_mapper/input_mapper_message.rs @@ -1,5 +1,5 @@ -use crate::messages::input_mapper::utility_types::input_keyboard::Key; -use crate::messages::input_mapper::utility_types::input_mouse::MouseButton; +use crate::messages::input_mapper::utility_types::keyboard::Key; +use crate::messages::input_mapper::utility_types::pointer::MouseButton; use crate::messages::prelude::*; #[impl_message(Message, KeyMappingMessage, Lookup)] diff --git a/editor/src/messages/input_mapper/input_mapper_message_handler.rs b/editor/src/messages/input_mapper/input_mapper_message_handler.rs index d38845c6d9..4797384142 100644 --- a/editor/src/messages/input_mapper/input_mapper_message_handler.rs +++ b/editor/src/messages/input_mapper/input_mapper_message_handler.rs @@ -1,7 +1,7 @@ -use super::utility_types::input_keyboard::KeysGroup; +use super::utility_types::keyboard::KeysGroup; use super::utility_types::misc::Mapping; use crate::application::Editor; -use crate::messages::input_mapper::utility_types::input_keyboard::{self, Key}; +use crate::messages::input_mapper::utility_types::keyboard::{self, Key}; use crate::messages::input_mapper::utility_types::misc::MappingEntry; use crate::messages::prelude::*; @@ -58,7 +58,7 @@ impl InputMapperMessageHandler { .map(|i| { // TODO: Use a safe solution eventually assert!( - i < input_keyboard::NUMBER_OF_KEYS, + i < keyboard::NUMBER_OF_KEYS, "Attempting to convert a Key with enum index {i}, which is larger than the number of Key enums", ); (i as u8).try_into().unwrap() diff --git a/editor/src/messages/input_mapper/input_mappings.rs b/editor/src/messages/input_mapper/input_mappings.rs index 8023d0f926..c1b4309649 100644 --- a/editor/src/messages/input_mapper/input_mappings.rs +++ b/editor/src/messages/input_mapper/input_mappings.rs @@ -1,11 +1,11 @@ use crate::application::Editor; use crate::consts::{BIG_NUDGE_AMOUNT, BRUSH_SIZE_CHANGE_KEYBOARD, NUDGE_AMOUNT}; use crate::messages::input_mapper::key_mapping::MappingVariant; -use crate::messages::input_mapper::utility_types::input_keyboard::{Key, KeyStates}; -use crate::messages::input_mapper::utility_types::input_mouse::MouseButton; +use crate::messages::input_mapper::utility_types::keyboard::{Key, KeyStates}; use crate::messages::input_mapper::utility_types::macros::*; use crate::messages::input_mapper::utility_types::misc::MappingEntry; use crate::messages::input_mapper::utility_types::misc::{KeyMappingEntries, Mapping}; +use crate::messages::input_mapper::utility_types::pointer::MouseButton; use crate::messages::portfolio::document::node_graph::utility_types::Direction; use crate::messages::portfolio::document::utility_types::misc::GroupFolderType; use crate::messages::prelude::*; diff --git a/editor/src/messages/input_mapper/key_mapping/key_mapping_message_handler.rs b/editor/src/messages/input_mapper/key_mapping/key_mapping_message_handler.rs index 4d40a9ebbe..5f70b8df7d 100644 --- a/editor/src/messages/input_mapper/key_mapping/key_mapping_message_handler.rs +++ b/editor/src/messages/input_mapper/key_mapping/key_mapping_message_handler.rs @@ -1,5 +1,5 @@ use crate::messages::input_mapper::input_mapper_message_handler::InputMapperMessageContext; -use crate::messages::input_mapper::utility_types::input_keyboard::KeysGroup; +use crate::messages::input_mapper::utility_types::keyboard::KeysGroup; use crate::messages::prelude::*; #[derive(ExtractField)] diff --git a/editor/src/messages/input_mapper/utility_types/input_keyboard.rs b/editor/src/messages/input_mapper/utility_types/keyboard.rs similarity index 100% rename from editor/src/messages/input_mapper/utility_types/input_keyboard.rs rename to editor/src/messages/input_mapper/utility_types/keyboard.rs diff --git a/editor/src/messages/input_mapper/utility_types/macros.rs b/editor/src/messages/input_mapper/utility_types/macros.rs index 9dae86c9a5..2adda8b540 100644 --- a/editor/src/messages/input_mapper/utility_types/macros.rs +++ b/editor/src/messages/input_mapper/utility_types/macros.rs @@ -162,7 +162,7 @@ macro_rules! action_shortcut { macro_rules! action_shortcut_manual { ($($keys:expr),*) => { Some(crate::messages::input_mapper::utility_types::misc::ActionShortcut::Shortcut( - crate::messages::input_mapper::utility_types::input_keyboard::LabeledShortcut(vec![$($keys.into()),*]).into(), + crate::messages::input_mapper::utility_types::keyboard::LabeledShortcut(vec![$($keys.into()),*]).into(), )) }; } diff --git a/editor/src/messages/input_mapper/utility_types/misc.rs b/editor/src/messages/input_mapper/utility_types/misc.rs index e98df2a22e..e06ed57574 100644 --- a/editor/src/messages/input_mapper/utility_types/misc.rs +++ b/editor/src/messages/input_mapper/utility_types/misc.rs @@ -1,7 +1,7 @@ -use super::input_keyboard::{KeysGroup, LabeledShortcut, all_required_modifiers_pressed}; +use super::keyboard::{KeysGroup, LabeledShortcut, all_required_modifiers_pressed}; use crate::messages::input_mapper::key_mapping::MappingVariant; -use crate::messages::input_mapper::utility_types::input_keyboard::{KeyStates, NUMBER_OF_KEYS}; -use crate::messages::input_mapper::utility_types::input_mouse::NUMBER_OF_MOUSE_BUTTONS; +use crate::messages::input_mapper::utility_types::keyboard::{KeyStates, NUMBER_OF_KEYS}; +use crate::messages::input_mapper::utility_types::pointer::NUMBER_OF_MOUSE_BUTTONS; use crate::messages::prelude::*; use core::time::Duration; diff --git a/editor/src/messages/input_mapper/utility_types/mod.rs b/editor/src/messages/input_mapper/utility_types/mod.rs index c0b5c8a21b..b7c0344c9b 100644 --- a/editor/src/messages/input_mapper/utility_types/mod.rs +++ b/editor/src/messages/input_mapper/utility_types/mod.rs @@ -1,4 +1,5 @@ -pub mod input_keyboard; -pub mod input_mouse; +pub mod keyboard; +pub mod pointer; + pub mod macros; pub mod misc; diff --git a/editor/src/messages/input_mapper/utility_types/input_mouse.rs b/editor/src/messages/input_mapper/utility_types/pointer.rs similarity index 80% rename from editor/src/messages/input_mapper/utility_types/input_mouse.rs rename to editor/src/messages/input_mapper/utility_types/pointer.rs index 420a3bdd46..f1b989950d 100644 --- a/editor/src/messages/input_mapper/utility_types/input_mouse.rs +++ b/editor/src/messages/input_mapper/utility_types/pointer.rs @@ -50,15 +50,21 @@ impl ScrollDelta { } } -// TODO: Document the difference between this and EditorMouseState +// TODO: Document the difference between this and EditorPointerState #[derive(Debug, Copy, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct MouseState { +pub struct PointerState { pub position: ViewportPosition, pub mouse_keys: MouseKeys, pub scroll_delta: ScrollDelta, + pub time: Option, + pub pressure: Option, + pub tilt: Option, + pub twist: Option, + pub wheel: Option, + pub eraser: bool, } -impl MouseState { +impl PointerState { pub fn finish_transaction(&self, drag_start: DVec2, responses: &mut VecDeque) { let drag_too_small = drag_start.distance(self.position) <= DRAG_THRESHOLD; let response = if drag_too_small { DocumentMessage::AbortTransaction } else { DocumentMessage::EndTransaction }; @@ -66,15 +72,21 @@ impl MouseState { } } -// TODO: Document the difference between this and MouseState +// TODO: Document the difference between this and PointerState #[derive(Debug, Copy, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct EditorMouseState { +pub struct EditorPointerState { pub editor_position: EditorPosition, pub mouse_keys: MouseKeys, pub scroll_delta: ScrollDelta, + pub time: Option, + pub pressure: Option, + pub tilt: Option, + pub twist: Option, + pub wheel: Option, + pub eraser: bool, } -impl EditorMouseState { +impl EditorPointerState { pub fn from_keys_and_editor_position(keys: u8, editor_position: EditorPosition) -> Self { // TODO: Some graphic tablets send key codes not mentioned in the spec. In the future we would like to support these as well. let mouse_keys = MouseKeys::from_bits_truncate(keys); @@ -82,15 +94,21 @@ impl EditorMouseState { Self { editor_position, mouse_keys, - scroll_delta: ScrollDelta::default(), + ..Default::default() } } - pub fn to_mouse_state(&self, viewport: &ViewportMessageHandler) -> MouseState { - MouseState { + pub fn to_pointer_state(&self, viewport: &ViewportMessageHandler) -> PointerState { + PointerState { position: (viewport.logical(self.editor_position) - viewport.offset()).into(), mouse_keys: self.mouse_keys, scroll_delta: self.scroll_delta, + time: self.time, + pressure: self.pressure, + tilt: self.tilt, + twist: self.twist, + wheel: self.wheel, + eraser: self.eraser, } } } diff --git a/editor/src/messages/input_preprocessor/input_preprocessor_message.rs b/editor/src/messages/input_preprocessor/input_preprocessor_message.rs index db7932fdf4..91663a8548 100644 --- a/editor/src/messages/input_preprocessor/input_preprocessor_message.rs +++ b/editor/src/messages/input_preprocessor/input_preprocessor_message.rs @@ -1,17 +1,17 @@ -use crate::messages::input_mapper::utility_types::input_keyboard::{Key, ModifierKeys}; -use crate::messages::input_mapper::utility_types::input_mouse::EditorMouseState; +use crate::messages::input_mapper::utility_types::keyboard::{Key, ModifierKeys}; +use crate::messages::input_mapper::utility_types::pointer::EditorPointerState; use crate::messages::prelude::*; #[impl_message(Message, InputPreprocessor)] #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)] pub enum InputPreprocessorMessage { - DoubleClick { editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys }, + DoubleClick { editor_mouse_state: EditorPointerState, modifier_keys: ModifierKeys }, KeyDown { key: Key, key_repeat: bool, modifier_keys: ModifierKeys }, KeyUp { key: Key, key_repeat: bool, modifier_keys: ModifierKeys }, - PointerDown { editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys }, - PointerMove { editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys }, - PointerUp { editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys }, - PointerShake { editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys }, + PointerDown { editor_mouse_state: EditorPointerState, modifier_keys: ModifierKeys }, + PointerMove { editor_mouse_state: EditorPointerState, modifier_keys: ModifierKeys }, + PointerUp { editor_mouse_state: EditorPointerState, modifier_keys: ModifierKeys }, + PointerShake { editor_mouse_state: EditorPointerState, modifier_keys: ModifierKeys }, CurrentTime { timestamp: u64 }, - WheelScroll { editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys }, + WheelScroll { editor_mouse_state: EditorPointerState, modifier_keys: ModifierKeys }, } diff --git a/editor/src/messages/input_preprocessor/input_preprocessor_message_handler.rs b/editor/src/messages/input_preprocessor/input_preprocessor_message_handler.rs index e9f5847b7b..8e29e813f9 100644 --- a/editor/src/messages/input_preprocessor/input_preprocessor_message_handler.rs +++ b/editor/src/messages/input_preprocessor/input_preprocessor_message_handler.rs @@ -1,7 +1,7 @@ use crate::application::Editor; -use crate::messages::input_mapper::utility_types::input_keyboard::{Key, KeyStates, ModifierKeys}; -use crate::messages::input_mapper::utility_types::input_mouse::{MouseButton, MouseKeys, MouseState}; +use crate::messages::input_mapper::utility_types::keyboard::{Key, KeyStates, ModifierKeys}; use crate::messages::input_mapper::utility_types::misc::FrameTimeInfo; +use crate::messages::input_mapper::utility_types::pointer::{MouseButton, MouseKeys, PointerState}; use crate::messages::prelude::*; use std::time::Duration; @@ -15,7 +15,8 @@ pub struct InputPreprocessorMessageHandler { pub frame_time: FrameTimeInfo, pub time: u64, pub keyboard: KeyStates, - pub mouse: MouseState, + pub mouse: PointerState, + pointer_down_time: f64, } #[message_handler_data] @@ -27,10 +28,10 @@ impl<'a> MessageHandler { self.update_states_of_modifier_keys(modifier_keys, responses); - let mouse_state = editor_mouse_state.to_mouse_state(viewport); - self.mouse.position = mouse_state.position; + let pointer_state = editor_mouse_state.to_pointer_state(viewport); + self.mouse.position = pointer_state.position; - for key in mouse_state.mouse_keys { + for key in pointer_state.mouse_keys { responses.add(InputMapperMessage::DoubleClick(match key { MouseKeys::LEFT => MouseButton::Left, MouseKeys::RIGHT => MouseButton::Right, @@ -60,35 +61,35 @@ impl<'a> MessageHandler { self.update_states_of_modifier_keys(modifier_keys, responses); - let mouse_state = editor_mouse_state.to_mouse_state(viewport); - self.mouse.position = mouse_state.position; + let pointer_state = editor_mouse_state.to_pointer_state(viewport); + self.mouse.position = pointer_state.position; - self.translate_mouse_event(mouse_state, true, responses); + self.translate_mouse_event(pointer_state, true, responses); } InputPreprocessorMessage::PointerMove { editor_mouse_state, modifier_keys } => { self.update_states_of_modifier_keys(modifier_keys, responses); - let mouse_state = editor_mouse_state.to_mouse_state(viewport); - self.mouse.position = mouse_state.position; + let pointer_state = editor_mouse_state.to_pointer_state(viewport); + self.mouse.position = pointer_state.position; responses.add(InputMapperMessage::PointerMove); // While any pointer button is already down, additional button down events are not reported, but they are sent as `pointermove` events - self.translate_mouse_event(mouse_state, false, responses); + self.translate_mouse_event(pointer_state, false, responses); } InputPreprocessorMessage::PointerUp { editor_mouse_state, modifier_keys } => { self.update_states_of_modifier_keys(modifier_keys, responses); - let mouse_state = editor_mouse_state.to_mouse_state(viewport); - self.mouse.position = mouse_state.position; + let pointer_state = editor_mouse_state.to_pointer_state(viewport); + self.mouse.position = pointer_state.position; - self.translate_mouse_event(mouse_state, false, responses); + self.translate_mouse_event(pointer_state, false, responses); } InputPreprocessorMessage::PointerShake { editor_mouse_state, modifier_keys } => { self.update_states_of_modifier_keys(modifier_keys, responses); - let mouse_state = editor_mouse_state.to_mouse_state(viewport); - self.mouse.position = mouse_state.position; + let pointer_state = editor_mouse_state.to_pointer_state(viewport); + self.mouse.position = pointer_state.position; responses.add(InputMapperMessage::PointerShake); } @@ -100,9 +101,9 @@ impl<'a> MessageHandler { self.update_states_of_modifier_keys(modifier_keys, responses); - let mouse_state = editor_mouse_state.to_mouse_state(viewport); - self.mouse.position = mouse_state.position; - self.mouse.scroll_delta = mouse_state.scroll_delta; + let pointer_state = editor_mouse_state.to_pointer_state(viewport); + self.mouse.position = pointer_state.position; + self.mouse.scroll_delta = pointer_state.scroll_delta; responses.add(InputMapperMessage::WheelScroll); } @@ -116,7 +117,7 @@ impl<'a> MessageHandler) { + fn translate_mouse_event(&mut self, mut new_state: PointerState, allow_first_button_down: bool, responses: &mut VecDeque) { let click_mappings = [ (MouseKeys::LEFT, Key::MouseLeft), (MouseKeys::RIGHT, Key::MouseRight), @@ -144,6 +145,13 @@ impl InputPreprocessorMessageHandler { } } + let raw_time = new_state.time.unwrap_or(self.time as f64); + if self.mouse.mouse_keys == MouseKeys::empty() { + self.pointer_down_time = raw_time; + } + let interacting = (self.mouse.mouse_keys | new_state.mouse_keys) != MouseKeys::empty(); + new_state.time = interacting.then_some(raw_time - self.pointer_down_time); + self.mouse = new_state; } @@ -185,18 +193,17 @@ impl InputPreprocessorMessageHandler { #[cfg(test)] mod test { - use crate::messages::input_mapper::utility_types::input_keyboard::{Key, ModifierKeys}; - use crate::messages::input_mapper::utility_types::input_mouse::{EditorMouseState, MouseKeys, ScrollDelta}; + use crate::messages::input_mapper::utility_types::keyboard::{Key, ModifierKeys}; + use crate::messages::input_mapper::utility_types::pointer::EditorPointerState; use crate::messages::prelude::*; #[test] fn process_action_mouse_move_handle_modifier_keys() { let mut input_preprocessor = InputPreprocessorMessageHandler::default(); - let editor_mouse_state = EditorMouseState { + let editor_mouse_state = EditorPointerState { editor_position: (4., 809.).into(), - mouse_keys: MouseKeys::default(), - scroll_delta: ScrollDelta::default(), + ..Default::default() }; let modifier_keys = ModifierKeys::ALT; let message = InputPreprocessorMessage::PointerMove { editor_mouse_state, modifier_keys }; @@ -216,7 +223,7 @@ mod test { fn process_action_mouse_down_handle_modifier_keys() { let mut input_preprocessor = InputPreprocessorMessageHandler::default(); - let editor_mouse_state = EditorMouseState::default(); + let editor_mouse_state = EditorPointerState::default(); let modifier_keys = ModifierKeys::CONTROL; let message = InputPreprocessorMessage::PointerDown { editor_mouse_state, modifier_keys }; @@ -235,7 +242,7 @@ mod test { fn process_action_mouse_up_handle_modifier_keys() { let mut input_preprocessor = InputPreprocessorMessageHandler::default(); - let editor_mouse_state = EditorMouseState::default(); + let editor_mouse_state = EditorPointerState::default(); let modifier_keys = ModifierKeys::SHIFT; let message = InputPreprocessorMessage::PointerUp { editor_mouse_state, modifier_keys }; diff --git a/editor/src/messages/layout/layout_message_handler.rs b/editor/src/messages/layout/layout_message_handler.rs index a1e395374f..b8f5623e44 100644 --- a/editor/src/messages/layout/layout_message_handler.rs +++ b/editor/src/messages/layout/layout_message_handler.rs @@ -1,9 +1,9 @@ -use crate::messages::input_mapper::utility_types::input_keyboard::KeysGroup; +use crate::messages::input_mapper::utility_types::keyboard::KeysGroup; use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier; use crate::messages::prelude::*; use graphene_std::color::SRGBA8; -use graphene_std::vector::style::FillChoiceUI; +use graphene_std::vector::style::FillChoice; use serde_json::Value; use std::collections::HashMap; @@ -117,23 +117,26 @@ impl LayoutMessageHandler { } LayoutGroup::Table(WidgetTable { rows, .. }) => { for (row_index, row) in rows.iter().enumerate() { - for (value_index, value) in row.iter().enumerate() { - // Return if this is the correct ID - if value.widget_id == widget_id { - widget_path.push(row_index); - widget_path.push(value_index); - return Some((value, widget_path)); - } + for (cell_index, cell) in row.iter().enumerate() { + for (value_index, value) in cell.iter().enumerate() { + // Return if this is the correct ID + if value.widget_id == widget_id { + widget_path.push(row_index); + widget_path.push(cell_index); + widget_path.push(value_index); + return Some((value, widget_path)); + } - if let Widget::PopoverButton(popover) = &*value.widget { - stack.extend( - popover - .popover_layout - .0 - .iter() - .enumerate() - .map(|(child, val)| ([widget_path.as_slice(), &[row_index, value_index, child]].concat(), val)), - ); + if let Widget::PopoverButton(popover) = &*value.widget { + stack.extend( + popover + .popover_layout + .0 + .iter() + .enumerate() + .map(|(child, val)| ([widget_path.as_slice(), &[row_index, cell_index, value_index, child]].concat(), val)), + ); + } } } } @@ -194,12 +197,16 @@ impl LayoutMessageHandler { let callback_message = match action { WidgetValueAction::Commit => (color_button.on_commit.callback)(&()), WidgetValueAction::Update => { - let Ok(fill_choice_ui) = serde_json::from_value::(value) else { - warn!("ColorInput update was not able to be parsed as FillChoiceUI: {color_button:?}"); + let Ok(fill_choice) = serde_json::from_value::>(value) else { + warn!("ColorInput update was not able to be parsed as FillChoice: {color_button:?}"); return; }; - color_button.value = fill_choice_ui; - (color_button.on_update.callback)(color_button) + // The stored copy has to keep mirroring what the frontend was last sent, so the rebuilt layout still + // diffs against it and syncs picks that leave the swatch unchanged; the callback borrows the new one + let previous_value = std::mem::replace(&mut color_button.value, fill_choice); + let update_message = (color_button.on_update.callback)(color_button); + color_button.value = previous_value; + update_message } }; @@ -528,9 +535,28 @@ fn populate_computed_display_fields(layout: &mut Layout) { color_input.chosen_gradient = color_input.value.to_css_background_image(); } Widget::SpectrumInput(spectrum_input) => { - spectrum_input.track_css = spectrum_input.track.to_css_linear_gradient(); - spectrum_input.track_start_css = spectrum_input.track.color.first().map(|color| color.to_css_hex()).unwrap_or_else(|| "black".to_string()); - spectrum_input.track_end_css = spectrum_input.track.color.last().map(|color| color.to_css_hex()).unwrap_or_else(|| "black".to_string()); + // The track strip spans exactly 0 to 1, which no spread affects, so the widget carries no spread of its own + let settings = graphene_std::vector::style::GradientSettings { + spread: Default::default(), + cyclic: spectrum_input.track_cyclic, + space: spectrum_input.track_space, + hue_direction: spectrum_input.track_hue_direction, + interpolation: spectrum_input.track_interpolation, + }; + let track_gradient = graphene_std::vector::style::Gradient::from(&spectrum_input.track); + spectrum_input.track_samples = track_gradient + .interpolated_samples_or_black(settings) + .into_iter() + .map(|(position, color, _)| SpectrumSample::new(position, color)) + .collect(); + // The end caps sample the track's boundary colors, which a cyclic wrap makes the wrapped interval's boundary-crossing color rather than the outermost stops' + let track_evaluator = track_gradient.evaluator(settings); + let cap = |t: f64| { + let color = track_evaluator.evaluate(t); + SRGBA8::from(color).to_css_hex() + }; + spectrum_input.track_start_css = cap(0.); + spectrum_input.track_end_css = cap(1.); } Widget::ColorComparisonInput(comparison) => { let contrasting = |color: Option| color.map_or(SRGBA8::BLACK, |color| color.contrasting_text_color()).to_css_hex(); @@ -550,7 +576,6 @@ fn evaluate_and_validate_number_input(expression: &str, number_input: &NumberInp let value = math_parser::evaluate(expression) .inspect_err(|err| error!("Math parser error on \"{expression}\": {err}")) .ok()? - .0 .inspect_err(|err| error!("Math evaluate error on \"{expression}\": {err}")) .ok()?; diff --git a/editor/src/messages/layout/utility_types/layout_widget.rs b/editor/src/messages/layout/utility_types/layout_widget.rs index 76e2a18c5e..5973995100 100644 --- a/editor/src/messages/layout/utility_types/layout_widget.rs +++ b/editor/src/messages/layout/utility_types/layout_widget.rs @@ -2,7 +2,7 @@ use super::widgets::button_widgets::*; use super::widgets::input_widgets::*; use super::widgets::label_widgets::*; use crate::application::generate_uuid; -use crate::messages::input_mapper::utility_types::input_keyboard::KeysGroup; +use crate::messages::input_mapper::utility_types::keyboard::KeysGroup; use crate::messages::prelude::*; use std::collections::HashMap; use std::collections::hash_map::DefaultHasher; @@ -273,7 +273,7 @@ impl<'a> Iterator for WidgetIter<'a> { self.next() } Some(LayoutGroup::Table(WidgetTable { rows, .. })) => { - self.table.extend(rows.iter().flatten().rev()); + self.table.extend(rows.iter().flatten().flatten().rev()); self.next() } Some(LayoutGroup::Section(WidgetSection { layout, .. })) => { @@ -325,7 +325,7 @@ impl<'a> Iterator for WidgetIterMut<'a> { self.next() } Some(LayoutGroup::Table(WidgetTable { rows, .. })) => { - self.table.extend(rows.iter_mut().flatten().rev()); + self.table.extend(rows.iter_mut().flatten().flatten().rev()); self.next() } Some(LayoutGroup::Section(WidgetSection { layout, .. })) => { @@ -365,8 +365,9 @@ pub struct WidgetRow { #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Default, Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub struct WidgetTable { + /// Rows of cells, each cell holding one or more widgets laid out inline. #[serde(rename = "tableWidgets")] - pub rows: Vec>, + pub rows: Vec>>, pub unstyled: bool, } @@ -412,7 +413,14 @@ impl LayoutGroup { Self::Column(WidgetColumn { widgets }) } + /// A table with one widget per cell. pub fn table(rows: Vec>, unstyled: bool) -> Self { + let rows = rows.into_iter().map(|row| row.into_iter().map(|widget| vec![widget]).collect()).collect(); + Self::Table(WidgetTable { rows, unstyled }) + } + + /// A table whose cells may each hold multiple widgets laid out inline. + pub fn table_of_cells(rows: Vec>>, unstyled: bool) -> Self { Self::Table(WidgetTable { rows, unstyled }) } @@ -600,13 +608,17 @@ impl Diffable for LayoutGroup { } } Self::Table(WidgetTable { rows, .. }) => { - for (row_idx, row) in rows.iter().enumerate() { - for (col_idx, widget) in row.iter().enumerate() { - widget_path.push(row_idx); - widget_path.push(col_idx); - widget.collect_checkbox_ids(layout_target, widget_path, checkbox_map); - widget_path.pop(); - widget_path.pop(); + for (row_index, row) in rows.iter().enumerate() { + for (column_index, cell) in row.iter().enumerate() { + for (widget_index, widget) in cell.iter().enumerate() { + widget_path.push(row_index); + widget_path.push(column_index); + widget_path.push(widget_index); + widget.collect_checkbox_ids(layout_target, widget_path, checkbox_map); + widget_path.pop(); + widget_path.pop(); + widget_path.pop(); + } } } } @@ -626,13 +638,17 @@ impl Diffable for LayoutGroup { } } Self::Table(WidgetTable { rows, .. }) => { - for (row_idx, row) in rows.iter_mut().enumerate() { - for (col_idx, widget) in row.iter_mut().enumerate() { - widget_path.push(row_idx); - widget_path.push(col_idx); - widget.replace_widget_ids(layout_target, widget_path, checkbox_map); - widget_path.pop(); - widget_path.pop(); + for (row_index, row) in rows.iter_mut().enumerate() { + for (column_index, cell) in row.iter_mut().enumerate() { + for (widget_index, widget) in cell.iter_mut().enumerate() { + widget_path.push(row_index); + widget_path.push(column_index); + widget_path.push(widget_index); + widget.replace_widget_ids(layout_target, widget_path, checkbox_map); + widget_path.pop(); + widget_path.pop(); + widget_path.pop(); + } } } } diff --git a/editor/src/messages/layout/utility_types/widgets/button_widgets.rs b/editor/src/messages/layout/utility_types/widgets/button_widgets.rs index 82ac8b8e3c..618c90cc6d 100644 --- a/editor/src/messages/layout/utility_types/widgets/button_widgets.rs +++ b/editor/src/messages/layout/utility_types/widgets/button_widgets.rs @@ -4,7 +4,8 @@ use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::portfolio::document::node_graph::utility_types::FrontendGraphDataType; use crate::messages::tool::tool_messages::tool_prelude::WidgetCallback; use derivative::*; -use graphene_std::vector::style::FillChoiceUI; +use graphene_std::color::SRGBA8; +use graphene_std::vector::style::FillChoice; use graphite_proc_macros::WidgetBuilder; #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] @@ -191,9 +192,9 @@ pub struct ImageButton { pub struct ColorInput { // Content #[widget_builder(constructor)] - pub value: FillChoiceUI, + pub value: FillChoice, /// CSS `linear-gradient(...)` (or solid-color stand-in) for the swatch's `background-image`. Auto-populated from `value` at layout-send time. - /// `None` when `value` is `FillChoiceUI::None`, in which case the frontend uses its "none" fallback styling. + /// `None` when `value` is `FillChoice::::None`, in which case the frontend uses its "none" fallback styling. #[serde(rename = "chosenGradient")] #[widget_builder(skip)] pub chosen_gradient: Option, @@ -232,6 +233,24 @@ pub struct ColorInput { pub on_commit: WidgetCallback<()>, } +/// Shortens a breadcrumb label to fit the trail, replacing the tail with an ellipsis. +/// Quotes delimit a string value, so a quoted label budgets only the text between them. +pub fn truncate_breadcrumb_label(label: &str) -> String { + const MAX_CHARACTERS: usize = 40; + + let quoted = label.len() >= 2 && label.starts_with('"') && label.ends_with('"'); + let content = if quoted { &label[1..label.len() - 1] } else { label }; + + if content.chars().count() <= MAX_CHARACTERS { + return label.to_string(); + } + + let mut truncated: String = content.chars().take(MAX_CHARACTERS - 1).collect(); + truncated.push('…'); + + if quoted { format!("\"{truncated}\"") } else { truncated } +} + #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Clone, serde::Serialize, serde::Deserialize, Derivative, Default, WidgetBuilder)] #[derivative(Debug, PartialEq)] diff --git a/editor/src/messages/layout/utility_types/widgets/input_widgets.rs b/editor/src/messages/layout/utility_types/widgets/input_widgets.rs index 727b353f5b..cc49fbbaf9 100644 --- a/editor/src/messages/layout/utility_types/widgets/input_widgets.rs +++ b/editor/src/messages/layout/utility_types/widgets/input_widgets.rs @@ -1,12 +1,13 @@ use crate::messages::frontend::IconName; use crate::messages::input_mapper::utility_types::misc::ActionShortcut; use crate::messages::layout::utility_types::widget_prelude::*; +use crate::messages::message::Message; use crate::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier; use derivative::*; use graphene_std::Color; use graphene_std::color::SRGBA8; use graphene_std::transform::ReferencePoint; -use graphene_std::vector::style::{FillChoiceUI, GradientStopsUI}; +use graphene_std::vector::style::{FillChoice, GradientHueDirection, GradientInterpolation, GradientSpace, GradientStops}; use graphite_proc_macros::WidgetBuilder; #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] @@ -150,6 +151,35 @@ impl std::hash::Hash for MenuListEntry { } } +impl MenuListEntry { + /// One entry per variant of a choice type enum, keeping the choice type's section groupings, shown as the variant's label alongside its icon when it has one. + pub fn sections_from_choice_type(to_message: impl Fn(E) -> Message + Clone + Send + Sync + 'static) -> MenuListEntrySections + where + E: graphene_std::choice_type::ChoiceTypeStatic + 'static, + { + E::list() + .iter() + .map(|section| { + section + .iter() + .map(|(variant, metadata)| { + let to_message = to_message.clone(); + let variant = *variant; + + let entry = MenuListEntry::new(metadata.name) + .label(metadata.label) + .tooltip_label(metadata.label) + .tooltip_description(metadata.description.unwrap_or_default()) + .on_update(move |_| to_message(variant)); + + if let Some(icon) = metadata.icon { entry.icon(icon) } else { entry } + }) + .collect() + }) + .collect() + } +} + #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Clone, serde::Serialize, serde::Deserialize, Derivative, WidgetBuilder)] #[derivative(Debug, PartialEq, Default)] @@ -344,6 +374,30 @@ pub struct RadioEntryData { pub on_commit: WidgetCallback<()>, } +impl RadioEntryData { + /// One entry per variant of a choice type enum, shown as the variant's icon when it has one and its text label otherwise. + pub fn list_from_choice_type(to_message: impl Fn(E) -> Message + Clone + Send + Sync + 'static) -> Vec + where + E: graphene_std::choice_type::ChoiceTypeStatic + 'static, + { + E::list() + .iter() + .flat_map(|section| section.iter()) + .map(|(variant, metadata)| { + let to_message = to_message.clone(); + let variant = *variant; + + let entry = RadioEntryData::new(metadata.name) + .tooltip_label(metadata.label) + .tooltip_description(metadata.description.unwrap_or_default()) + .on_update(move |_| to_message(variant)); + + if let Some(icon) = metadata.icon { entry.icon(icon) } else { entry.label(metadata.label) } + }) + .collect() + } +} + #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Clone, serde::Serialize, serde::Deserialize, Derivative, WidgetBuilder)] #[derivative(Debug, PartialEq, Default)] @@ -520,7 +574,7 @@ pub struct ColorPresetsInput { #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)] pub enum ColorPresetsInputUpdate { - Preset(FillChoiceUI), + Preset(FillChoice), EyedropperColorCode(String), } @@ -531,16 +585,28 @@ pub struct SpectrumInput { // Content /// The colored gradient drawn behind the markers (display-only, caller-owned). #[widget_builder(constructor)] - pub track: GradientStopsUI, - /// CSS `linear-gradient(...)` string for the track strip's `background-image`. Auto-populated from `track` at layout-send time. - #[serde(rename = "trackCSS")] + pub track: GradientStops, + /// The color space the track's stops interpolate in, used to bake `track_samples`. Not sent to the frontend. + #[serde(skip)] + pub track_space: GradientSpace, + /// Whether the track's stops wrap as a cycle, used to bake `track_samples` and by the frontend to draw the wrapped interval's midpoint diamond. + #[serde(rename = "trackCyclic")] + pub track_cyclic: bool, + /// The hue direction the track's stops interpolate with in a polar space, used to bake `track_samples`. Not sent to the frontend. + #[serde(skip)] + pub track_hue_direction: GradientHueDirection, + /// The path the track's stops interpolate along, used to bake `track_samples` and by the frontend to suppress the midpoint diamonds when stepped. + #[serde(rename = "trackInterpolation")] + pub track_interpolation: GradientInterpolation, + /// Straight-alpha samples the frontend draws as the stops of an SVG gradient filling the track strip. Auto-populated from `track` at layout-send time. + #[serde(rename = "trackSamples")] #[widget_builder(skip)] - pub track_css: String, - /// Hex string for the track strip's leftmost solid-color end-cap. Auto-populated from `track`'s first stop. + pub track_samples: Vec, + /// Hex string for the track strip's leftmost solid-color end-cap. Auto-populated by evaluating `track` at position 0. #[serde(rename = "trackStartCSS")] #[widget_builder(skip)] pub track_start_css: String, - /// Hex string for the track strip's rightmost solid-color end-cap. Auto-populated from `track`'s last stop. + /// Hex string for the track strip's rightmost solid-color end-cap. Auto-populated by evaluating `track` at position 1. #[serde(rename = "trackEndCSS")] #[widget_builder(skip)] pub track_end_css: String, @@ -579,22 +645,46 @@ pub struct SpectrumInput { #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)] pub struct SpectrumMarker { - /// Position (0..1) of the marker along the spectrum track. + /// Position of the marker along the spectrum track, normally from 0 to 1. A shifted or stretched non-cyclic ramp can + /// place it outside that range, where the track draws only the markers falling within its visible span. position: f64, - /// Position (0..1) of the midpoint between this marker and the next, used only if `show_midpoints` is true. The last marker's value is ignored. + /// Position (0..1) of the midpoint between this marker and the next, used only if `show_midpoints` is true. + /// The last marker's value controls the wrapped interval when `track_cyclic` is set, and is otherwise ignored. midpoint: f64, - /// CSS color string for the marker handle's fill. Set via `SpectrumMarker::new` from a linear [`Color`]. + /// CSS color string for the marker handle's fill. Set via `SpectrumMarker::new` from a linear [`Color`], + /// discarding any transparency so the handle always shows the RGB that steers the interpolation. #[serde(rename = "handleColorCSS")] handle_color_css: String, } impl SpectrumMarker { pub fn new(position: f64, midpoint: f64, handle_color: Color) -> Self { - let handle_color_css = SRGBA8::from(handle_color).to_css_hex(); + let handle_color_css = format!("#{}", SRGBA8::from(handle_color).to_rgb_hex()); Self { position, midpoint, handle_color_css } } } +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct SpectrumSample { + /// Position (0..1) of the sample along the spectrum track, drawn as the SVG stop's `offset`. + position: f64, + /// `#rrggbb` hex of the sample's color, drawn as the SVG stop's `stop-color`. + color: String, + /// Straight alpha (0..1) of the sample, drawn as the SVG stop's `stop-opacity`. + alpha: f32, +} + +impl SpectrumSample { + pub fn new(position: f64, color: Color) -> Self { + Self { + position, + color: format!("#{}", SRGBA8::from(color).to_rgb_hex()), + alpha: color.a(), + } + } +} + #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)] pub enum SpectrumInputUpdate { diff --git a/editor/src/messages/layout/utility_types/widgets/label_widgets.rs b/editor/src/messages/layout/utility_types/widgets/label_widgets.rs index a1975b9793..871dd9752e 100644 --- a/editor/src/messages/layout/utility_types/widgets/label_widgets.rs +++ b/editor/src/messages/layout/utility_types/widgets/label_widgets.rs @@ -64,6 +64,8 @@ pub struct TextLabel { pub italic: bool, pub monospace: bool, pub multiline: bool, + pub enquote: bool, + pub selectable: bool, #[serde(rename = "centerAlign")] pub center_align: bool, #[serde(rename = "tableAlign")] diff --git a/editor/src/messages/portfolio/document/data_panel/data_panel_message.rs b/editor/src/messages/portfolio/document/data_panel/data_panel_message.rs index a92808f966..9efc67eba8 100644 --- a/editor/src/messages/portfolio/document/data_panel/data_panel_message.rs +++ b/editor/src/messages/portfolio/document/data_panel/data_panel_message.rs @@ -37,8 +37,7 @@ pub enum PathStep { #[derive(PartialEq, Eq, Clone, Copy, Default, Debug, serde::Serialize, serde::Deserialize)] pub enum VectorTableTab { #[default] - Properties, Points, Segments, - Regions, + Handles, } diff --git a/editor/src/messages/portfolio/document/data_panel/data_panel_message_handler.rs b/editor/src/messages/portfolio/document/data_panel/data_panel_message_handler.rs index c9bda31717..d17e67928a 100644 --- a/editor/src/messages/portfolio/document/data_panel/data_panel_message_handler.rs +++ b/editor/src/messages/portfolio/document/data_panel/data_panel_message_handler.rs @@ -3,17 +3,33 @@ use crate::messages::layout::utility_types::layout_widget::{Layout, LayoutGroup, use crate::messages::portfolio::document::data_panel::{DataPanelMessage, PathStep}; use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface; use crate::messages::prelude::*; +use crate::messages::tool::common_functionality::shapes::shape_utility::format_rounded; use crate::messages::tool::tool_messages::tool_prelude::*; use glam::{Affine2, DAffine2, Vec2}; use graph_craft::document::NodeId; +use graphene_std::animation::RealTimeMode; use graphene_std::blending::BlendMode; use graphene_std::color::SRGBA8; -use graphene_std::gradient::GradientStops; -use graphene_std::list::List; +use graphene_std::extract_xy::XY; +use graphene_std::gradient::Gradient; +use graphene_std::list::{Item, List, NodeIdPath}; +use graphene_std::math::float_noise::round_away_float_noise; +use graphene_std::raster::{ + CellularDistanceFunction, CellularReturnType, DomainWarpType, FractalType, LuminanceCalculation, NoiseType, RedGreenBlue, RedGreenBlueAlpha, RelativeAbsolute, SelectiveColorChoice, +}; use graphene_std::raster_types::{CPU, GPU, Raster}; -use graphene_std::vector::Vector; -use graphene_std::vector::style::{FillChoice, FillChoiceUI, GradientSpreadMethod, GradientType}; -use graphene_std::{Artboard, Color, Graphic}; +use graphene_std::text::TextAlign; +use graphene_std::text_nodes::StringCapitalization; +use graphene_std::transform::{ReferencePoint, ScaleType}; +use graphene_std::vector::misc::{ + ArcType, BezierHandles, BooleanOperation, BoxCorners, CentroidType, ExtrudeJoiningAlgorithm, GridType, InterpolationDistribution, MergeByDistanceAlgorithm, PointSpacingType, RowsOrColumns, + SpiralType, +}; +use graphene_std::vector::style::{ + DashPattern, FillChoice, GradientForm, GradientHueDirection, GradientInterpolation, GradientRamp, GradientSettings, GradientSpace, GradientSpread, StrokeAlign, StrokeCap, StrokeJoin, +}; +use graphene_std::vector::{QRCodeErrorCorrectionLevel, Vector}; +use graphene_std::{Appearance, Artboard, Color, Cover, Coverage, Graphic}; use std::any::Any; use std::sync::Arc; @@ -87,6 +103,7 @@ impl DataPanelMessageHandler { desired_path: &mut self.element_path, network_interface: &*network_interface, node_lookup_network_path: Vec::new(), + gradient_settings: GradientSettings::default(), breadcrumbs: Vec::new(), vector_table_tab: self.active_vector_table_tab, }; @@ -133,7 +150,8 @@ impl DataPanelMessageHandler { // Element path breadcrumbs if !layout_data.breadcrumbs.is_empty() { - let breadcrumb = BreadcrumbTrailButtons::new(layout_data.breadcrumbs) + let labels = layout_data.breadcrumbs.iter().map(|label| truncate_breadcrumb_label(label)).collect(); + let breadcrumb = BreadcrumbTrailButtons::new(labels) .on_update(|&len| DataPanelMessage::TruncateElementPath { len: len as usize }.into()) .widget_instance(); widgets.push(breadcrumb); @@ -158,6 +176,9 @@ struct LayoutData<'a> { /// Defaults to root (`&[]`); `List` rendering temporarily sets it to the path's prefix so nested /// layers (e.g. inside a Ctrl+M-merged custom subgraph) resolve correctly. node_lookup_network_path: Vec, + /// The whole-ramp settings to preview a `Gradient` element with, since they live in the attributes beside it + /// rather than in the stop list itself. The enclosing `Item`/`List` sets it to the owning row's attributes. + gradient_settings: GradientSettings, breadcrumbs: Vec, vector_table_tab: VectorTableTab, } @@ -175,16 +196,15 @@ macro_rules! generate_layout_downcast { } // TODO: We simply try all these types sequentially. Find a better strategy. fn generate_layout(introspected_data: &Arc, data: &mut LayoutData) -> Option> { - // `List` is interpreted as a path (e.g. the value produced by `path_of_subgraph`), shown as a + // `NodeIdPath` is interpreted as a path (e.g. the value produced by `path_of_subgraph`), shown as a // `List` where each item's NodeId resolves against the prefix made up of the items above it. + if let Some(path) = introspected_data.downcast_ref::() { + return Some(table_node_id_path_layout_with_breadcrumb(&path.0, data)); + } + // The path's bare list form, introspected off a leveled wire. if let Some(list) = introspected_data.downcast_ref::>() { return Some(table_node_id_path_layout_with_breadcrumb(list, data)); } - // The path's plain value form, produced by `path_of_subgraph` on leveled wires. - if let Some(path) = introspected_data.downcast_ref::>() { - let list: List = path.iter().copied().map(graphene_std::list::Item::new_from_element).collect(); - return Some(table_node_id_path_layout_with_breadcrumb(&list, data)); - } generate_layout_downcast!(introspected_data, data, [ List, List, @@ -192,27 +212,110 @@ fn generate_layout(introspected_data: &Arc>, List>, List, - List, + List, List, List, - List, + List, + List, + List, + List, + List, List, + List, List, List, - List, - List, - GradientStops, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + Artboard, + Graphic, + Vector, + Raster, + Raster, + Color, + Gradient, + String, f64, + f32, u32, u64, + i32, + i64, bool, - String, - Option, DVec2, DAffine2, BlendMode, - GradientType, - GradientSpreadMethod, + GradientForm, + GradientSpread, + GradientSpace, + GradientHueDirection, + GradientInterpolation, + DashPattern, + BoxCorners, + StrokeJoin, + StrokeAlign, + StrokeCap, + MergeByDistanceAlgorithm, + ExtrudeJoiningAlgorithm, + PointSpacingType, + StringCapitalization, + LuminanceCalculation, + RedGreenBlue, + RedGreenBlueAlpha, + RelativeAbsolute, + SelectiveColorChoice, + XY, + ScaleType, + ReferencePoint, + CentroidType, + BooleanOperation, + NoiseType, + FractalType, + CellularDistanceFunction, + CellularReturnType, + DomainWarpType, + RealTimeMode, + GridType, + ArcType, + SpiralType, + TextAlign, + QRCodeErrorCorrectionLevel, + InterpolationDistribution, + RowsOrColumns, ]) } @@ -220,6 +323,10 @@ fn column_headings(value: &[&str]) -> Vec { value.iter().map(|text| TextLabel::new(*text).widget_instance()).collect() } +fn single_widget_cells(widgets: Vec) -> Vec> { + widgets.into_iter().map(|widget| vec![widget]).collect() +} + fn label(x: impl Into) -> Vec { let error = vec![TextLabel::new(x).widget_instance()]; vec![LayoutGroup::row(error)] @@ -232,24 +339,80 @@ trait TableItemLayout { data.breadcrumbs.push(self.identifier()); self.value_page(data) } - /// Renders this value as a single inline widget inside an item of a `List`. - /// `target` is the [`PathStep`] to push when the widget is clicked to drill into the value. + /// Renders this value as the inline widgets filling one table cell inside an item of a `List`. + /// `target` is the [`PathStep`] to push when a widget is clicked to drill into the value. /// `data` provides shared context (notably `network_interface`) for types whose label or content /// depends on lookup beyond their own value (e.g. `NodeId` resolving a node's display name). - /// The default is a button labeled with `identifier()`. Types whose values are best shown - /// inline (colors, transforms, primitives, etc.) override this to ignore `target` and - /// return a richer non-navigating widget. - fn value_widget(&self, target: PathStep, _data: &LayoutData) -> WidgetInstance { - TextButton::new(self.identifier()) - .on_update(move |_| DataPanelMessage::PushToElementPath { step: target.clone() }.into()) - .narrow(true) - .widget_instance() + /// The default is a single button labeled with `identifier()`. Types whose values are best shown + /// inline (colors, transforms, primitives, etc.) override this to ignore `target` and return a + /// richer non-navigating widget, optionally joined by companions like a drill-in button. + fn value_widgets(&self, target: PathStep, _data: &LayoutData) -> Vec { + vec![ + TextButton::new(self.identifier()) + .on_update(move |_| DataPanelMessage::PushToElementPath { step: target.clone() }.into()) + .narrow(true) + .widget_instance(), + ] } fn value_page(&self, _data: &mut LayoutData) -> Vec { vec![] } } +impl TableItemLayout for Item { + fn type_name() -> &'static str { + T::type_name() + } + fn identifier(&self) -> String { + self.element().identifier() + } + fn value_page(&self, data: &mut LayoutData) -> Vec { + if let Some(step) = data.desired_path.get(data.current_depth).cloned() { + match step { + PathStep::Element(_) => { + data.current_depth += 1; + let result = self.element().layout_with_breadcrumb(data); + data.current_depth -= 1; + return result; + } + PathStep::Attribute { key, .. } => { + if let Some(any) = self.attributes().get_any(&key) { + data.current_depth += 1; + if let Some(result) = drilldown_attribute_layout(any, data) { + data.current_depth -= 1; + return result; + } + data.current_depth -= 1; + warn!("Drilldown unsupported for attribute {key:?}"); + } + data.desired_path.truncate(data.current_depth); + } + } + } + + let attribute_keys: Vec = self.attributes().keys().map(str::to_string).collect(); + + // A single element, so no leading ID column, unlike the `List` table + let saved_gradient_settings = data.gradient_settings; + data.gradient_settings = GradientSettings::from_item_attributes(self); + let mut values = vec![self.element().value_widgets(PathStep::Element(0), data)]; + data.gradient_settings = saved_gradient_settings; + for key in &attribute_keys { + let target = PathStep::Attribute { row: 0, key: key.clone() }; + let cell = self.attributes().get_any(key).and_then(|any| dispatch_value_widgets(any, target, data)).unwrap_or_else(|| { + let text = self.attributes().display_value(key, display_value_override).unwrap_or_else(|| "-".to_string()); + vec![TextLabel::new(text).narrow(true).widget_instance()] + }); + values.push(cell); + } + + let mut column_names = vec!["element"]; + column_names.extend(attribute_keys.iter().map(|s| s.as_str())); + + vec![LayoutGroup::table_of_cells(vec![single_widget_cells(column_headings(&column_names)), values], false)] + } +} + impl TableItemLayout for List { fn type_name() -> &'static str { "List" @@ -291,14 +454,20 @@ impl TableItemLayout for List { let mut rows = (0..self.len()) .map(|index| { let element = self.element(index).unwrap(); - let mut values = vec![TextLabel::new(format!("{index}")).narrow(true).widget_instance(), element.value_widget(PathStep::Element(index), data)]; + let saved_gradient_settings = data.gradient_settings; + data.gradient_settings = GradientSettings::from_list_row_attributes(self, index); + let mut values = vec![ + vec![TextLabel::new(format!("{index}")).narrow(true).widget_instance()], + element.value_widgets(PathStep::Element(index), data), + ]; + data.gradient_settings = saved_gradient_settings; for key in &attribute_keys { let target = PathStep::Attribute { row: index, key: key.clone() }; - let widget = self.attribute_any(key, index).and_then(|any| dispatch_value_widget(any, target, data)).unwrap_or_else(|| { + let cell = self.attribute_any(key, index).and_then(|any| dispatch_value_widgets(any, target, data)).unwrap_or_else(|| { let text = self.attribute_display_value(key, index, display_value_override).unwrap_or_else(|| "-".to_string()); - TextLabel::new(text).narrow(true).widget_instance() + vec![TextLabel::new(text).narrow(true).widget_instance()] }); - values.push(widget); + values.push(cell); } values }) @@ -306,9 +475,9 @@ impl TableItemLayout for List { let mut column_names = vec!["", "element"]; column_names.extend(attribute_keys.iter().map(|s| s.as_str())); - rows.insert(0, column_headings(&column_names)); + rows.insert(0, single_widget_cells(column_headings(&column_names))); - vec![LayoutGroup::table(rows, false)] + vec![LayoutGroup::table_of_cells(rows, false)] } } @@ -328,19 +497,122 @@ impl TableItemLayout for Artboard<'_> { } } +impl TableItemLayout for graphene_std::brush::Stroke { + fn type_name() -> &'static str { + "Stroke" + } + fn identifier(&self) -> String { + format!("Stroke ({} {})", self.len(), if self.len() == 1 { "sample" } else { "samples" }) + } +} + +impl TableItemLayout for DashPattern { + fn type_name() -> &'static str { + "DashPattern" + } + fn identifier(&self) -> String { + "DashPattern".to_string() + } + // The wrapping `Item` already contributes the breadcrumb; the inner list supplies the next level + fn layout_with_breadcrumb(&self, data: &mut LayoutData) -> Vec { + self.value_page(data) + } + // Label the spreadsheet's element button with the inner list's identifier, like Artboard + fn value_widgets(&self, target: PathStep, data: &LayoutData) -> Vec { + self.0.value_widgets(target, data) + } + fn value_page(&self, data: &mut LayoutData) -> Vec { + self.0.layout_with_breadcrumb(data) + } +} + +impl TableItemLayout for Appearance { + fn type_name() -> &'static str { + "Appearance" + } + fn identifier(&self) -> String { + "Appearance".to_string() + } + // The wrapping `Item` already contributes the breadcrumb; the inner list supplies the next level + fn layout_with_breadcrumb(&self, data: &mut LayoutData) -> Vec { + self.value_page(data) + } + // Label the spreadsheet's element button with the inner list's identifier, like Artboard + fn value_widgets(&self, target: PathStep, data: &LayoutData) -> Vec { + self.0.value_widgets(target, data) + } + fn value_page(&self, data: &mut LayoutData) -> Vec { + self.0.layout_with_breadcrumb(data) + } +} + +impl TableItemLayout for Coverage { + fn type_name() -> &'static str { + "Coverage" + } + fn identifier(&self) -> String { + "Coverage".to_string() + } + // The wrapping row already contributes the breadcrumb; the inner item supplies the next level + fn layout_with_breadcrumb(&self, data: &mut LayoutData) -> Vec { + self.value_page(data) + } + fn value_widgets(&self, target: PathStep, data: &LayoutData) -> Vec { + self.0.value_widgets(target, data) + } + fn value_page(&self, data: &mut LayoutData) -> Vec { + self.0.layout_with_breadcrumb(data) + } +} + +impl TableItemLayout for BoxCorners { + fn type_name() -> &'static str { + "BoxCorners" + } + fn identifier(&self) -> String { + "BoxCorners".to_string() + } + // The wrapping `Item` already contributes the breadcrumb; the inner list supplies the next level + fn layout_with_breadcrumb(&self, data: &mut LayoutData) -> Vec { + self.value_page(data) + } + // Label the spreadsheet's element button with the inner list's identifier, like Artboard + fn value_widgets(&self, target: PathStep, data: &LayoutData) -> Vec { + self.0.value_widgets(target, data) + } + fn value_page(&self, data: &mut LayoutData) -> Vec { + self.0.layout_with_breadcrumb(data) + } +} + +impl TableItemLayout for graphene_std::core_types::none::None { + fn type_name() -> &'static str { + "None" + } + fn identifier(&self) -> String { + "None".to_string() + } + fn value_page(&self, _data: &mut LayoutData) -> Vec { + label("None") + } +} + impl TableItemLayout for Graphic<'_> { fn type_name() -> &'static str { "Graphic" } fn identifier(&self) -> String { + // Our leaf variants hold the bare element, so they report the element's own identifier match self { - Self::Graphic(list) => list.identifier(), - Self::Vector(list) => list.identifier(), - Self::RasterCPU(list) => list.identifier(), - Self::RasterGPU(list) => list.identifier(), - Self::Color(list) => list.identifier(), - Self::Gradient(list) => list.identifier(), - Self::Text(list) => list.identifier(), + Self::GraphicList(list) => list.identifier(), + Self::Vector(vector) => vector.identifier(), + Self::RasterCPU(raster) => raster.identifier(), + Self::RasterGPU(raster) => raster.identifier(), + Self::Color(color) => color.identifier(), + Self::Gradient(gradient) => gradient.identifier(), + Self::Text(text) => text.identifier(), + Self::Stroke(stroke) => stroke.identifier(), + Self::StrokeList(list) => list.identifier(), Self::Group(_) => "Group".to_string(), } } @@ -350,13 +622,15 @@ impl TableItemLayout for Graphic<'_> { } fn value_page(&self, data: &mut LayoutData) -> Vec { match self { - Self::Graphic(list) => list.layout_with_breadcrumb(data), - Self::Vector(list) => list.layout_with_breadcrumb(data), - Self::RasterCPU(list) => list.layout_with_breadcrumb(data), - Self::RasterGPU(list) => list.layout_with_breadcrumb(data), - Self::Color(list) => list.layout_with_breadcrumb(data), - Self::Gradient(list) => list.layout_with_breadcrumb(data), - Self::Text(list) => list.layout_with_breadcrumb(data), + Self::GraphicList(list) => list.layout_with_breadcrumb(data), + Self::Vector(vector) => vector.layout_with_breadcrumb(data), + Self::RasterCPU(raster) => raster.layout_with_breadcrumb(data), + Self::RasterGPU(raster) => raster.layout_with_breadcrumb(data), + Self::Color(color) => color.layout_with_breadcrumb(data), + Self::Gradient(gradient) => gradient.layout_with_breadcrumb(data), + Self::Text(text) => text.layout_with_breadcrumb(data), + Self::Stroke(stroke) => stroke.layout_with_breadcrumb(data), + Self::StrokeList(list) => list.layout_with_breadcrumb(data), Self::Group(_) => Vec::new(), } } @@ -376,7 +650,7 @@ impl TableItemLayout for Vector { ) } fn value_page(&self, data: &mut LayoutData) -> Vec { - let table_tab_entries = [VectorTableTab::Properties, VectorTableTab::Points, VectorTableTab::Segments, VectorTableTab::Regions] + let table_tab_entries = [VectorTableTab::Points, VectorTableTab::Segments, VectorTableTab::Handles] .into_iter() .map(|tab| { RadioEntryData::new(format!("{tab:?}")) @@ -388,88 +662,38 @@ impl TableItemLayout for Vector { let mut table_rows = Vec::new(); match data.vector_table_tab { - VectorTableTab::Properties => { - table_rows.push(column_headings(&["property", "value"])); - - if let Some(stroke) = self.stroke.as_ref() { - table_rows.push(vec![ - TextLabel::new("Stroke Weight").narrow(true).widget_instance(), - TextLabel::new(format!("{} px", stroke.weight)).narrow(true).widget_instance(), - ]); - table_rows.push(vec![ - TextLabel::new("Stroke Dash Lengths").narrow(true).widget_instance(), - TextLabel::new(if stroke.dash_lengths.is_empty() { - "-".to_string() - } else { - format!("[{}]", stroke.dash_lengths.iter().map(|x| format!("{x} px")).collect::>().join(", ")) - }) - .narrow(true) - .widget_instance(), - ]); - table_rows.push(vec![ - TextLabel::new("Stroke Dash Offset").narrow(true).widget_instance(), - TextLabel::new(format!("{}", stroke.dash_offset)).narrow(true).widget_instance(), - ]); - table_rows.push(vec![ - TextLabel::new("Stroke Cap").narrow(true).widget_instance(), - TextLabel::new(stroke.cap.to_string()).narrow(true).widget_instance(), - ]); - table_rows.push(vec![ - TextLabel::new("Stroke Join").narrow(true).widget_instance(), - TextLabel::new(stroke.join.to_string()).narrow(true).widget_instance(), - ]); - table_rows.push(vec![ - TextLabel::new("Stroke Join Miter Limit").narrow(true).widget_instance(), - TextLabel::new(format!("{}", stroke.join_miter_limit)).narrow(true).widget_instance(), - ]); - table_rows.push(vec![ - TextLabel::new("Stroke Align").narrow(true).widget_instance(), - TextLabel::new(stroke.align.to_string()).narrow(true).widget_instance(), - ]); - table_rows.push(vec![ - TextLabel::new("Stroke Transform").narrow(true).widget_instance(), - TextLabel::new(format_transform_matrix(stroke.transform)).narrow(true).widget_instance(), - ]); - table_rows.push(vec![ - TextLabel::new("Stroke Paint Order").narrow(true).widget_instance(), - TextLabel::new(stroke.paint_order.to_string()).narrow(true).widget_instance(), - ]); - } - - let colinear = self.colinear_manipulators.iter().map(|[a, b]| format!("[{a} / {b}]")).collect::>().join(", "); - let colinear = if colinear.is_empty() { "-".to_string() } else { colinear }; - table_rows.push(vec![ - TextLabel::new("Colinear Handle IDs").narrow(true).widget_instance(), - TextLabel::new(colinear).narrow(true).widget_instance(), - ]); + VectorTableTab::Handles => { + table_rows.push(column_headings(&["", "colinear_manipulators[0]", "colinear_manipulators[1]"])); + table_rows.extend(self.colinear_manipulators.iter().enumerate().map(|(index, [a, b])| { + vec![ + TextLabel::new(format!("{index}")).narrow(true).widget_instance(), + TextLabel::new(format!("{a}")).narrow(true).widget_instance(), + TextLabel::new(format!("{b}")).narrow(true).widget_instance(), + ] + })); } VectorTableTab::Points => { table_rows.push(column_headings(&["", "position"])); table_rows.extend(self.point_domain.iter().map(|(id, position)| { vec![ TextLabel::new(format!("{}", id.inner())).narrow(true).widget_instance(), - TextLabel::new(format!("{position}")).narrow(true).widget_instance(), + TextLabel::new(format_dvec2(position)).narrow(true).widget_instance(), ] })); } VectorTableTab::Segments => { - table_rows.push(column_headings(&["", "start_index", "end_index", "handles"])); + table_rows.push(column_headings(&["", "start_point", "end_point", "handles"])); table_rows.extend(self.segment_domain.iter().map(|(id, start, end, handles)| { + let handles = match handles { + BezierHandles::Linear => "Linear".to_string(), + BezierHandles::Quadratic { handle } => format!("Quadratic β€” {}", format_dvec2(handle)), + BezierHandles::Cubic { handle_start, handle_end } => format!("Cubic β€” start: {}, end: {}", format_dvec2(handle_start), format_dvec2(handle_end)), + }; vec![ TextLabel::new(format!("{}", id.inner())).narrow(true).widget_instance(), - TextLabel::new(format!("{start}")).narrow(true).widget_instance(), - TextLabel::new(format!("{end}")).narrow(true).widget_instance(), - TextLabel::new(format!("{handles:?}")).narrow(true).widget_instance(), - ] - })); - } - VectorTableTab::Regions => { - table_rows.push(column_headings(&["", "segment_range", "fill"])); - table_rows.extend(self.region_domain.iter().map(|(id, segment_range, fill)| { - vec![ - TextLabel::new(format!("{}", id.inner())).narrow(true).widget_instance(), - TextLabel::new(format!("{segment_range:?}")).narrow(true).widget_instance(), - TextLabel::new(format!("{}", fill.inner())).narrow(true).widget_instance(), + TextLabel::new(format!("Point {start}")).narrow(true).widget_instance(), + TextLabel::new(format!("Point {end}")).narrow(true).widget_instance(), + TextLabel::new(handles).narrow(true).widget_instance(), ] })); } @@ -518,7 +742,7 @@ impl TableItemLayout for Raster { format!("Raster ({} x {})", self.data().width(), self.data().height()) } fn value_page(&self, _data: &mut LayoutData) -> Vec { - let widgets = vec![TextLabel::new("Raster is a texture on the GPU and cannot currently be displayed here").widget_instance()]; + let widgets = vec![TextLabel::new("This raster data is a texture on the GPU. It currently cannot be displayed here.").widget_instance()]; vec![LayoutGroup::row(widgets)] } } @@ -530,51 +754,86 @@ impl TableItemLayout for Color { fn identifier(&self) -> String { format!("Color (#{})", SRGBA8::from(*self).to_rgba_hex()) } - fn value_widget(&self, _target: PathStep, _data: &LayoutData) -> WidgetInstance { - ColorInput::new(FillChoiceUI::from(&FillChoice::Solid(*self))) - .disabled(true) - .menu_direction(Some(MenuDirection::Top)) - .narrow(true) - .widget_instance() + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + vec![ + ColorInput::new(FillChoice::::from(&FillChoice::Solid(*self))) + .disabled(true) + .menu_direction(Some(MenuDirection::Top)) + .narrow(true) + .widget_instance(), + ] } fn value_page(&self, _data: &mut LayoutData) -> Vec { - let widgets = vec![self.value_widget(PathStep::Element(0), _data)]; - vec![LayoutGroup::row(widgets)] + vec![LayoutGroup::row(self.value_widgets(PathStep::Element(0), _data))] } } -impl TableItemLayout for GradientStops { +impl TableItemLayout for Gradient { fn type_name() -> &'static str { "Gradient" } fn identifier(&self) -> String { format!("Gradient ({} stops)", self.len()) } - fn value_widget(&self, _target: PathStep, _data: &LayoutData) -> WidgetInstance { - ColorInput::new(FillChoiceUI::from(&FillChoice::Gradient(self.clone()))) - .menu_direction(Some(MenuDirection::Top)) - .disabled(true) - .narrow(true) - .widget_instance() + // The wrapping `Item` already contributes the breadcrumb; the inner list supplies the next level + fn layout_with_breadcrumb(&self, data: &mut LayoutData) -> Vec { + self.value_page(data) } - fn value_page(&self, _data: &mut LayoutData) -> Vec { - let widgets = vec![self.value_widget(PathStep::Element(0), _data)]; - vec![LayoutGroup::row(widgets)] + // The preview widget doesn't navigate, so a drill-in button beside it opens the newtype's underlying color list + fn value_widgets(&self, target: PathStep, data: &LayoutData) -> Vec { + vec![ + TextButton::new(self.as_color_list().identifier()) + .on_update(move |_| DataPanelMessage::PushToElementPath { step: target.clone() }.into()) + .narrow(true) + .widget_instance(), + Separator::new(SeparatorStyle::Related).widget_instance(), + ColorInput::new(FillChoice::::Gradient(GradientRamp::from(self).with_settings(data.gradient_settings))) + .menu_direction(Some(MenuDirection::Top)) + .disabled(true) + .narrow(true) + .widget_instance(), + ] + } + fn value_page(&self, data: &mut LayoutData) -> Vec { + self.as_color_list().layout_with_breadcrumb(data) } } +macro_rules! impl_table_item_layout_for_number { + ($($ty:ty => $type_name:literal),* $(,)?) => { + $( + impl TableItemLayout for $ty { + fn type_name() -> &'static str { + $type_name + } + fn identifier(&self) -> String { + format!("{self}") + } + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + vec![TextLabel::new(self.identifier()).selectable(true).narrow(true).widget_instance()] + } + } + )* + } +} +impl_table_item_layout_for_number!( + f32 => "Number (f32)", + u32 => "Number (u32)", + i32 => "Number (i32)", + u64 => "Number (u64)", + i64 => "Number (i64)", +); + +// Denoised so 0.1 + 0.2 reads as 0.3 rather than 0.30000000000000004. We don't do this for f32 because it lacks precision to reliably distinguish between intentional digits and noise. impl TableItemLayout for f64 { fn type_name() -> &'static str { - "Number (f64)" + "Number" } fn identifier(&self) -> String { - format!("{self}") + format!("{}", round_away_float_noise(*self)) } - // Values fall back to the default drill-in button (labeled via `identifier`); the value page shows the rich `NumberInput`. - fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![ - NumberInput::new(Some(*self)).disabled(true).max_width(220).display_decimal_places(20).widget_instance(), - ])] + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + vec![TextLabel::new(self.identifier()).selectable(true).narrow(true).widget_instance()] } } @@ -583,42 +842,10 @@ impl TableItemLayout for u8 { "Byte" } fn identifier(&self) -> String { - format!("{self:02X}") + format!("0x{self:02X} ({self})") } - // Values fall back to the default drill-in button (labeled with the hex string via `identifier`); the value page shows the same hex value as a label. - fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![TextLabel::new(self.identifier()).widget_instance()])] - } -} - -impl TableItemLayout for u32 { - fn type_name() -> &'static str { - "Number (u32)" - } - fn identifier(&self) -> String { - format!("{self}") - } - // Values fall back to the default drill-in button (labeled via `identifier`); the value page shows the rich `NumberInput`. - fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![ - NumberInput::new(Some(*self as f64)).disabled(true).max_width(220).display_decimal_places(20).widget_instance(), - ])] - } -} - -impl TableItemLayout for u64 { - fn type_name() -> &'static str { - "Number (u64)" - } - fn identifier(&self) -> String { - format!("{self}") - } - // Values fall back to the default drill-in button (labeled via `identifier`); the value page shows the rich `NumberInput`. - // TODO: Make this robust for large u64 values that don't fit in f64 (above roughly 2^53). Perhaps using a bigint kind of approach through the widget's data flow. - fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![ - NumberInput::new(Some(*self as f64)).disabled(true).max_width(220).display_decimal_places(20).widget_instance(), - ])] + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + vec![TextLabel::new(self.identifier()).selectable(true).narrow(true).widget_instance()] } } @@ -629,11 +856,11 @@ impl TableItemLayout for bool { fn identifier(&self) -> String { "Bool".to_string() } - fn value_widget(&self, _target: PathStep, _data: &LayoutData) -> WidgetInstance { - CheckboxInput::new(*self).disabled(true).widget_instance() + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + vec![CheckboxInput::new(*self).disabled(true).widget_instance()] } fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![self.value_widget(PathStep::Element(0), _data)])] + vec![LayoutGroup::row(self.value_widgets(PathStep::Element(0), _data))] } } @@ -642,20 +869,50 @@ impl TableItemLayout for String { "String" } fn identifier(&self) -> String { - // Show the first line, and if there are more, indicate that with an ellipsis - let first_line = self.lines().next().unwrap_or(""); - if self.lines().count() > 1 { - format!("\"{} …\"", first_line) - } else { - format!("\"{}\"", first_line) - } + format!("\"{}\"", string_preview(self)) + } + fn layout_with_breadcrumb(&self, data: &mut LayoutData) -> Vec { + data.breadcrumbs.push(character_count_label(self)); + self.value_page(data) + } + // The preview truncates for length and line breaks, so a button beside it reaches the full text, labeled by length + fn value_widgets(&self, target: PathStep, _data: &LayoutData) -> Vec { + vec![ + TextLabel::new(string_preview(self)).enquote(true).selectable(true).monospace(true).narrow(true).widget_instance(), + Separator::new(SeparatorStyle::Unrelated).widget_instance(), + TextButton::new(character_count_label(self)) + .on_update(move |_| DataPanelMessage::PushToElementPath { step: target.clone() }.into()) + .narrow(true) + .widget_instance(), + ] } - // Values fall back to the default drill-in button (labeled with the truncated quoted preview via `identifier`); the value page shows the full multi-line text in a `TextAreaInput`. fn value_page(&self, _data: &mut LayoutData) -> Vec { vec![LayoutGroup::row(vec![TextAreaInput::new(self.to_string()).monospace(true).disabled(true).widget_instance()])] } } +fn character_count_label(value: &str) -> String { + let character_count = value.chars().count(); + + format!("{character_count} Char{}", if character_count == 1 { "" } else { "s" }) +} + +/// Shortens a string to fit a table cell, cutting at the first line break or 40 characters with an ellipsis. +/// The 40 matches `truncate_breadcrumb_label`, so a preview reaching the trail isn't cut twice. +fn string_preview(value: &str) -> String { + const MAX_CHARACTERS: usize = 40; + + let first_line = value.lines().next().unwrap_or_default(); + let cut_by_line_break = value.contains('\n'); + let cut_by_length = first_line.chars().count() > MAX_CHARACTERS; + + if !cut_by_line_break && !cut_by_length { + return value.to_string(); + } + + first_line.chars().take(MAX_CHARACTERS - 1).chain(['…']).collect() +} + impl TableItemLayout for Option { fn type_name() -> &'static str { "Option" @@ -663,11 +920,16 @@ impl TableItemLayout for Option { fn identifier(&self) -> String { "Option".to_string() } - fn value_widget(&self, _target: PathStep, _data: &LayoutData) -> WidgetInstance { - TextLabel::new(format!("{self:?}")).narrow(true).widget_instance() + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + let text = match self { + Some(value) => format!("Some({})", round_away_float_noise(*value)), + None => "None".to_string(), + }; + + vec![TextLabel::new(text).selectable(true).narrow(true).widget_instance()] } fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![self.value_widget(PathStep::Element(0), _data)])] + vec![LayoutGroup::row(self.value_widgets(PathStep::Element(0), _data))] } } @@ -678,11 +940,11 @@ impl TableItemLayout for DVec2 { fn identifier(&self) -> String { "Vec2".to_string() } - fn value_widget(&self, _target: PathStep, _data: &LayoutData) -> WidgetInstance { - TextLabel::new(format_dvec2(*self)).narrow(true).widget_instance() + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + vec![TextLabel::new(format_dvec2(*self)).narrow(true).widget_instance()] } fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![self.value_widget(PathStep::Element(0), _data)])] + vec![LayoutGroup::row(self.value_widgets(PathStep::Element(0), _data))] } } @@ -693,11 +955,11 @@ impl TableItemLayout for Vec2 { fn identifier(&self) -> String { "Vec2".to_string() } - fn value_widget(&self, _target: PathStep, _data: &LayoutData) -> WidgetInstance { - TextLabel::new(format_dvec2(DVec2::new(self.x as f64, self.y as f64))).narrow(true).widget_instance() + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + vec![TextLabel::new(format_dvec2(DVec2::new(self.x as f64, self.y as f64))).narrow(true).widget_instance()] } fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![self.value_widget(PathStep::Element(0), _data)])] + vec![LayoutGroup::row(self.value_widgets(PathStep::Element(0), _data))] } } @@ -708,11 +970,11 @@ impl TableItemLayout for DAffine2 { fn identifier(&self) -> String { "Transform".to_string() } - fn value_widget(&self, _target: PathStep, _data: &LayoutData) -> WidgetInstance { - TextLabel::new(format_transform_matrix(*self)).narrow(true).widget_instance() + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + transform_widgets(*self) } fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![self.value_widget(PathStep::Element(0), _data)])] + vec![LayoutGroup::row(self.value_widgets(PathStep::Element(0), _data))] } } @@ -723,57 +985,87 @@ impl TableItemLayout for Affine2 { fn identifier(&self) -> String { "Transform".to_string() } - fn value_widget(&self, _target: PathStep, _data: &LayoutData) -> WidgetInstance { - let matrix = DAffine2::from_cols_array(&self.to_cols_array().map(|x| x as f64)); - TextLabel::new(format_transform_matrix(matrix)).narrow(true).widget_instance() + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + transform_widgets(DAffine2::from_cols_array(&self.to_cols_array().map(|x| x as f64))) } fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![self.value_widget(PathStep::Element(0), _data)])] + vec![LayoutGroup::row(self.value_widgets(PathStep::Element(0), _data))] } } -impl TableItemLayout for BlendMode { - fn type_name() -> &'static str { - "BlendMode" - } - fn identifier(&self) -> String { - self.to_string() - } - fn value_widget(&self, _target: PathStep, _data: &LayoutData) -> WidgetInstance { - TextLabel::new(self.to_string()).narrow(true).widget_instance() - } - fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![self.value_widget(PathStep::Element(0), _data)])] +// Choice enums all display as their variant's label, shown inline as a plain text widget +macro_rules! impl_table_item_layout_for_choice_enum { + ($($ty:ty),* $(,)?) => { + $( + impl TableItemLayout for $ty { + fn type_name() -> &'static str { + stringify!($ty) + } + fn identifier(&self) -> String { + self.to_string() + } + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + vec![TextLabel::new(self.to_string()).narrow(true).widget_instance()] + } + fn value_page(&self, _data: &mut LayoutData) -> Vec { + vec![LayoutGroup::row(self.value_widgets(PathStep::Element(0), _data))] + } + } + )* } } +impl_table_item_layout_for_choice_enum!( + BlendMode, + Cover, + GradientForm, + GradientSpread, + GradientSpace, + GradientHueDirection, + GradientInterpolation, + StrokeJoin, + StrokeAlign, + StrokeCap, + MergeByDistanceAlgorithm, + ExtrudeJoiningAlgorithm, + PointSpacingType, + StringCapitalization, + LuminanceCalculation, + RedGreenBlue, + RedGreenBlueAlpha, + RelativeAbsolute, + SelectiveColorChoice, + XY, + ScaleType, + CentroidType, + BooleanOperation, + NoiseType, + FractalType, + CellularDistanceFunction, + CellularReturnType, + DomainWarpType, + RealTimeMode, + GridType, + ArcType, + SpiralType, + TextAlign, + QRCodeErrorCorrectionLevel, + InterpolationDistribution, + RowsOrColumns, +); -impl TableItemLayout for GradientType { +// ReferencePoint is not a choice enum with display labels, so its variant name serves as the label +impl TableItemLayout for ReferencePoint { fn type_name() -> &'static str { - "GradientType" + "ReferencePoint" } fn identifier(&self) -> String { - self.to_string() + format!("{self:?}") } - fn value_widget(&self, _target: PathStep, _data: &LayoutData) -> WidgetInstance { - TextLabel::new(self.to_string()).narrow(true).widget_instance() + fn value_widgets(&self, _target: PathStep, _data: &LayoutData) -> Vec { + vec![TextLabel::new(self.identifier()).narrow(true).widget_instance()] } fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![self.value_widget(PathStep::Element(0), _data)])] - } -} - -impl TableItemLayout for GradientSpreadMethod { - fn type_name() -> &'static str { - "GradientSpreadMethod" - } - fn identifier(&self) -> String { - self.to_string() - } - fn value_widget(&self, _target: PathStep, _data: &LayoutData) -> WidgetInstance { - TextLabel::new(self.to_string()).narrow(true).widget_instance() - } - fn value_page(&self, _data: &mut LayoutData) -> Vec { - vec![LayoutGroup::row(vec![self.value_widget(PathStep::Element(0), _data)])] + vec![LayoutGroup::row(self.value_widgets(PathStep::Element(0), _data))] } } @@ -803,7 +1095,7 @@ impl TableItemLayout for NodeId { // in the Node Graph / Layers panels. The lookup uses `data.node_lookup_network_path` (set by the enclosing // `List` if rendering a path) so the resolution succeeds at any nesting depth. The button's icon // signals layer-vs-node kind. Falls back to "Node {id}" with no icon if the lookup misses. - fn value_widget(&self, target: PathStep, data: &LayoutData) -> WidgetInstance { + fn value_widgets(&self, target: PathStep, data: &LayoutData) -> Vec { let label = node_id_display_label(*self, data.network_interface, &data.node_lookup_network_path); let mut button = TextButton::new(label) .on_update(move |_| DataPanelMessage::PushToElementPath { step: target.clone() }.into()) @@ -812,7 +1104,7 @@ impl TableItemLayout for NodeId { let icon = if data.network_interface.is_layer(self, &data.node_lookup_network_path) { "Layer" } else { "Node" }; button = button.icon(icon); } - button.widget_instance() + vec![button.widget_instance()] } // The value page shows the node's kind, name (editable), lock/visibility toggles, and a "Select Layer/Node" action button. fn value_page(&self, data: &mut LayoutData) -> Vec { @@ -911,12 +1203,10 @@ macro_rules! known_item_types { List>, List>, List, - List, + List, List, - List, List, - List, - GradientStops, + Gradient, Color, NodeId, DAffine2, @@ -925,9 +1215,12 @@ macro_rules! known_item_types { Vec2, Option, f64, + f32, u8, u32, u64, + i32, + i64, bool, String, Vector, @@ -935,6 +1228,47 @@ macro_rules! known_item_types { Raster, Graphic, Artboard, + Appearance, + Coverage, + Cover, + DashPattern, + BoxCorners, + BlendMode, + GradientForm, + GradientSpread, + GradientSpace, + GradientHueDirection, + GradientInterpolation, + StrokeJoin, + StrokeAlign, + StrokeCap, + MergeByDistanceAlgorithm, + ExtrudeJoiningAlgorithm, + PointSpacingType, + StringCapitalization, + LuminanceCalculation, + RedGreenBlue, + RedGreenBlueAlpha, + RelativeAbsolute, + SelectiveColorChoice, + XY, + ScaleType, + ReferencePoint, + CentroidType, + BooleanOperation, + NoiseType, + FractalType, + CellularDistanceFunction, + CellularReturnType, + DomainWarpType, + RealTimeMode, + GridType, + ArcType, + SpiralType, + TextAlign, + QRCodeErrorCorrectionLevel, + InterpolationDistribution, + RowsOrColumns, ); }; } @@ -950,16 +1284,20 @@ fn display_value_override(any: &dyn Any) -> Option { None } -/// Type-dispatched widget for displaying an attribute value in a `List` item. -/// Delegates to [`TableItemLayout::value_widget`] so the same widget code is shared between +/// Type-dispatched cell widgets for displaying an attribute value in a `List` item. +/// Delegates to [`TableItemLayout::value_widgets`] so the same widget code is shared between /// element-column rendering and attribute-column rendering. Returns `None` for unrecognized /// types so the caller can fall back to a debug-formatted [`TextLabel`]. -fn dispatch_value_widget(any: &dyn Any, target: PathStep, data: &LayoutData) -> Option { +fn dispatch_value_widgets(any: &dyn Any, target: PathStep, data: &LayoutData) -> Option> { + // `NodeIdPath` (e.g. the `editor:layer_path` attribute) drills into its inner path list, matching `drilldown_attribute_layout`. + if let Some(path) = any.downcast_ref::() { + return Some(path.0.value_widgets(target, data)); + } macro_rules! check { ( $($ty:ty),* $(,)? ) => { $( if let Some(value) = any.downcast_ref::<$ty>() { - return Some(value.value_widget(target, data)); + return Some(value.value_widgets(target, data)); } )* }; @@ -997,24 +1335,24 @@ fn table_node_id_path_layout_with_breadcrumb(path: &List, data: &mut Lay let node_id = path.element(index).unwrap(); let prefix: Vec = path.iter_element_values().take(index).copied().collect(); let saved = std::mem::replace(&mut data.node_lookup_network_path, prefix); - let widget = node_id.value_widget(PathStep::Element(index), data); + let widgets = node_id.value_widgets(PathStep::Element(index), data); data.node_lookup_network_path = saved; - vec![TextLabel::new(format!("{index}")).narrow(true).widget_instance(), widget] + vec![vec![TextLabel::new(format!("{index}")).narrow(true).widget_instance()], widgets] }) .collect::>(); - rows.insert(0, column_headings(&["", "element"])); + rows.insert(0, single_widget_cells(column_headings(&["", "element"]))); - vec![LayoutGroup::table(rows, false)] + vec![LayoutGroup::table_of_cells(rows, false)] } /// Type-dispatched recursion into an attribute value for the Data panel breadcrumb navigation. /// Mirrors [`dispatch_value_widget`] but routes to [`TableItemLayout::layout_with_breadcrumb`]. /// Returns `None` for unrecognized types. fn drilldown_attribute_layout(any: &dyn Any, data: &mut LayoutData) -> Option> { - // `List` is interpreted as a path (e.g. the `editor:layer_path` attribute), so each item's NodeId value - // resolves against the prefix made up of preceding items. Handled before the generic `List` blanket impl. - if let Some(path) = any.downcast_ref::>() { - return Some(table_node_id_path_layout_with_breadcrumb(path, data)); + // `NodeIdPath` is interpreted as a path (e.g. the `editor:layer_path` attribute), so each item's NodeId value + // resolves against the prefix made up of preceding items. Handled before the generic blanket impl. + if let Some(path) = any.downcast_ref::() { + return Some(table_node_id_path_layout_with_breadcrumb(&path.0, data)); } // The path's plain value form, the layer-path marker's owned shape. if let Some(path) = any.downcast_ref::>() { @@ -1034,7 +1372,8 @@ fn drilldown_attribute_layout(any: &dyn Any, data: &mut LayoutData) -> Option String { +/// Decomposes a transform into location, rotation, and scale, each headed by the icon of its Layer menu action. +fn transform_widgets(transform: DAffine2) -> Vec { let (scale, angle, translation) = if transform.matrix2.determinant().abs() <= f64::EPSILON { let [col_0, col_1] = transform.matrix2.to_cols_array_2d().map(|[x, y]| DVec2::new(x, y)); @@ -1052,19 +1391,26 @@ fn format_transform_matrix(transform: DAffine2) -> String { } else { transform.to_scale_angle_translation() }; - let rotation = if angle == -0. { 0. } else { angle.to_degrees() }; - let round = |x: f64| (x * 1e3).round() / 1e3; - format!( - "Location: ({} px, {} px) β€” Rotation: {rotation:2}Β° β€” Scale: ({}x, {}x)", - round(translation.x), - round(translation.y), - round(scale.x), - round(scale.y) - ) + let location_text = format!("({} px, {} px)", format_rounded(translation.x, 3), format_rounded(translation.y, 3)); + let rotation_text = format!("{}Β°", format_rounded(angle.to_degrees(), 3)); + let scale_text = format!("({}x, {}x)", format_rounded(scale.x, 3), format_rounded(scale.y, 3)); + + vec![ + IconLabel::new("TransformationGrab").tooltip_label("Location").widget_instance(), + Separator::new(SeparatorStyle::Related).widget_instance(), + TextLabel::new(location_text).narrow(true).widget_instance(), + Separator::new(SeparatorStyle::Unrelated).widget_instance(), + IconLabel::new("TransformationRotate").tooltip_label("Rotation").widget_instance(), + Separator::new(SeparatorStyle::Related).widget_instance(), + TextLabel::new(rotation_text).narrow(true).widget_instance(), + Separator::new(SeparatorStyle::Unrelated).widget_instance(), + IconLabel::new("TransformationScale").tooltip_label("Scale").widget_instance(), + Separator::new(SeparatorStyle::Related).widget_instance(), + TextLabel::new(scale_text).narrow(true).widget_instance(), + ] } fn format_dvec2(value: DVec2) -> String { - let round = |x: f64| (x * 1e3).round() / 1e3; - format!("({} px, {} px)", round(value.x), round(value.y)) + format!("({} px, {} px)", format_rounded(value.x, 3), format_rounded(value.y, 3)) } diff --git a/editor/src/messages/portfolio/document/document_history.rs b/editor/src/messages/portfolio/document/document_history.rs index e1d3ef7812..9758fd3846 100644 --- a/editor/src/messages/portfolio/document/document_history.rs +++ b/editor/src/messages/portfolio/document/document_history.rs @@ -17,9 +17,9 @@ use super::utility_types::network_interface::storage_metadata::{StorageMetadataV #[derivative(Clone, Debug, Default)] pub struct DocumentHistory { /// Stack of document network snapshots for previous history states. - lagacy_undo_stack: VecDeque, + legacy_undo_stack: VecDeque, /// Stack of document network snapshots for future history states. - lagacy_redo_stack: VecDeque, + legacy_redo_stack: VecDeque, /// The `Gdd` working copy: owns the CRDT `Session` and mirrors edits to disk. `None` until the mount /// future built by `load_document` resolves. #[derivative(Debug = "ignore")] @@ -31,38 +31,38 @@ impl DocumentHistory { /// Push a snapshot onto the undo stack, evicting the oldest entry past the history cap. pub fn push_undo(&mut self, snapshot: NodeNetworkInterface) { - Self::push_capped(&mut self.lagacy_undo_stack, snapshot); + Self::push_capped(&mut self.legacy_undo_stack, snapshot); } /// Push a snapshot onto the redo stack, evicting the oldest entry past the history cap. pub fn push_redo(&mut self, snapshot: NodeNetworkInterface) { - Self::push_capped(&mut self.lagacy_redo_stack, snapshot); + Self::push_capped(&mut self.legacy_redo_stack, snapshot); } /// Pop the most recent undo snapshot, or `None` when the stack is empty. pub fn pop_undo(&mut self) -> Option { - self.lagacy_undo_stack.pop_back() + self.legacy_undo_stack.pop_back() } /// Pop the most recent redo snapshot, or `None` when the stack is empty. pub fn pop_redo(&mut self) -> Option { - self.lagacy_redo_stack.pop_back() + self.legacy_redo_stack.pop_back() } /// Drop the most recently pushed undo snapshot (used to cancel a transaction that ended up unmodified). pub fn discard_last_undo(&mut self) { - self.lagacy_undo_stack.pop_back(); + self.legacy_undo_stack.pop_back(); } /// Clear the redo stack, called when a fresh edit invalidates the redo future. pub fn clear_redo(&mut self) { - self.lagacy_redo_stack.clear(); + self.legacy_redo_stack.clear(); } /// Add the resources referenced by every snapshot in both history stacks into `resources`, so /// history-only resources stay alive for legacy undo/redo. pub fn collect_used_resources(&self, resources: &mut HashSet) { - for interface in self.lagacy_undo_stack.iter().chain(&self.lagacy_redo_stack) { + for interface in self.legacy_undo_stack.iter().chain(&self.legacy_redo_stack) { interface.collect_used_resources(resources); } } diff --git a/editor/src/messages/portfolio/document/document_message.rs b/editor/src/messages/portfolio/document/document_message.rs index 75c99ccd7c..bc4616d0a4 100644 --- a/editor/src/messages/portfolio/document/document_message.rs +++ b/editor/src/messages/portfolio/document/document_message.rs @@ -2,7 +2,7 @@ use std::path::PathBuf; use std::sync::Arc; use super::utility_types::misc::{GroupFolderType, SnappingState}; -use crate::messages::input_mapper::utility_types::input_keyboard::Key; +use crate::messages::input_mapper::utility_types::keyboard::Key; use crate::messages::portfolio::document::data_panel::DataPanelMessage; use crate::messages::portfolio::document::overlays::utility_types::{OverlayContext, OverlaysType}; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; @@ -245,7 +245,7 @@ pub enum DocumentMessage { vector_data: HashMap>, }, // `Message` is only serialized at `editor_wrapper.rs`, and only inputs from JS pass through it. - // `UpdateFillAttributes` and `UpdateStrokeAttributes` are produced inside `editor.handle_message` by `node_graph_executor.rs` and consumed in the same dispatch loop, so it never reaches that serialization point. + // `UpdateFillAttributes`/`UpdateStrokeAttributes` are produced inside `editor.handle_message` by `node_graph_executor.rs` and consumed in the same dispatch loop, so they never reach that serialization point. #[serde(skip)] UpdateFillAttributes { fill_attributes: HashMap>>>, diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index cb4dacbc06..4925fa070d 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -10,6 +10,7 @@ use crate::consts::{ ASYMPTOTIC_EFFECT, BLEND_COUNT_PER_LAYER, COLOR_OVERLAY_GRAY, DEFAULT_DOCUMENT_NAME, FILE_EXTENSION, GDD_FILE_EXTENSION, LAYER_INDENT_OFFSET, NODE_CHAIN_WIDTH, SCALE_EFFECT, SCROLLBAR_SPACING, VIEWPORT_ROTATE_SNAP_INTERVAL, }; +use crate::messages::frontend::utility_types::FileFilter; use crate::messages::input_mapper::utility_types::macros::action_shortcut; use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::portfolio::document::data_panel::{DataPanelMessageContext, DataPanelMessageHandler}; @@ -34,19 +35,19 @@ use crate::node_graph_executor::NodeGraphExecutor; use glam::{DAffine2, DVec2}; use graph_craft::application_io::resource::ResourceId; use graph_craft::application_io::wgpu_available; -use graph_craft::descriptor; use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput, NodeNetwork, OldNodeNetwork}; -use graphene_std::graphic::is_paint_present; +use graph_craft::list; +use graphene_std::Cover; use graphene_std::math::quad::Quad; use graphene_std::path_bool_nodes::boolean_intersect; use graphene_std::raster::BlendMode; -use graphene_std::subpath::Subpath; +use graphene_std::vector::algorithms::bezpath_algorithms::bezpath_is_inside_bezpath; use graphene_std::vector::click_target::{ClickTarget, ClickTargetType}; +use graphene_std::vector::graphic_types; use graphene_std::vector::misc::dvec2_to_point; use graphene_std::vector::style::RenderMode; -use graphene_std::vector::{PointId, graphic_types}; -use kurbo::{Affine, BezPath, Line, PathSeg}; +use kurbo::{Affine, BezPath, Line, PathSeg, Shape}; use std::collections::HashSet; use std::path::PathBuf; use std::sync::Arc; @@ -103,6 +104,7 @@ pub struct DocumentMessageHandler { pub properties_panel_collapsed_sections: Vec, /// The full Git commit hash of the Graphite repository that was used to build the editor. /// We save this to provide a hint about which version of the editor was used to create the document. + #[serde(skip_deserializing, default)] pub commit_hash: String, /// The current pan, tilt, and zoom state of the viewport's view of the document canvas. pub document_ptz: PTZ, @@ -125,7 +127,7 @@ pub struct DocumentMessageHandler { /// network path, the node itself, and its original relative gradient. The deferred migration removes each entry as its bake lands. /// Transient migration state, but persisted in the saved document so unfinished bakes retry on the next open instead of losing placement. #[serde(default, skip_serializing_if = "Vec::is_empty")] - pub(crate) pending_gradient_bbox_bake: Vec<(Vec, NodeId, graphic_types::migrations::legacy::Gradient)>, + pub(crate) pending_gradient_bbox_bake: Vec<(Vec, NodeId, graphic_types::migrations::legacy::LegacyGradient)>, // ============================================= // Fields omitted from the saved document format @@ -298,7 +300,7 @@ impl MessageHandler> for DocumentMes graph_operation_message_handler.process_message(message, responses, context); } DocumentMessage::Resource(message) => { - let context = ResourceMessageContext { document_id, fonts }; + let context = ResourceMessageContext { document_id, fonts, resource_storage }; self.resources.process_message(message, responses, context); } DocumentMessage::AlignSelectedLayers { axis, aggregate } => { @@ -915,7 +917,14 @@ impl MessageHandler> for DocumentMes } responses.add(SelectToolMessage::Abort); responses.add(DocumentMessage::DocumentHistoryForward); - responses.add(ToolMessage::Redo); + + // The Pen tool advances its in-progress drawing to match the re-applied document once the graph has re-evaluated + if *current_tool == ToolType::Pen { + responses.add(DeferMessage::AfterGraphRun { + messages: vec![PenToolMessage::Redo.into()], + }); + } + responses.add(OverlaysMessage::Draw); responses.add(EventMessage::SelectionChanged); } @@ -1065,7 +1074,10 @@ impl MessageHandler> for DocumentMes (true, Some(storage)) => storage .export_to_bytes( document_format::ExportFormat::Xz, - document_format::ExportOptions::default(), + document_format::ExportOptions { + include_history: false, + ..Default::default() + }, export_load_handle.as_ref(), Some(&legacy_document), ) @@ -1085,6 +1097,10 @@ impl MessageHandler> for DocumentMes name, path, folder, + filters: vec![FileFilter { + name: "Graphite Document".into(), + extensions: vec![extension.into()], + }], content: content.into(), }) }); @@ -1502,9 +1518,9 @@ impl MessageHandler> for DocumentMes .collect(); self.network_interface.update_vector_data(layer_vector_data); } - DocumentMessage::UpdateFillAttributes { fill_attributes } => { + DocumentMessage::UpdateAppearanceAttributes { appearance_attributes } => { // Convert NodeId keys to LayerNodeIdentifier keys, filtering to only layers - let layer_fill_attributes = fill_attributes + let layer_appearance_attributes = appearance_attributes .into_iter() .filter(|(node_id, _)| self.network_interface.document_network().nodes.contains_key(node_id)) .filter_map(|(node_id, attrs)| { @@ -1514,30 +1530,25 @@ impl MessageHandler> for DocumentMes }) }) .collect(); - self.network_interface.update_fill_attributes(layer_fill_attributes); - } - DocumentMessage::UpdateStrokeAttributes { stroke_attributes } => { - // Convert NodeId keys to LayerNodeIdentifier keys, filtering to only layers - let layer_stroke_attributes = stroke_attributes - .into_iter() - .filter(|(node_id, _)| self.network_interface.document_network().nodes.contains_key(node_id)) - .filter_map(|(node_id, attrs)| { - self.network_interface.is_layer(&node_id, &[]).then(|| { - let layer = LayerNodeIdentifier::new(node_id, &self.network_interface); - (layer, attrs) - }) - }) - .collect(); - self.network_interface.update_stroke_attributes(layer_stroke_attributes); + self.network_interface.update_appearance_attributes(layer_appearance_attributes); } DocumentMessage::Undo => { if self.network_interface.transaction_status() != TransactionStatus::Finished { return; } - responses.add(ToolMessage::PreUndo); - responses.add(DocumentMessage::DocumentHistoryBackward); + + // The Pen tool keeps drawing across an undo, so instead of aborting beforehand it rewinds to match the reverted document once the graph has re-evaluated + if *current_tool == ToolType::Pen { + responses.add(DocumentMessage::DocumentHistoryBackward); + responses.add(DeferMessage::AfterGraphRun { + messages: vec![PenToolMessage::Undo.into()], + }); + } else { + responses.add(EventMessage::ToolAbort); + responses.add(DocumentMessage::DocumentHistoryBackward); + } + responses.add(OverlaysMessage::Draw); - responses.add(ToolMessage::Undo); responses.add(EventMessage::SelectionChanged); } DocumentMessage::UngroupSelectedLayers => { @@ -1712,7 +1723,7 @@ impl MessageHandler> for DocumentMes } DocumentMessage::ZoomCanvasToFitAll => { let bounds = if self.graph_view_overlay_open { - self.network_interface.all_nodes_bounding_box(&self.breadcrumb_network_path).cloned() + self.network_interface.all_nodes_bounding_box(&self.breadcrumb_network_path) } else { self.network_interface.document_bounds_document_space(true) }; @@ -1844,16 +1855,16 @@ impl DocumentMessageHandler { self.intersect_quad(viewport_quad, viewport).filter(|layer| !self.network_interface.is_artboard(&layer.to_node(), &[])) } - /// Runs an intersection test with all layers and a viewport space subpath - pub fn intersect_polygon<'a>(&'a self, mut viewport_polygon: Subpath, viewport: &ViewportMessageHandler) -> impl Iterator + use<'a> { + /// Runs an intersection test with all layers and a viewport space polygon path + pub fn intersect_polygon<'a>(&'a self, mut viewport_polygon: BezPath, viewport: &ViewportMessageHandler) -> impl Iterator + use<'a> { let document_to_viewport = self.navigation_handler.calculate_offset_transform(viewport.center_in_viewport_space().into(), &self.document_ptz); - viewport_polygon.apply_transform(document_to_viewport.inverse()); + viewport_polygon.apply_affine(Affine::new(document_to_viewport.inverse().to_cols_array())); - ClickXRayIter::new(&self.network_interface, XRayTarget::Polygon(viewport_polygon)) + ClickXRayIter::new(&self.network_interface, XRayTarget::Path(viewport_polygon)) } - /// Runs an intersection test with all layers and a viewport space subpath; ignoring artboards - pub fn intersect_polygon_no_artboards<'a>(&'a self, viewport_polygon: Subpath, viewport: &ViewportMessageHandler) -> impl Iterator + use<'a> { + /// Runs an intersection test with all layers and a viewport space polygon path; ignoring artboards + pub fn intersect_polygon_no_artboards<'a>(&'a self, viewport_polygon: BezPath, viewport: &ViewportMessageHandler) -> impl Iterator + use<'a> { self.intersect_polygon(viewport_polygon, viewport) .filter(|layer| !self.network_interface.is_artboard(&layer.to_node(), &[])) } @@ -1881,29 +1892,24 @@ impl DocumentMessageHandler { layer_left >= quad_left && layer_right <= quad_right && layer_top <= quad_top && layer_bottom >= quad_bottom } - pub fn is_layer_fully_inside_polygon(&self, layer: &LayerNodeIdentifier, viewport: &ViewportMessageHandler, mut viewport_polygon: Subpath) -> bool { + pub fn is_layer_fully_inside_polygon(&self, layer: &LayerNodeIdentifier, viewport: &ViewportMessageHandler, mut viewport_polygon: BezPath) -> bool { let document_to_viewport = self.navigation_handler.calculate_offset_transform(viewport.center_in_viewport_space().into(), &self.document_ptz); - viewport_polygon.apply_transform(document_to_viewport.inverse()); + viewport_polygon.apply_affine(Affine::new(document_to_viewport.inverse().to_cols_array())); let layer_click_targets = self.network_interface.document_metadata().click_targets(*layer); let layer_transform = self.network_interface.document_metadata().transform_to_document(*layer); layer_click_targets.is_some_and(|targets| { targets.iter().all(|target| match target.target_type() { - ClickTargetType::Subpath(subpath) => { - let mut subpath = subpath.clone(); - subpath.apply_transform(layer_transform); - subpath.is_inside_subpath(&viewport_polygon, None, None) + ClickTargetType::Path(path) => { + let mut path = path.clone(); + path.apply_affine(Affine::new(layer_transform.to_cols_array())); + bezpath_is_inside_bezpath(&path, &viewport_polygon, None, None) } - ClickTargetType::CompoundPath(subpaths) => subpaths.iter().all(|subpath| { - let mut subpath = subpath.clone(); - subpath.apply_transform(layer_transform); - subpath.is_inside_subpath(&viewport_polygon, None, None) - }), ClickTargetType::FreePoint(point) => { let mut point = *point; point.apply_transform(layer_transform); - viewport_polygon.contains_point(point.position) + viewport_polygon.contains(dvec2_to_point(point.position)) } }) }) @@ -2414,22 +2420,26 @@ impl DocumentMessageHandler { self.drive_storage_undo_redo(document_id, resource_storage, legacy_applied, true, responses); } - pub fn undo(&mut self, viewport: &ViewportMessageHandler, responses: &mut VecDeque) -> Option { - // If there is no history return and don't broadcast SelectionChanged - let mut network_interface = self.history.pop_undo()?; - + /// Installs a history snapshot as the active network interface, carrying over the current view state and structure load, and returns the replaced interface. + fn install_history_snapshot(&mut self, mut network_interface: NodeNetworkInterface, viewport: &ViewportMessageHandler) -> NodeNetworkInterface { // Set the previous network navigation metadata to the current navigation metadata network_interface.copy_all_navigation_metadata(&self.network_interface); std::mem::swap(&mut network_interface.resolved_types, &mut self.network_interface.resolved_types); - //Update the metadata transform based on document PTZ + // Update the metadata transform based on document PTZ let transform = self.navigation_handler.calculate_offset_transform(viewport.center_in_viewport_space().into(), &self.document_ptz); network_interface.set_document_to_viewport_transform(transform); // Ensure document structure is loaded so that updating the selected nodes has the correct metadata network_interface.load_structure(); - let previous_network = std::mem::replace(&mut self.network_interface, network_interface); + std::mem::replace(&mut self.network_interface, network_interface) + } + + pub fn undo(&mut self, viewport: &ViewportMessageHandler, responses: &mut VecDeque) -> Option { + // If there is no history return and don't broadcast SelectionChanged + let network_interface = self.history.pop_undo()?; + let previous_network = self.install_history_snapshot(network_interface, viewport); // Push the UpdateOpenDocumentsList message to the bus in order to update the save status of the open documents responses.add(PortfolioMessage::UpdateOpenDocumentsList); @@ -2454,17 +2464,9 @@ impl DocumentMessageHandler { pub fn redo(&mut self, viewport: &ViewportMessageHandler, responses: &mut VecDeque) -> Option { // If there is no history return and don't broadcast SelectionChanged - let mut network_interface = self.history.pop_redo()?; + let network_interface = self.history.pop_redo()?; + let previous_network = self.install_history_snapshot(network_interface, viewport); - // Set the previous network navigation metadata to the current navigation metadata - network_interface.copy_all_navigation_metadata(&self.network_interface); - std::mem::swap(&mut network_interface.resolved_types, &mut self.network_interface.resolved_types); - - //Update the metadata transform based on document PTZ - let transform = self.navigation_handler.calculate_offset_transform(viewport.center_in_viewport_space().into(), &self.document_ptz); - network_interface.set_document_to_viewport_transform(transform); - - let previous_network = std::mem::replace(&mut self.network_interface, network_interface); // Push the UpdateOpenDocumentsList message to the bus in order to update the save status of the open documents responses.add(PortfolioMessage::UpdateOpenDocumentsList); responses.add(NodeGraphMessage::SelectedNodesUpdated); @@ -2617,7 +2619,11 @@ impl DocumentMessageHandler { // If there's already a boolean operation on the selected layer, update it with the new operation if let (Some(upstream_boolean_op), Some(only_selected_layer)) = (upstream_boolean_op, only_selected_layer) { - network_interface.set_input(&InputConnector::node(upstream_boolean_op, 1), NodeInput::value(TaggedValue::BooleanOperation(operation), false), &[]); + network_interface.set_input( + &InputConnector::node(upstream_boolean_op, graphene_std::path_bool_nodes::boolean_operation::OperationInput), + NodeInput::value(TaggedValue::BooleanOperation(operation), false), + &[], + ); responses.add(NodeGraphMessage::RunDocumentGraph); @@ -2748,7 +2754,7 @@ impl DocumentMessageHandler { } /// For each selected layer, splits its fill and stroke into two stacked layers connected - /// to a shared `Solidify Stroke` node via two `Index Elements` nodes (indices 0 and 1). + /// to a shared `Solidify Stroke` node via two `Item at Index` nodes (indices 0 and 1). /// Layers with only a stroke get just a `Solidify Stroke` added. /// Layers with only a fill, or neither, are left untouched. fn handle_expand_fill_stroke_on_selected_layers(&mut self, responses: &mut VecDeque) { @@ -2758,25 +2764,24 @@ impl DocumentMessageHandler { } let solidify_stroke_definition = document_node_definitions::resolve_proto_node_type(graphene_std::vector::solidify_stroke::IDENTIFIER).expect("Solidify Stroke node should exist"); - let index_elements_definition = document_node_definitions::resolve_proto_node_type(graphene_std::graphic::index_elements::IDENTIFIER).expect("Index Elements node should exist"); + let item_at_index_definition = document_node_definitions::resolve_proto_node_type(graphene_std::graphic::item_at_index::IDENTIFIER).expect("Item at Index node should exist"); let mut resulting_layers: Vec = Vec::new(); for layer in selected_layers { - let Some(vector_data) = self.network_interface.document_metadata().layer_vector_data.get(&layer) else { + if !self.network_interface.document_metadata().layer_vector_data.contains_key(&layer) { resulting_layers.push(layer.to_node()); continue; - }; - let stroke = vector_data.stroke.as_ref(); + } - let fill_graphic_list = self.network_interface.document_metadata().layer_fill_attributes.get(&layer); - let stroke_graphic_list = self.network_interface.document_metadata().layer_stroke_attributes.get(&layer); + let appearance = self.network_interface.document_metadata().layer_appearance_attributes.get(&layer); - let has_fill = fill_graphic_list.is_some_and(|list| is_paint_present(list)); - // `Vector.stroke` captures stroke geometry, even with weight 0 or transparent paint. - // So stroke visibility must be checked from `ATTR_STROKE`, the paint source of truth. - let stroke_visible = stroke_graphic_list.is_some_and(|list| list.element(0).is_some_and(|g| !g.is_fully_transparent())); - let has_stroke = stroke.as_ref().is_some_and(|s| s.has_renderable_stroke()) && stroke_visible; + let has_fill = appearance.is_some_and(|appearance| appearance.has_painted_cover(Cover::Fill)); + // A visible stroke needs both renderable geometry (non-zero weight) and paint that draws something + let has_stroke = appearance.is_some_and(|appearance| { + appearance.first_coverage_of(Cover::Stroke).is_some_and(|coverage| coverage.stroke_params().has_renderable_stroke()) + && appearance.first_paint_of(Cover::Stroke).is_some_and(|paint| !paint.is_guaranteed_fully_transparent()) + }); // No stroke means there's nothing to solidify. Fill-only layers are already in the desired form, so skip. if !has_stroke { @@ -2791,7 +2796,7 @@ impl DocumentMessageHandler { if has_fill && has_stroke { let (existing_index, new_index) = (0_f64, 1_f64); - let existing_index_template = index_elements_definition.node_template_input_override([None, Some(NodeInput::value(TaggedValue::F64(existing_index), false))]); + let existing_index_template = item_at_index_definition.node_template_input_override([None, Some(NodeInput::value(TaggedValue::F64(existing_index), false))]); let existing_index_id = NodeId::new(); self.network_interface.insert_node(existing_index_id, existing_index_template, &[]); self.network_interface.move_node_to_chain_start(&existing_index_id, layer, &[], false); @@ -2813,12 +2818,13 @@ impl DocumentMessageHandler { self.network_interface.set_display_name(&new_layer_id, original_name, &[]); } - let new_index_template = index_elements_definition.node_template_input_override([None, Some(NodeInput::value(TaggedValue::F64(new_index), false))]); + let new_index_template = item_at_index_definition.node_template_input_override([None, Some(NodeInput::value(TaggedValue::F64(new_index), false))]); let new_index_id = NodeId::new(); self.network_interface.insert_node(new_index_id, new_index_template, &[]); self.network_interface.move_node_to_chain_start(&new_index_id, new_layer, &[], false); - self.network_interface.create_wire(&OutputConnector::node(solidify_id, 0), &InputConnector::node(new_index_id, 0), &[]); + self.network_interface + .create_wire(&OutputConnector::primary_output(solidify_id), &InputConnector::primary_input(new_index_id), &[]); resulting_layers.push(layer.to_node()); resulting_layers.push(new_layer.to_node()); @@ -3408,6 +3414,11 @@ impl DocumentMessageHandler { let selected_nodes = self.network_interface.selected_nodes(); let selected_layers_except_artboards = selected_nodes.selected_layers_except_artboards(&self.network_interface); + // A layer whose chain cannot carry blending nodes has nowhere to put the value, so it disqualifies the whole selection + let all_layers_support_blending = selected_nodes + .selected_layers_except_artboards(&self.network_interface) + .all(|layer| self.network_interface.layer_hosts_blending_nodes(&layer.to_node(), &[])); + // Look up the current opacity and blend mode of the selected layers (if any), and split the iterator into the first tuple and the rest. let mut blending_options = selected_layers_except_artboards.map(|layer| { ( @@ -3419,8 +3430,8 @@ impl DocumentMessageHandler { let first_blending_options = blending_options.next(); let result_blending_options = blending_options; - // If there are no selected layers, disable the opacity and blend mode widgets. - let disabled = first_blending_options.is_none(); + // If there are no selected layers, or any of them cannot host the nodes, disable the opacity and blend mode widgets. + let disabled = first_blending_options.is_none() || !all_layers_support_blending; // Amongst the selected layers, check if the opacities and blend modes are identical across all layers. // The result is setting `option` and `blend_mode` to Some value if all their values are identical, or None if they are not. @@ -3583,7 +3594,7 @@ impl DocumentMessageHandler { // Showing only compatible types for the layer based on the output type of the node upstream from its horizontal input let compatible_type = selected_layer.and_then(|layer| { self.network_interface - .upstream_output_connector(&InputConnector::node(layer.to_node(), 1), &[]) + .upstream_output_connector(&InputConnector::layer_secondary_input(layer.to_node()), &[]) .and_then(|upstream_output| self.network_interface.output_type(&upstream_output, &[]).add_node_string()) }); @@ -3789,7 +3800,7 @@ impl DocumentMessageHandler { /// Create a network interface with a single export fn default_document_network_interface() -> NodeNetworkInterface { let mut network_interface = NodeNetworkInterface::default(); - network_interface.add_export(TaggedValue::TypeDefault(descriptor!(graphene_std::list::List)), -1, "", &[]); + network_interface.add_export(TaggedValue::TypeDefault(list!(graphene_std::Artboard)), -1, "", &[]); network_interface } @@ -3799,7 +3810,6 @@ enum XRayTarget { Point(DVec2), Quad(Quad), Path(BezPath), - Polygon(Subpath), } /// The result for the [`ClickXRayIter`] on the layer @@ -3822,13 +3832,7 @@ fn quad_to_kurbo(quad: Quad) -> BezPath { fn click_targets_to_kurbo<'a>(click_targets: impl Iterator, transform: DAffine2) -> BezPath { let segments = click_targets - .filter_map(|target| { - if let ClickTargetType::Subpath(subpath) = target.target_type() { - Some(subpath.iter()) - } else { - None - } - }) + .filter_map(|target| if let ClickTargetType::Path(path) = target.target_type() { Some(path.segments()) } else { None }) .flatten() .map(|bezier| Affine::new(transform.to_cols_array()) * bezier); BezPath::from_path_segments(segments) @@ -3899,10 +3903,6 @@ impl<'a> ClickXRayIter<'a> { } XRayTarget::Quad(quad) => self.check_layer_area_target(click_targets, clip, layer, quad_to_kurbo(*quad), transform), XRayTarget::Path(path) => self.check_layer_area_target(click_targets, clip, layer, path.clone(), transform), - XRayTarget::Polygon(polygon) => { - let polygon = BezPath::from_path_segments(polygon.iter_closed()); - self.check_layer_area_target(click_targets, clip, layer, polygon, transform) - } } } } @@ -4007,7 +4007,7 @@ mod document_message_handler_tests { #[test] fn pending_gradient_bakes_round_trip_through_serialization() { let document = DocumentMessageHandler { - pending_gradient_bbox_bake: vec![(vec![NodeId(7)], NodeId(42), graphic_types::migrations::legacy::Gradient::default())], + pending_gradient_bbox_bake: vec![(vec![NodeId(7)], NodeId(42), graphic_types::migrations::legacy::LegacyGradient::default())], ..Default::default() }; @@ -4318,4 +4318,40 @@ mod document_message_handler_tests { Dist: {distance} (should be < 1)" ); } + + // Grouping choreography transiently disconnects the stack wire, and the stored default for that connector + // must stay an empty list rather than any value which materializes as a one-element phantom in the stack + #[tokio::test] + async fn grouping_adds_no_phantom_element_to_the_stack() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + editor.drag_tool(ToolType::Rectangle, 0., 0., 100., 100., ModifierKeys::empty()).await; + + editor + .handle_message(DocumentMessage::GroupSelectedLayers { + group_folder_type: GroupFolderType::Layer, + }) + .await; + + let instrumented = editor.eval_graph().await.unwrap(); + + // The emptiness guards keep these assertions honest: a wrong `Output` type on `grab_all_input` yields no records at all, which would otherwise pass without checking anything + let base_lengths: Vec = instrumented + .grab_all_input::>(&editor.runtime) + .map(|base| base.len()) + .collect(); + assert!(!base_lengths.is_empty(), "Instrumentation should have recorded at least one stack base"); + assert!(base_lengths.iter().all(|&len| len == 0), "Every stack base should be empty, found lengths {base_lengths:?}"); + + let news: Vec> = instrumented + .grab_all_input::>(&editor.runtime) + .collect(); + assert!(!news.is_empty(), "Instrumentation should have recorded at least one stacked element list"); + let phantom_count = news + .iter() + .flat_map(|new| new.iter_element_values()) + .filter(|graphic| matches!(graphic, graphene_std::Graphic::None(_))) + .count(); + assert_eq!(phantom_count, 0, "No stacked element should be a phantom None graphic"); + } } diff --git a/editor/src/messages/portfolio/document/graph_operation/graph_operation_message.rs b/editor/src/messages/portfolio/document/graph_operation/graph_operation_message.rs index 7d986bce1b..2a3fef21cb 100644 --- a/editor/src/messages/portfolio/document/graph_operation/graph_operation_message.rs +++ b/editor/src/messages/portfolio/document/graph_operation/graph_operation_message.rs @@ -5,13 +5,11 @@ use crate::messages::prelude::*; use glam::{DAffine2, DVec2}; use graph_craft::document::NodeId; use graphene_std::Color; -use graphene_std::brush::brush_stroke::BrushStroke; use graphene_std::raster::BlendMode; use graphene_std::raster_types::Image; -use graphene_std::subpath::Subpath; use graphene_std::text::{Font, TypesettingConfig}; -use graphene_std::vector::style::{GradientSpreadMethod, GradientType, Stroke}; -use graphene_std::vector::{GradientStops, PointId, VectorModificationType}; +use graphene_std::vector::style::{GradientForm, GradientHueDirection, GradientInterpolation, GradientSettings, GradientSpace, GradientSpread, PaintOrder, Stroke}; +use graphene_std::vector::{Gradient, VectorModificationType}; #[impl_message(Message, DocumentMessage, GraphOperation)] #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)] @@ -20,11 +18,16 @@ pub enum GraphOperationMessage { layer: LayerNodeIdentifier, color: Option, }, + ColorValueSet { + layer: LayerNodeIdentifier, + color: Color, + }, FillGradientSet { layer: LayerNodeIdentifier, - gradient: GradientStops, - gradient_type: GradientType, - spread_method: GradientSpreadMethod, + #[serde(skip)] + gradient: Gradient, + gradient_form: GradientForm, + gradient_settings: GradientSettings, transform: DAffine2, }, BlendingFillSet { @@ -33,19 +36,44 @@ pub enum GraphOperationMessage { }, GradientStopsSet { layer: LayerNodeIdentifier, - stops: GradientStops, + #[serde(skip)] + stops: Gradient, + }, + GradientPositionsSet { + layer: LayerNodeIdentifier, + positions: Vec, + }, + GradientMidpointsSet { + layer: LayerNodeIdentifier, + midpoints: Vec, }, GradientTransformSet { layer: LayerNodeIdentifier, transform: DAffine2, }, - GradientTypeSet { + GradientFormSet { layer: LayerNodeIdentifier, - gradient_type: GradientType, + gradient_form: GradientForm, }, - GradientSpreadMethodSet { + GradientSpreadSet { layer: LayerNodeIdentifier, - spread_method: GradientSpreadMethod, + gradient_spread: GradientSpread, + }, + GradientSpaceSet { + layer: LayerNodeIdentifier, + gradient_space: GradientSpace, + }, + GradientCyclicSet { + layer: LayerNodeIdentifier, + gradient_cyclic: bool, + }, + GradientHueDirectionSet { + layer: LayerNodeIdentifier, + gradient_hue_direction: GradientHueDirection, + }, + GradientInterpolationSet { + layer: LayerNodeIdentifier, + gradient_interpolation: GradientInterpolation, }, OpacitySet { layer: LayerNodeIdentifier, @@ -63,6 +91,10 @@ pub enum GraphOperationMessage { color: Option, stroke: Stroke, }, + StrokeOrderSet { + layer: LayerNodeIdentifier, + paint_order: PaintOrder, + }, TransformChange { layer: LayerNodeIdentifier, transform: DAffine2, @@ -79,9 +111,23 @@ pub enum GraphOperationMessage { layer: LayerNodeIdentifier, modification_type: VectorModificationType, }, - Brush { + NewBrushGroupLayer { + id: NodeId, + strokes_node_id: NodeId, + parent: LayerNodeIdentifier, + insert_index: usize, + color: Color, + diameter: f64, + hardness: f64, + flow: f64, + }, + NewBrushStrokesNode { layer: LayerNodeIdentifier, - strokes: Vec, + strokes_node_id: NodeId, + color: Color, + diameter: f64, + hardness: f64, + flow: f64, }, SetUpstreamToChain { layer: LayerNodeIdentifier, @@ -128,12 +174,6 @@ pub enum GraphOperationMessage { parent: LayerNodeIdentifier, insert_index: usize, }, - NewVectorLayer { - id: NodeId, - subpaths: Vec>, - parent: LayerNodeIdentifier, - insert_index: usize, - }, NewTextLayer { id: NodeId, text: String, diff --git a/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs b/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs index 4e64599e79..c3741f2c65 100644 --- a/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs +++ b/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs @@ -1,19 +1,20 @@ use super::transform_utils; -use super::utility_types::ModifyInputsContext; +use super::utility_types::{ModifyInputsContext, set_stroke_paint_order}; use crate::consts::{LAYER_INDENT_OFFSET, STACK_VERTICAL_GAP}; use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn; +use crate::messages::portfolio::document::node_graph::document_node_definitions::{BLEND_PATH_INPUT_INDEX, DefinitionIdentifier, resolve_proto_node_type}; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::portfolio::document::utility_types::network_interface::{InputConnector, NodeNetworkInterface, OutputConnector}; use crate::messages::portfolio::document::utility_types::nodes::CollapsedLayers; use crate::messages::prelude::*; use crate::messages::tool::common_functionality::graph_modification_utils::get_clip_mode; use glam::{DAffine2, DVec2, IVec2}; -use graph_craft::descriptor; +use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput}; -use graphene_std::list::List; +use graph_craft::list; use graphene_std::renderer::convert_usvg_path::convert_usvg_path; use graphene_std::text::{Font, TypesettingConfig}; -use graphene_std::vector::style::{GradientSpreadMethod, GradientStop, GradientStops, GradientType, PaintOrder, Stroke, StrokeAlign, StrokeCap, StrokeJoin}; +use graphene_std::vector::style::{Gradient, GradientForm, GradientSettings, GradientSpace, GradientSpread, GradientStop, Stroke, StrokeAlign, StrokeCap, StrokeJoin}; use graphene_std::{Artboard, Color}; #[derive(ExtractField)] @@ -39,15 +40,20 @@ impl MessageHandler> for modify_inputs.fill_color_set(color); } } + GraphOperationMessage::ColorValueSet { layer, color } => { + if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { + modify_inputs.color_value_set(color); + } + } GraphOperationMessage::FillGradientSet { layer, gradient, - gradient_type, - spread_method, + gradient_form, + gradient_settings, transform, } => { if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { - modify_inputs.fill_gradient_set(gradient, gradient_type, spread_method, transform); + modify_inputs.fill_gradient_set(gradient, gradient_form, gradient_settings, transform); } } GraphOperationMessage::BlendingFillSet { layer, fill } => { @@ -60,19 +66,49 @@ impl MessageHandler> for modify_inputs.gradient_stops_set(stops); } } + GraphOperationMessage::GradientPositionsSet { layer, positions } => { + if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { + modify_inputs.gradient_positions_set(positions); + } + } + GraphOperationMessage::GradientMidpointsSet { layer, midpoints } => { + if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { + modify_inputs.gradient_midpoints_set(midpoints); + } + } GraphOperationMessage::GradientTransformSet { layer, transform } => { if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { modify_inputs.gradient_transform_set(transform); } } - GraphOperationMessage::GradientTypeSet { layer, gradient_type } => { + GraphOperationMessage::GradientFormSet { layer, gradient_form } => { if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { - modify_inputs.gradient_type_set(gradient_type); + modify_inputs.gradient_form_set(gradient_form); } } - GraphOperationMessage::GradientSpreadMethodSet { layer, spread_method } => { + GraphOperationMessage::GradientSpreadSet { layer, gradient_spread } => { if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { - modify_inputs.gradient_spread_method_set(spread_method); + modify_inputs.gradient_spread_set(gradient_spread); + } + } + GraphOperationMessage::GradientSpaceSet { layer, gradient_space } => { + if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { + modify_inputs.gradient_space_set(gradient_space); + } + } + GraphOperationMessage::GradientCyclicSet { layer, gradient_cyclic } => { + if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { + modify_inputs.gradient_cyclic_set(gradient_cyclic); + } + } + GraphOperationMessage::GradientHueDirectionSet { layer, gradient_hue_direction } => { + if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { + modify_inputs.gradient_hue_direction_set(gradient_hue_direction); + } + } + GraphOperationMessage::GradientInterpolationSet { layer, gradient_interpolation } => { + if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { + modify_inputs.gradient_interpolation_set(gradient_interpolation); } } GraphOperationMessage::OpacitySet { layer, opacity } => { @@ -96,6 +132,17 @@ impl MessageHandler> for modify_inputs.stroke_set(color, stroke); } } + GraphOperationMessage::StrokeOrderSet { layer, paint_order } => { + let stroke_reference = DefinitionIdentifier::ProtoNode(graphene_std::vector::stroke::IDENTIFIER); + let Some(stroke_node_id) = ModifyInputsContext::locate_node_in_layer_chain(&stroke_reference, layer, network_interface) else { + return; + }; + if set_stroke_paint_order(network_interface, &[], stroke_node_id, paint_order) { + responses.add(PropertiesPanelMessage::Refresh); + responses.add(NodeGraphMessage::RunDocumentGraph); + responses.add(NodeGraphMessage::SendGraph); + } + } GraphOperationMessage::TransformChange { layer, transform, @@ -126,13 +173,38 @@ impl MessageHandler> for modify_inputs.vector_modify(modification_type); } } - GraphOperationMessage::Brush { layer, strokes } => { - if let Some(mut modify_inputs) = ModifyInputsContext::new_with_layer(layer, network_interface, responses) { - modify_inputs.brush_modify(strokes); - } + GraphOperationMessage::NewBrushGroupLayer { + id, + strokes_node_id, + parent, + insert_index, + color, + diameter, + hardness, + flow, + } => { + let layer = ModifyInputsContext::new(network_interface, responses).create_layer(id); + insert_brush_strokes_chain(network_interface, layer, strokes_node_id, color, diameter, hardness, flow); + + responses.add(NodeGraphMessage::MoveLayerToStack { layer, parent, insert_index }); + responses.add(GraphOperationMessage::SetUpstreamToChain { layer }); + responses.add(NodeGraphMessage::RunDocumentGraph); + } + GraphOperationMessage::NewBrushStrokesNode { + layer, + strokes_node_id, + color, + diameter, + hardness, + flow, + } => { + insert_brush_strokes_chain(network_interface, layer, strokes_node_id, color, diameter, hardness, flow); + + responses.add(GraphOperationMessage::SetUpstreamToChain { layer }); + responses.add(NodeGraphMessage::RunDocumentGraph); } GraphOperationMessage::SetUpstreamToChain { layer } => { - let Some(OutputConnector::Node { node_id: first_chain_node, .. }) = network_interface.upstream_output_connector(&InputConnector::node(layer.to_node(), 1), &[]) else { + let Some(OutputConnector::Node { node_id: first_chain_node, .. }) = network_interface.upstream_output_connector(&InputConnector::layer_secondary_input(layer.to_node()), &[]) else { return; }; @@ -180,16 +252,16 @@ impl MessageHandler> for } // Set the bottom input of the artboard back to artboard - let bottom_input = NodeInput::type_default(descriptor!(List), true); - network_interface.set_input(&InputConnector::node(artboard_layer.to_node(), 0), bottom_input, &[]); + let bottom_input = NodeInput::type_default(list!(Artboard), true); + network_interface.set_input(&InputConnector::primary_input(artboard_layer.to_node()), bottom_input, &[]); } else { // We have some non layers (e.g. just a rectangle node). We disconnect the bottom input and connect it to the left input. - network_interface.disconnect_input(&InputConnector::node(artboard_layer.to_node(), 0), &[]); - network_interface.set_input(&InputConnector::node(artboard_layer.to_node(), 1), primary_input, &[]); + network_interface.disconnect_input(&InputConnector::primary_input(artboard_layer.to_node()), &[]); + network_interface.set_input(&InputConnector::layer_secondary_input(artboard_layer.to_node()), primary_input, &[]); // Set the bottom input of the artboard back to artboard - let bottom_input = NodeInput::type_default(descriptor!(List), true); - network_interface.set_input(&InputConnector::node(artboard_layer.to_node(), 0), bottom_input, &[]); + let bottom_input = NodeInput::type_default(list!(Artboard), true); + network_interface.set_input(&InputConnector::primary_input(artboard_layer.to_node()), bottom_input, &[]); } } responses.add_front(NodeGraphMessage::SelectedNodesSet { nodes: vec![id] }); @@ -212,11 +284,14 @@ impl MessageHandler> for let mut modify_inputs = ModifyInputsContext::new(network_interface, responses); let layer = modify_inputs.create_layer(id); - // Insert the main chain node (Blend or Morph) depending on whether a blend count is provided - let (chain_node_id, layer_alias, path_alias) = if let Some(count) = blend_count { - (modify_inputs.insert_blend_data(layer, count as f64), "Blend", "Blend Path") + // Insert the main chain node (Blend or Morph) depending on whether a blend count is provided, referencing + // its control path input by the Blend template's named position or the Morph proto node's parameter symbol + let (path_input_connector, layer_alias, path_alias) = if let Some(count) = blend_count { + let blend_node_id = modify_inputs.insert_blend_data(layer, count as f64); + (InputConnector::node_at_index(blend_node_id, BLEND_PATH_INPUT_INDEX), "Blend", "Blend Path") } else { - (modify_inputs.insert_morph_data(layer), "Morph", "Morph Path") + let morph_node_id = modify_inputs.insert_morph_data(layer); + (InputConnector::node(morph_node_id, graphene_std::vector::morph::PathInput), "Morph", "Morph Path") }; // Create the control path layer (Path β†’ Auto-Tangents β†’ Origins to Polyline) @@ -226,9 +301,9 @@ impl MessageHandler> for network_interface.move_layer_to_stack(control_path_layer, parent, insert_index, &[]); network_interface.move_layer_to_stack(layer, parent, insert_index + 1, &[]); - // Connect the Path node's output to the chain node's path parameter input (input 4 for both Morph and Blend). + // Connect the Path node's output to the chain node's control path input. // Done after move_layer_to_stack so chain nodes have correct positions when converted to absolute. - network_interface.set_input(&InputConnector::node(chain_node_id, 4), NodeInput::node(path_node_id, 0), &[]); + network_interface.set_input(&path_input_connector, NodeInput::node(path_node_id, 0), &[]); responses.add(NodeGraphMessage::SetDisplayNameImpl { node_id: id, @@ -246,29 +321,29 @@ impl MessageHandler> for control_path_id, } => { // Find the chain node (Blend or Morph, first in chain of the layer) - let Some(OutputConnector::Node { node_id: chain_node, .. }) = network_interface.upstream_output_connector(&InputConnector::node(interpolation_layer_id, 1), &[]) else { + let Some(OutputConnector::Node { node_id: chain_node, .. }) = network_interface.upstream_output_connector(&InputConnector::layer_secondary_input(interpolation_layer_id), &[]) else { log::error!("Could not find chain node for layer {interpolation_layer_id}"); return; }; // Get what feeds into the chain node's primary input (the children stack) - let Some(OutputConnector::Node { node_id: children_id, output_index }) = network_interface.upstream_output_connector(&InputConnector::node(chain_node, 0), &[]) else { + let Some(OutputConnector::Node { node_id: children_id, output_index }) = network_interface.upstream_output_connector(&InputConnector::primary_input(chain_node), &[]) else { log::error!("Could not find children stack feeding chain node {chain_node}"); return; }; // Find the deepest node in the control path layer's chain (Origins to Polyline) let mut deepest_chain_node = None; - let mut current_connector = InputConnector::node(control_path_id, 1); + let mut current_connector = InputConnector::layer_secondary_input(control_path_id); while let Some(OutputConnector::Node { node_id, .. }) = network_interface.upstream_output_connector(¤t_connector, &[]) { deepest_chain_node = Some(node_id); - current_connector = InputConnector::node(node_id, 0); + current_connector = InputConnector::primary_input(node_id); } // Connect children to the deepest chain node's input 0 (or the layer's input 1 if no chain) let target_connector = match deepest_chain_node { - Some(node_id) => InputConnector::node(node_id, 0), - None => InputConnector::node(control_path_id, 1), + Some(node_id) => InputConnector::primary_input(node_id), + None => InputConnector::layer_secondary_input(control_path_id), }; network_interface.set_input(&target_connector, NodeInput::node(children_id, output_index), &[]); @@ -299,7 +374,7 @@ impl MessageHandler> for responses.add(NodeGraphMessage::AddNodes { nodes, new_ids }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(layer.to_node(), 1), + input_connector: InputConnector::layer_secondary_input(layer.to_node()), input: NodeInput::node(first_new_node_id, 0), }); } @@ -310,14 +385,7 @@ impl MessageHandler> for GraphOperationMessage::NewColorFillLayer { node_id, color, parent, insert_index } => { let mut modify_inputs = ModifyInputsContext::new(network_interface, responses); let layer = modify_inputs.create_layer(node_id); - modify_inputs.insert_color_value(color, layer); - network_interface.move_layer_to_stack(layer, parent, insert_index, &[]); - responses.add(NodeGraphMessage::RunDocumentGraph); - } - GraphOperationMessage::NewVectorLayer { id, subpaths, parent, insert_index } => { - let mut modify_inputs = ModifyInputsContext::new(network_interface, responses); - let layer = modify_inputs.create_layer(id); - modify_inputs.insert_vector(subpaths, layer, true, true, true); + modify_inputs.insert_color_value(color, layer, InputConnector::layer_secondary_input(layer.to_node())); network_interface.move_layer_to_stack(layer, parent, insert_index, &[]); responses.add(NodeGraphMessage::RunDocumentGraph); } @@ -368,7 +436,7 @@ impl MessageHandler> for input_node: NodeInput::node(document_node.inputs[1].as_node().unwrap_or_default(), 0), output_nodes: network_interface .outward_wires(&[]) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(artboard.to_node(), 0))) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::primary_output(artboard.to_node()))) .cloned() .unwrap_or_default(), merge_node: node_id, @@ -394,7 +462,7 @@ impl MessageHandler> for for artboard in &artboard_data { // Modify downstream connections responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(artboard.1.merge_node, 1), + input_connector: InputConnector::layer_secondary_input(artboard.1.merge_node), input: NodeInput::node(artboard.1.input_node.as_node().unwrap_or_default(), 0), }); @@ -402,7 +470,7 @@ impl MessageHandler> for for outward_wire in &artboard.1.output_nodes { let input = NodeInput::node(artboard_data[artboard.0].merge_node, 0); let input_connector = match artboard_data.get(&outward_wire.node_id().unwrap_or_default()) { - Some(artboard_info) => InputConnector::node(artboard_info.merge_node, outward_wire.input_index()), + Some(artboard_info) => InputConnector::node_at_index(artboard_info.merge_node, outward_wire.input_index()), _ => *outward_wire, }; responses.add(NodeGraphMessage::SetInput { input_connector, input }); @@ -462,18 +530,14 @@ impl MessageHandler> for }; placement_transform.translation = placement_transform.translation.round(); - let graphite_gradient_stops = extract_graphite_gradient_stops(&svg); + let gradient_info = SvgGradientInfo { + graphite_stops: extract_graphite_gradient_stops(&svg), + spaces: extract_gradient_spaces(&svg), + }; // Pass identity so each leaf layer receives only its SVG-native transform from `abs_transform`. // The placement offset is then applied once to the root group layer below. - import_usvg_node( - &mut modify_inputs, - &usvg::Node::Group(Box::new(tree.root().clone())), - id, - parent, - insert_index, - &graphite_gradient_stops, - ); + import_usvg_node(&mut modify_inputs, &usvg::Node::Group(Box::new(tree.root().clone())), id, parent, insert_index, &gradient_info); // After import, `layer_node` is set to the root group. Apply the placement transform to it // (skipped automatically when identity, so file-open with content at origin creates no Transform node). @@ -505,11 +569,136 @@ fn usvg_transform(c: usvg::Transform) -> DAffine2 { const GRAPHITE_NAMESPACE: &str = "https://graphite.art"; +/// Gradient information pre-parsed from the raw SVG XML, carrying what usvg's simplified tree drops. +struct SvgGradientInfo { + /// Real stops, keyed by gradient element `id`, for gradients Graphite exported with midpoint curve data. + graphite_stops: HashMap, + /// Gradient spaces, keyed by gradient element `id`, resolved from the `color-interpolation` property. + spaces: HashMap, +} + +/// Pre-parses the raw SVG XML to resolve each gradient's inherited `color-interpolation` property, which usvg's +/// tree does not carry. Only `linearRGB` selects the linear space; `auto` and `sRGB` (browsers treat the +/// user-agent-defined `auto` as `sRGB`) mean gamma, as does any unrecognized value. +fn extract_gradient_spaces(svg: &str) -> HashMap { + let mut result = HashMap::new(); + + // Quick check: gradients in an SVG that never mentions `color-interpolation` all take the sRGB default + if !svg.contains("color-interpolation") { + return result; + } + + let doc = match usvg::roxmltree::Document::parse(svg) { + Ok(doc) => doc, + Err(_) => return result, + }; + + // The document's ` + + + + + + + + "##; + + let spaces = extract_gradient_spaces(svg); + assert_eq!(spaces.get("from-type-rule"), Some(&GradientSpace::RgbLinear), "a type rule in a style block should reach the gradient"); + assert_eq!( + spaces.get("from-class-rule"), + Some(&GradientSpace::RgbGamma), + "the class rule should outrank the type rule by specificity" + ); + assert_eq!(spaces.get("exact"), Some(&GradientSpace::RgbLinear), "the ID rule should outrank the class rule"); + assert_eq!(spaces.get("inline-beats-rules"), Some(&GradientSpace::RgbLinear), "the inline style should beat every style block rule"); + assert_eq!( + spaces.get("rule-beats-attribute"), + Some(&GradientSpace::RgbGamma), + "a style block rule should beat the presentation attribute" + ); + } + + #[test] + fn repeated_and_important_declarations_resolve_by_cascade_order() { + let svg = r##" + + + + + "##; + + let spaces = extract_gradient_spaces(svg); + assert_eq!( + spaces.get("last-declaration-wins"), + Some(&GradientSpace::RgbLinear), + "the last of repeated inline declarations should win" + ); + assert_eq!( + spaces.get("important-beats-later"), + Some(&GradientSpace::RgbLinear), + "an `!important` declaration should beat a later normal one" + ); + assert_eq!( + spaces.get("important-rule-beats-inline"), + Some(&GradientSpace::RgbLinear), + "an `!important` style block rule should beat the inline style" + ); + } + + #[test] + fn color_interpolation_yields_nothing_when_never_declared() { + let svg = r##""##; + + assert!( + extract_gradient_spaces(svg).is_empty(), + "gradients without any declaration should fall back to the caller's gamma default" + ); + } +} diff --git a/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs b/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs index e132402e71..89d7cfa524 100644 --- a/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs +++ b/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs @@ -2,9 +2,7 @@ use crate::messages::portfolio::document::utility_types::network_interface::{Inp use glam::{DAffine2, DVec2}; use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput}; -use graphene_std::subpath::Subpath; use graphene_std::transform::Transform; -use graphene_std::vector::PointId; /// Update the inputs of the transform node to match a new transform pub fn update_transform(network_interface: &mut NodeNetworkInterface, node_id: &NodeId, transform: DAffine2) { @@ -14,10 +12,26 @@ pub fn update_transform(network_interface: &mut NodeNetworkInterface, node_id: & let rotation = rotation.to_degrees(); let skew = DVec2::new(skew.atan().to_degrees(), 0.); - network_interface.set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::DVec2(translation), false), &[]); - network_interface.set_input(&InputConnector::node(*node_id, 2), NodeInput::value(TaggedValue::F64(rotation), false), &[]); - network_interface.set_input(&InputConnector::node(*node_id, 3), NodeInput::value(TaggedValue::DVec2(scale), false), &[]); - network_interface.set_input(&InputConnector::node(*node_id, 4), NodeInput::value(TaggedValue::DVec2(skew), false), &[]); + network_interface.set_input( + &InputConnector::node(*node_id, graphene_std::transform_nodes::transform::TranslationInput), + NodeInput::value(TaggedValue::DVec2(translation), false), + &[], + ); + network_interface.set_input( + &InputConnector::node(*node_id, graphene_std::transform_nodes::transform::RotationInput), + NodeInput::value(TaggedValue::F64(rotation), false), + &[], + ); + network_interface.set_input( + &InputConnector::node(*node_id, graphene_std::transform_nodes::transform::ScaleInput), + NodeInput::value(TaggedValue::DVec2(scale), false), + &[], + ); + network_interface.set_input( + &InputConnector::node(*node_id, graphene_std::transform_nodes::transform::SkewInput), + NodeInput::value(TaggedValue::DVec2(skew), false), + &[], + ); } // TODO: This should be extracted from the graph at the location of the transform node. @@ -71,32 +85,6 @@ pub fn get_current_normalized_pivot(inputs: &[NodeInput]) -> DVec2 { if let Some(&TaggedValue::DVec2(pivot)) = inputs[5].as_value() { pivot } else { DVec2::splat(0.5) } } -/// Expand a bounds to avoid div zero errors -fn clamp_bounds(bounds_min: DVec2, mut bounds_max: DVec2) -> [DVec2; 2] { - let bounds_size = bounds_max - bounds_min; - if bounds_size.x < 1e-10 { - bounds_max.x = bounds_min.x + 1.; - } - if bounds_size.y < 1e-10 { - bounds_max.y = bounds_min.y + 1.; - } - [bounds_min, bounds_max] -} -/// Returns corners of all subpaths -fn subpath_bounds(subpaths: &[Subpath]) -> [DVec2; 2] { - subpaths - .iter() - .filter_map(|subpath| subpath.bounding_box()) - .reduce(|b1, b2| [b1[0].min(b2[0]), b1[1].max(b2[1])]) - .unwrap_or_default() -} - -/// Returns corners of all subpaths (but expanded to avoid division-by-zero errors) -pub fn nonzero_subpath_bounds(subpaths: &[Subpath]) -> [DVec2; 2] { - let [bounds_min, bounds_max] = subpath_bounds(subpaths); - clamp_bounds(bounds_min, bounds_max) -} - #[cfg(test)] mod tests { use super::*; diff --git a/editor/src/messages/portfolio/document/graph_operation/utility_types.rs b/editor/src/messages/portfolio/document/graph_operation/utility_types.rs index 638e2a133d..f488adafd6 100644 --- a/editor/src/messages/portfolio/document/graph_operation/utility_types.rs +++ b/editor/src/messages/portfolio/document/graph_operation/utility_types.rs @@ -1,23 +1,26 @@ use super::transform_utils; -use crate::messages::portfolio::document::node_graph::document_node_definitions::{DefinitionIdentifier, resolve_document_node_type, resolve_network_node_type, resolve_proto_node_type}; +use crate::messages::portfolio::document::node_graph::document_node_definitions::{ + ARTBOARD_DIMENSIONS_INPUT_INDEX, ARTBOARD_LOCATION_INPUT_INDEX, DefinitionIdentifier, resolve_document_node_type, resolve_network_node_type, resolve_proto_node_type, +}; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; -use crate::messages::portfolio::document::utility_types::network_interface::{self, FlowType, InputConnector, NodeNetworkInterface, OutputConnector}; +use crate::messages::portfolio::document::utility_types::network_interface::{self, FlowType, InputConnector, NodeNetworkInterface}; use crate::messages::prelude::*; -use crate::messages::tool::common_functionality::graph_modification_utils::{get_fill_input_node_id, get_upstream_gradient_value_node_id, gradient_chain_target_input}; +use crate::messages::tool::common_functionality::graph_modification_utils::{ + ReplaceablePaintChain, get_fill_input_node_id, get_upstream_gradient_value_node_id, gradient_chain_target_input, replaceable_paint_chain, +}; use glam::{DAffine2, DVec2, IVec2}; use graph_craft::application_io::resource::ResourceId; use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput}; -use graph_craft::{ProtoNodeIdentifier, concrete, descriptor}; -use graphene_std::brush::brush_stroke::BrushStroke; +use graph_craft::{ProtoNodeIdentifier, concrete}; use graphene_std::list::List; use graphene_std::raster::BlendMode; use graphene_std::raster_types::Image; -use graphene_std::subpath::Subpath; use graphene_std::text::{Font, TypesettingConfig}; -use graphene_std::vector::style::{GradientSpreadMethod, GradientType, Stroke}; -use graphene_std::vector::{GradientStops, PointId, Vector, VectorModification, VectorModificationType}; -use graphene_std::{Artboard, Color, Graphic, NodeInputDecleration}; +use graphene_std::vector::style::{GradientForm, GradientHueDirection, GradientInterpolation, GradientSettings, GradientSpace, GradientSpread, PaintOrder, Stroke}; +use graphene_std::vector::{Gradient, GradientRamp, Vector, VectorModification, VectorModificationType}; +use graphene_std::{Artboard, Color, Graphic}; +use kurbo::BezPath; #[derive(PartialEq, Clone, Copy, Debug, serde::Serialize, serde::Deserialize)] pub enum TransformIn { @@ -58,72 +61,6 @@ impl<'a> ModifyInputsContext<'a> { Some(document) } - /// Starts at any folder, or the output, and skips layer nodes based on insert_index. Non layer nodes are always skipped. Returns the post node InputConnector and pre node OutputConnector - /// Non layer nodes directly upstream of a layer are treated as part of that layer. See insert_index == 2 in the diagram - /// -----> Post node - /// | if insert_index == 0, return (Post node, Some(Layer1)) - /// -> Layer1 - /// ↑ if insert_index == 1, return (Layer1, Some(Layer2)) - /// -> Layer2 - /// ↑ - /// -> NonLayerNode - /// ↑ if insert_index == 2, return (NonLayerNode, Some(Layer3)) - /// -> Layer3 - /// if insert_index == 3, return (Layer3, None) - pub fn get_post_node_with_index(network_interface: &NodeNetworkInterface, parent: LayerNodeIdentifier, insert_index: usize) -> InputConnector { - let mut post_node_input_connector = if parent == LayerNodeIdentifier::ROOT_PARENT { - InputConnector::Export(0) - } else { - InputConnector::node(parent.to_node(), 1) - }; - // Skip layers based on skip_layer_nodes, which inserts the new layer at a certain index of the layer stack. - let mut current_index = 0; - - // Set the post node to the layer node at insert_index - loop { - if current_index == insert_index { - break; - } - let next_node_in_stack_id = network_interface - .input_from_connector(&post_node_input_connector, &[]) - .and_then(|input_from_connector| if let NodeInput::Node { node_id, .. } = input_from_connector { Some(node_id) } else { None }); - - if let Some(next_node_in_stack_id) = next_node_in_stack_id { - // Only increment index for layer nodes - if network_interface.is_layer(next_node_in_stack_id, &[]) { - current_index += 1; - } - // Input as a sibling to the Layer node above - post_node_input_connector = InputConnector::node(*next_node_in_stack_id, 0); - } else { - log::error!("Error getting post node: insert_index out of bounds"); - break; - }; - } - - let layer_input_connector = post_node_input_connector; - - // Sink post_node down to the end of the non layer chain that feeds into post_node, such that pre_node is the layer node at insert_index + 1, or None if insert_index is the last layer - loop { - let pre_node_output_connector = network_interface.upstream_output_connector(&post_node_input_connector, &[]); - - match pre_node_output_connector { - Some(OutputConnector::Node { node_id: pre_node_id, .. }) if !network_interface.is_layer(&pre_node_id, &[]) => { - // Update post_node_input_connector for the next iteration - post_node_input_connector = InputConnector::node(pre_node_id, 0); - // Insert directly under layer if moving to the end of a layer stack that ends with a non layer node that does not have an exposed primary input - let primary_is_exposed = network_interface.input_from_connector(&post_node_input_connector, &[]).is_some_and(|input| input.is_exposed()); - if !primary_is_exposed { - return layer_input_connector; - } - } - _ => break, // Break if pre_node_output_connector is None or if pre_node_id is a layer - } - } - - post_node_input_connector - } - /// Creates a new layer and adds it to the document network. network_interface.move_layer_to_stack should be called after pub fn create_layer(&mut self, new_id: NodeId) -> LayerNodeIdentifier { let new_merge_node = resolve_network_node_type("Merge").expect("Merge node").default_node_template(); @@ -134,11 +71,11 @@ impl<'a> ModifyInputsContext<'a> { /// Creates an artboard as the primary export for the document network. pub fn create_artboard(&mut self, new_id: NodeId, location: DVec2, dimensions: DVec2, background: Color, clip: bool) -> LayerNodeIdentifier { let artboard_node_template = resolve_network_node_type("Artboard").expect("Node").node_template_input_override([ - Some(NodeInput::type_default(descriptor!(List), true)), - Some(NodeInput::type_default(descriptor!(List), true)), + Some(NodeInput::type_default(concrete!(List), true)), + Some(NodeInput::type_default(concrete!(List), true)), Some(NodeInput::value(TaggedValue::DVec2(location), false)), Some(NodeInput::value(TaggedValue::DVec2(dimensions), false)), - Some(NodeInput::value(TaggedValue::Color(Some(background)), false)), + Some(NodeInput::value(TaggedValue::Color(background), false)), Some(NodeInput::value(TaggedValue::Bool(clip), false)), ]); self.network_interface.insert_node(new_id, artboard_node_template, &[]); @@ -149,7 +86,7 @@ impl<'a> ModifyInputsContext<'a> { let boolean = resolve_proto_node_type(graphene_std::path_bool_nodes::boolean_operation::IDENTIFIER) .expect("Boolean node does not exist") .node_template_input_override([ - Some(NodeInput::type_default(descriptor!(List), true)), + Some(NodeInput::type_default(concrete!(List), true)), Some(NodeInput::value(TaggedValue::BooleanOperation(operation), false)), ]); @@ -161,7 +98,7 @@ impl<'a> ModifyInputsContext<'a> { pub fn insert_blend_data(&mut self, layer: LayerNodeIdentifier, count: f64) -> NodeId { let blend = resolve_network_node_type("Blend") .expect("Blend node does not exist") - .node_template_input_override([Some(NodeInput::type_default(descriptor!(List), true)), Some(NodeInput::value(TaggedValue::F64(count), false))]); + .node_template_input_override([Some(NodeInput::type_default(concrete!(List), true)), Some(NodeInput::value(TaggedValue::F64(count), false))]); let blend_id = NodeId::new(); self.network_interface.insert_node(blend_id, blend, &[]); @@ -173,7 +110,7 @@ impl<'a> ModifyInputsContext<'a> { pub fn insert_morph_data(&mut self, layer: LayerNodeIdentifier) -> NodeId { let morph = resolve_proto_node_type(graphene_std::vector::morph::IDENTIFIER) .expect("Morph node does not exist") - .node_template_input_override([Some(NodeInput::type_default(descriptor!(List), true)), Some(NodeInput::value(TaggedValue::F64(0.5), false))]); + .node_template_input_override([Some(NodeInput::type_default(concrete!(List), true)), Some(NodeInput::value(TaggedValue::F64(0.5), false))]); let morph_id = NodeId::new(); self.network_interface.insert_node(morph_id, morph, &[]); @@ -209,9 +146,9 @@ impl<'a> ModifyInputsContext<'a> { path_id } - pub fn insert_vector(&mut self, subpaths: Vec>, layer: LayerNodeIdentifier, include_transform: bool, include_fill: bool, include_stroke: bool) { + pub fn insert_vector(&mut self, bezpath: BezPath, layer: LayerNodeIdentifier, include_transform: bool, include_fill: bool, include_stroke: bool) { // Build a VectorModification that reproduces the geometry (same format the Pen tool uses) - let vector = Vector::from_subpaths(subpaths, true); + let vector = Vector::from_bezpath(bezpath); let modification = Box::new(VectorModification::create_from_vector(&vector)); let shape = resolve_network_node_type("Path") @@ -297,14 +234,41 @@ impl<'a> ModifyInputsContext<'a> { self.network_interface.move_node_to_chain_start(&fill_id, layer, &[], self.import); } - pub fn insert_color_value(&mut self, color: Color, layer: LayerNodeIdentifier) { + pub fn insert_color_value(&mut self, color: Color, layer: LayerNodeIdentifier, attachment_input: InputConnector) -> NodeId { let color_value = resolve_proto_node_type(graphene_std::math_nodes::color_value::IDENTIFIER) .expect("Color Value node does not exist") - .node_template_input_override([Some(NodeInput::value(TaggedValue::None, false)), Some(NodeInput::value(TaggedValue::Color(Some(color)), false))]); + .node_template_input_override([Some(NodeInput::value(TaggedValue::None, false)), Some(NodeInput::value(TaggedValue::Color(color), false))]); let color_value_id = NodeId::new(); self.network_interface.insert_node(color_value_id, color_value, &[]); - self.network_interface.move_node_to_chain_start(&color_value_id, layer, &[], self.import); + self.start_paint_chain(&color_value_id, layer, attachment_input); + + color_value_id + } + + /// Clear the whole-expanse paint one tool left on a layer so the other can start its own chain there. + /// Severing at the attachment detaches the layer from whatever the walk stopped at, which is the only part a node + /// the rest of the graph also draws from is subjected to, since such a node is never among those deleted. + fn clear_paint_chain(&mut self, paint_chain: &ReplaceablePaintChain) { + self.network_interface.disconnect_input(&paint_chain.attachment_input, &[]); + + if !paint_chain.nodes.is_empty() { + self.network_interface.delete_nodes(paint_chain.nodes.clone(), false, &[]); + } + } + + /// Wire a node that paints the layer's whole expanse into the start of its chain, + /// or past the 'Transform' nodes a blank layer already carries so those go on applying to the paint. + fn start_paint_chain(&mut self, node_id: &NodeId, layer: LayerNodeIdentifier, attachment_input: InputConnector) { + let layer_content_input = InputConnector::layer_secondary_input(layer.to_node()); + + if attachment_input == layer_content_input { + self.network_interface.move_node_to_chain_start(node_id, layer, &[], self.import); + return; + } + + self.network_interface.set_input(&attachment_input, NodeInput::node(*node_id, 0), &[]); + self.network_interface.set_chain_position(node_id, &[]); } pub fn insert_image_data(&mut self, image: Image, layer: LayerNodeIdentifier) { @@ -383,6 +347,16 @@ impl<'a> ModifyInputsContext<'a> { self.existing_node_id(&DefinitionIdentifier::ProtoNode(reference), create_if_nonexistent) } + /// The same as [`Self::existing_proto_node_id`], but yielding `None` on layers whose chain cannot host the node. + fn existing_chain_hosted_node_id(&mut self, reference: ProtoNodeIdentifier, create_if_nonexistent: bool) -> Option { + let output_layer = self.get_output_layer()?; + if !self.network_interface.layer_chain_hosts_node(&output_layer.to_node(), &[], &reference) { + return None; + } + + self.existing_proto_node_id(reference, create_if_nonexistent) + } + /// Gets the node id of a document node with a specific reference that is upstream from the layer node, and optionally creates it if it does not exist. fn existing_node_id(&mut self, reference: &DefinitionIdentifier, create_if_nonexistent: bool) -> Option { // Start from the layer node or export @@ -433,17 +407,20 @@ impl<'a> ModifyInputsContext<'a> { return None; }; - // If inserting a 'Path' node, insert a 'Flatten Path' node if the type is `Graphic`. + // Without a secondary input there is no chain to hold the node, so inserting it would strand it at the graph origin + self.network_interface.input_from_connector(&InputConnector::layer_secondary_input(output_layer.to_node()), &[])?; + + // If inserting a 'Path' node, insert a 'Combine Paths' node if the type is `Graphic`. // TODO: Allow the 'Path' node to operate on `List` data by utilizing the reference (index or ID?) for each item. if node_definition.identifier == "Path" { - let layer_input_type = self.network_interface.input_type(&InputConnector::node(output_layer.to_node(), 1), &[]); - if layer_input_type.compiled_nested_type() == Some(&concrete!(List)) { - let Some(flatten_path_definition) = resolve_proto_node_type(graphene_std::vector_nodes::flatten_path::IDENTIFIER) else { - log::error!("Flatten Path does not exist in ModifyInputsContext::existing_node_id"); + let layer_input_type = self.network_interface.input_type(&InputConnector::layer_secondary_input(output_layer.to_node()), &[]); + if layer_input_type.compiled_element_name().as_deref() == Some("Graphic") { + let Some(combine_paths_definition) = resolve_proto_node_type(graphene_std::vector_nodes::combine_paths::IDENTIFIER) else { + log::error!("Combine Paths does not exist in ModifyInputsContext::existing_node_id"); return None; }; let node_id = NodeId::new(); - self.network_interface.insert_node(node_id, flatten_path_definition.default_node_template(), &[]); + self.network_interface.insert_node(node_id, combine_paths_definition.default_node_template(), &[]); self.network_interface.move_node_to_chain_start(&node_id, output_layer, &[], self.import); } } @@ -454,28 +431,35 @@ impl<'a> ModifyInputsContext<'a> { } pub fn fill_color_set(&mut self, color: Option) { - let Some(fill_node_id) = self.existing_proto_node_id(graphene_std::vector_nodes::fill::IDENTIFIER, true) else { + let existing_fill_node_id = self.existing_chain_hosted_node_id(graphene_std::vector_nodes::fill::IDENTIFIER, false); + let Some(fill_node_id) = existing_fill_node_id.or_else(|| self.existing_chain_hosted_node_id(graphene_std::vector_nodes::fill::IDENTIFIER, true)) else { return; }; - let input_connector = InputConnector::node(fill_node_id, graphene_std::vector::fill::FillInput::INDEX); - let backup_input_connector = InputConnector::node(fill_node_id, graphene_std::vector::fill::BackupColorInput::INDEX); + let input_connector = InputConnector::node(fill_node_id, graphene_std::vector::fill::PaintInput); + let backup_input_connector = InputConnector::node(fill_node_id, graphene_std::vector::fill::BackupColorInput); - self.set_input_with_refresh(backup_input_connector, NodeInput::value(TaggedValue::Color(color), false), true); - self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::Color(color), false), false); + // The backup remembers the last solid color, so the red-slash "none" choice leaves it untouched + if let Some(color) = color { + self.set_input_with_refresh(backup_input_connector, NodeInput::value(TaggedValue::Color(color), false), true); + } + let fill_value = color.map_or_else(TaggedValue::no_paint, TaggedValue::Color); + self.set_input_with_refresh(input_connector, NodeInput::value(fill_value, false), false); } - pub fn fill_gradient_set(&mut self, gradient: GradientStops, gradient_type: GradientType, spread_method: GradientSpreadMethod, transform: DAffine2) { - let Some(fill_node_id) = self.existing_proto_node_id(graphene_std::vector_nodes::fill::IDENTIFIER, true) else { + pub fn fill_gradient_set(&mut self, gradient: Gradient, gradient_form: GradientForm, settings: GradientSettings, transform: DAffine2) { + let existing_fill_node_id = self.existing_chain_hosted_node_id(graphene_std::vector_nodes::fill::IDENTIFIER, false); + let Some(fill_node_id) = existing_fill_node_id.or_else(|| self.existing_chain_hosted_node_id(graphene_std::vector_nodes::fill::IDENTIFIER, true)) else { return; }; - let backup_input_connector = InputConnector::node(fill_node_id, graphene_std::vector::fill::BackupGradientInput::INDEX); + let backup_input_connector = InputConnector::node(fill_node_id, graphene_std::vector::fill::BackupGradientInput); - self.set_input_with_refresh(backup_input_connector, NodeInput::value(TaggedValue::Gradient(gradient.clone()), false), true); + let ramp = GradientRamp::from(gradient).with_settings(settings); + self.set_input_with_refresh(backup_input_connector, NodeInput::value(TaggedValue::GradientRamp(ramp.clone()), false), true); // Skip the rerender on all but the last input so the whole update triggers a single graph run self.set_input_with_refresh( - InputConnector::node(fill_node_id, graphene_std::vector::fill::FillInput::INDEX), - NodeInput::value(TaggedValue::Gradient(gradient), false), + InputConnector::node(fill_node_id, graphene_std::vector::fill::PaintInput), + NodeInput::value(TaggedValue::GradientRamp(ramp), false), true, ); @@ -485,49 +469,48 @@ impl<'a> ModifyInputsContext<'a> { .document_network() .nodes .get(&fill_node_id) - .and_then(|node| node.inputs.get(graphene_std::vector::fill::TransformInput::INDEX)) + .and_then(|node| node.input(graphene_std::vector::fill::TransformInput)) .is_some_and(|input| input.as_value().is_some()); if transform_is_value { self.set_input_with_refresh( - InputConnector::node(fill_node_id, graphene_std::vector::fill::TransformInput::INDEX), - NodeInput::value(TaggedValue::OptionalDAffine2(Some(transform)), false), + InputConnector::node(fill_node_id, graphene_std::vector::fill::HasTransformInput), + NodeInput::value(TaggedValue::Bool(true), false), + true, + ); + self.set_input_with_refresh( + InputConnector::node(fill_node_id, graphene_std::vector::fill::TransformInput), + NodeInput::value(TaggedValue::DAffine2(transform), false), true, ); } self.set_input_with_refresh( - InputConnector::node(fill_node_id, graphene_std::vector::fill::GradientTypeInput::INDEX), - NodeInput::value(TaggedValue::GradientType(gradient_type), false), - true, - ); - - self.set_input_with_refresh( - InputConnector::node(fill_node_id, graphene_std::vector::fill::SpreadMethodInput::INDEX), - NodeInput::value(TaggedValue::GradientSpreadMethod(spread_method), false), + InputConnector::node(fill_node_id, graphene_std::vector::fill::GradientFormInput), + NodeInput::value(TaggedValue::GradientForm(gradient_form), false), false, ); } pub fn blend_mode_set(&mut self, blend_mode: BlendMode) { - let Some(blend_node_id) = self.existing_proto_node_id(graphene_std::blending_nodes::blend_mode::IDENTIFIER, true) else { + let Some(blend_node_id) = self.existing_chain_hosted_node_id(graphene_std::blending_nodes::blend_mode::IDENTIFIER, true) else { return; }; - let input_connector = InputConnector::node(blend_node_id, graphene_std::blending_nodes::blend_mode::BlendModeInput::INDEX); + let input_connector = InputConnector::node(blend_node_id, graphene_std::blending_nodes::blend_mode::BlendModeInput); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::BlendMode(blend_mode), false), false); } pub fn opacity_set(&mut self, opacity: f64) { - let Some(opacity_node_id) = self.existing_proto_node_id(graphene_std::blending_nodes::opacity::IDENTIFIER, true) else { + let Some(opacity_node_id) = self.existing_chain_hosted_node_id(graphene_std::blending_nodes::opacity::IDENTIFIER, true) else { return; }; // Enable the `has_opacity` checkbox so the value is applied self.set_input_with_refresh( - InputConnector::node(opacity_node_id, graphene_std::blending_nodes::opacity::HasOpacityInput::INDEX), + InputConnector::node(opacity_node_id, graphene_std::blending_nodes::opacity::HasOpacityInput), NodeInput::value(TaggedValue::Bool(true), false), false, ); self.set_input_with_refresh( - InputConnector::node(opacity_node_id, graphene_std::blending_nodes::opacity::OpacityInput::INDEX), + InputConnector::node(opacity_node_id, graphene_std::blending_nodes::opacity::OpacityInput), NodeInput::value(TaggedValue::F64(opacity * 100.), false), false, ); @@ -536,47 +519,78 @@ impl<'a> ModifyInputsContext<'a> { pub fn opacity_fill_set(&mut self, fill: f64) { // Reuse an existing Opacity node to avoid a redundant chain walk on slider drags let identifier = graphene_std::blending_nodes::opacity::IDENTIFIER; - let existing = self.existing_proto_node_id(identifier.clone(), false); + let existing = self.existing_chain_hosted_node_id(identifier.clone(), false); let existed = existing.is_some(); - let Some(opacity_node_id) = existing.or_else(|| self.existing_proto_node_id(identifier, true)) else { + let Some(opacity_node_id) = existing.or_else(|| self.existing_chain_hosted_node_id(identifier, true)) else { return; }; // Freshly-created node defaults to opacity enabled; disable it so the fill slider works independently if !existed { self.set_input_with_refresh( - InputConnector::node(opacity_node_id, graphene_std::blending_nodes::opacity::HasOpacityInput::INDEX), + InputConnector::node(opacity_node_id, graphene_std::blending_nodes::opacity::HasOpacityInput), NodeInput::value(TaggedValue::Bool(false), false), false, ); } // Enable the `has_fill` checkbox so the value is applied self.set_input_with_refresh( - InputConnector::node(opacity_node_id, graphene_std::blending_nodes::opacity::HasFillInput::INDEX), + InputConnector::node(opacity_node_id, graphene_std::blending_nodes::opacity::HasFillInput), NodeInput::value(TaggedValue::Bool(true), false), false, ); self.set_input_with_refresh( - InputConnector::node(opacity_node_id, graphene_std::blending_nodes::opacity::FillInput::INDEX), + InputConnector::node(opacity_node_id, graphene_std::blending_nodes::opacity::FillInput), NodeInput::value(TaggedValue::F64(fill * 100.), false), false, ); } + /// Update the chain's 'Color Value' node, or start a chain with one on an empty layer, painting the layer's whole expanse. + pub fn color_value_set(&mut self, color: Color) { + let Some(output_layer) = self.get_output_layer() else { return }; + + let target_input = gradient_chain_target_input(output_layer, self.network_interface); + if let Some(node_id) = self.existing_proto_node_id_at(&target_input, graphene_std::math_nodes::color_value::IDENTIFIER, false) { + let input_connector = InputConnector::node(node_id, graphene_std::math_nodes::color_value::ColorInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::Color(color), false), false); + return; + } + + // The 'Color Value' node discards its primary input, so only a blank 'Merge' layer may start a chain with one, + // which any whole-expanse paint the other tool left behind is cleared off to become + let Some(paint_chain) = replaceable_paint_chain(output_layer, self.network_interface) else { + return; + }; + self.clear_paint_chain(&paint_chain); + + let color_value_id = self.insert_color_value(color, output_layer, paint_chain.attachment_input); + let input_connector = InputConnector::node(color_value_id, graphene_std::math_nodes::color_value::ColorInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::Color(color), false), false); + } + /// Write the gradient stops to the 'Gradient Value' node feeding the layer. - pub fn gradient_stops_set(&mut self, stops: GradientStops) { + pub fn gradient_stops_set(&mut self, stops: Gradient) { let Some(output_layer) = self.get_output_layer() else { return }; let gradient_value_id = match get_upstream_gradient_value_node_id(output_layer, self.network_interface) { Some(id) => id, None => { let target = gradient_chain_target_input(output_layer, self.network_interface); - let starts_layer_chain = target == InputConnector::node(output_layer.to_node(), 1); + let starts_layer_chain = target == InputConnector::layer_secondary_input(output_layer.to_node()); - // The Gradient Value node discards its primary input, so starting a chain ahead of existing layer content would drop that content; refuse instead - if starts_layer_chain && self.network_interface.upstream_output_connector(&target, &[]).is_some() { - log::error!("Refusing to start a gradient chain ahead of existing layer content"); - return; - } + // The 'Gradient Value' node discards its primary input, so only a blank 'Merge' layer may start a chain + // with one, which any whole-expanse paint the other tool left behind is cleared off to become + let paint_chain = if starts_layer_chain { + let Some(paint_chain) = replaceable_paint_chain(output_layer, self.network_interface) else { + log::error!("Refusing to start a gradient chain on anything but a blank 'Merge' layer"); + return; + }; + self.clear_paint_chain(&paint_chain); + + Some(paint_chain) + } else { + None + }; let Some(node_definition) = resolve_proto_node_type(graphene_std::math_nodes::gradient_value::IDENTIFIER) else { return; @@ -584,9 +598,9 @@ impl<'a> ModifyInputsContext<'a> { let node_id = NodeId::new(); self.network_interface.insert_node(node_id, node_definition.default_node_template(), &[]); - if starts_layer_chain { + if let Some(paint_chain) = paint_chain { // No Fill node: the new node starts the layer's chain - self.network_interface.move_node_to_chain_start(&node_id, output_layer, &[], self.import); + self.start_paint_chain(&node_id, output_layer, paint_chain.attachment_input); } else { // Feeding a Fill node's paint input: wire it up and place it one chain-width left and a step below the Fill self.network_interface.set_input(&target, NodeInput::node(node_id, 0), &[]); @@ -603,8 +617,65 @@ impl<'a> ModifyInputsContext<'a> { } }; - let input_connector = InputConnector::node(gradient_value_id, graphene_std::math_nodes::gradient_value::GradientInput::INDEX); - self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::Gradient(stops), false), false); + // Only the stops are being replaced, so the ramp's other settings stay as the value node already holds them + let ramp = GradientRamp { + stops: (&stops).into(), + ..self.gradient_value_ramp(gradient_value_id).unwrap_or_default() + }; + + let input_connector = InputConnector::node(gradient_value_id, graphene_std::math_nodes::gradient_value::GradientInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::GradientRamp(ramp), false), false); + } + + /// Update the last 'Gradient Positions' node in the chain when one exists, so on-canvas stop drags stay live even + /// though that node would otherwise override the stops value's own placement. Never inserts one: the stops value + /// carries placement itself, and these setter nodes are user-authored procedural overrides. A wired input is + /// procedural authorship too, so it is likewise left untouched. + pub fn gradient_positions_set(&mut self, positions: Vec) { + let Some(output_layer) = self.get_output_layer() else { return }; + + let target_input = gradient_chain_target_input(output_layer, self.network_interface); + let identifier = graphene_std::math_nodes::gradient_positions::IDENTIFIER; + let Some(node_id) = self.existing_proto_node_id_at(&target_input, identifier, false) else { + return; + }; + + let current_input = self + .network_interface + .document_network() + .nodes + .get(&node_id) + .and_then(|node| node.input(graphene_std::math_nodes::gradient_positions::PositionsInput)); + if !current_input.is_some_and(|input| input.as_value().is_some()) { + return; + } + + let input_connector = InputConnector::node(node_id, graphene_std::math_nodes::gradient_positions::PositionsInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::F64Array(positions), false), false); + } + + /// The 'Gradient Midpoints' counterpart of [`Self::gradient_positions_set`], likewise update-only. + pub fn gradient_midpoints_set(&mut self, midpoints: Vec) { + let Some(output_layer) = self.get_output_layer() else { return }; + + let target_input = gradient_chain_target_input(output_layer, self.network_interface); + let identifier = graphene_std::math_nodes::gradient_midpoints::IDENTIFIER; + let Some(node_id) = self.existing_proto_node_id_at(&target_input, identifier, false) else { + return; + }; + + let current_input = self + .network_interface + .document_network() + .nodes + .get(&node_id) + .and_then(|node| node.input(graphene_std::math_nodes::gradient_midpoints::MidpointsInput)); + if !current_input.is_some_and(|input| input.as_value().is_some()) { + return; + } + + let input_connector = InputConnector::node(node_id, graphene_std::math_nodes::gradient_midpoints::MidpointsInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::F64Array(midpoints), false), false); } /// Update the transform to map the unit gradient ((0,0), (1, 0)) to the geometry's local space. @@ -669,69 +740,131 @@ impl<'a> ModifyInputsContext<'a> { self.responses.add(NodeGraphMessage::RunDocumentGraph); } - /// Write the gradient type to the last 'Gradient Type' node in the chain, inserting one only when the value differs + /// Write the Gradient Form to the last 'Gradient Form' node in the chain, inserting one only when the value differs /// from the default (`Linear`). - pub fn gradient_type_set(&mut self, gradient_type: GradientType) { + pub fn gradient_form_set(&mut self, gradient_form: GradientForm) { let Some(output_layer) = self.get_output_layer() else { return }; let target_input = gradient_chain_target_input(output_layer, self.network_interface); - let identifier = graphene_std::math_nodes::gradient_type::IDENTIFIER; - let create_if_nonexistent = gradient_type != GradientType::default(); + let identifier = graphene_std::math_nodes::gradient_form::IDENTIFIER; + let create_if_nonexistent = gradient_form != GradientForm::default(); let Some(node_id) = self.existing_proto_node_id_at(&target_input, identifier, create_if_nonexistent) else { return; }; - let input_connector = InputConnector::node(node_id, graphene_std::math_nodes::gradient_type::GradientTypeInput::INDEX); - self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::GradientType(gradient_type), false), false); + let input_connector = InputConnector::node(node_id, graphene_std::math_nodes::gradient_form::GradientFormInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::GradientForm(gradient_form), false), false); } - /// Write the spread method to the last 'Spread Method' node in the chain, inserting one only when the value differs - /// from the default (`Pad`). - pub fn gradient_spread_method_set(&mut self, spread_method: GradientSpreadMethod) { + /// Set the spread on the chain's gradient value, which is where the ramp carries it. + pub fn gradient_spread_set(&mut self, gradient_spread: GradientSpread) { let Some(output_layer) = self.get_output_layer() else { return }; - - let target_input = gradient_chain_target_input(output_layer, self.network_interface); - let identifier = graphene_std::math_nodes::spread_method::IDENTIFIER; - let create_if_nonexistent = spread_method != GradientSpreadMethod::default(); - let Some(node_id) = self.existing_proto_node_id_at(&target_input, identifier, create_if_nonexistent) else { + let Some(gradient_value_id) = get_upstream_gradient_value_node_id(output_layer, self.network_interface) else { return; }; + let Some(ramp) = self.gradient_value_ramp(gradient_value_id) else { return }; - let input_connector = InputConnector::node(node_id, graphene_std::math_nodes::spread_method::SpreadMethodInput::INDEX); - self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::GradientSpreadMethod(spread_method), false), false); + let ramp = GradientRamp { gradient_spread, ..ramp }; + let input_connector = InputConnector::node(gradient_value_id, graphene_std::math_nodes::gradient_value::GradientInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::GradientRamp(ramp), false), false); + } + + /// The ramp currently held by a 'Gradient Value' node. + fn gradient_value_ramp(&self, gradient_value_id: NodeId) -> Option { + let node = self.network_interface.document_network().nodes.get(&gradient_value_id)?; + let TaggedValue::GradientRamp(ramp) = node.input(graphene_std::math_nodes::gradient_value::GradientInput)?.as_value()? else { + return None; + }; + Some(ramp.clone()) + } + + /// Set the space on the chain's gradient value, which is where the ramp carries it. Never touches a + /// 'Gradient Space' node: that one is a user-authored procedural override, not something the tools manage. + pub fn gradient_space_set(&mut self, gradient_space: GradientSpace) { + let Some(output_layer) = self.get_output_layer() else { return }; + let Some(gradient_value_id) = get_upstream_gradient_value_node_id(output_layer, self.network_interface) else { + return; + }; + let Some(ramp) = self.gradient_value_ramp(gradient_value_id) else { return }; + + let ramp = GradientRamp { gradient_space, ..ramp }; + let input_connector = InputConnector::node(gradient_value_id, graphene_std::math_nodes::gradient_value::GradientInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::GradientRamp(ramp), false), false); + } + + /// Set the cyclic wrap flag on the chain's gradient value, which is where the ramp carries it. This holds the existing + /// stops in place by reading their positions under the old flag, so batch it before any stops write rather than after one, + /// or it would reinterpret incoming stops already authored under the new flag. + pub fn gradient_cyclic_set(&mut self, gradient_cyclic: bool) { + let Some(output_layer) = self.get_output_layer() else { return }; + let Some(gradient_value_id) = get_upstream_gradient_value_node_id(output_layer, self.network_interface) else { + return; + }; + let Some(ramp) = self.gradient_value_ramp(gradient_value_id) else { return }; + + let ramp = ramp.with_cyclic(gradient_cyclic); + let input_connector = InputConnector::node(gradient_value_id, graphene_std::math_nodes::gradient_value::GradientInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::GradientRamp(ramp), false), false); + } + + /// Set the interpolation on the chain's gradient value, which is where the ramp carries it. + pub fn gradient_interpolation_set(&mut self, gradient_interpolation: GradientInterpolation) { + let Some(output_layer) = self.get_output_layer() else { return }; + let Some(gradient_value_id) = get_upstream_gradient_value_node_id(output_layer, self.network_interface) else { + return; + }; + let Some(ramp) = self.gradient_value_ramp(gradient_value_id) else { return }; + + let ramp = GradientRamp { gradient_interpolation, ..ramp }; + let input_connector = InputConnector::node(gradient_value_id, graphene_std::math_nodes::gradient_value::GradientInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::GradientRamp(ramp), false), false); + } + + /// Set the hue direction on the chain's gradient value, which is where the ramp carries it. + pub fn gradient_hue_direction_set(&mut self, gradient_hue_direction: GradientHueDirection) { + let Some(output_layer) = self.get_output_layer() else { return }; + let Some(gradient_value_id) = get_upstream_gradient_value_node_id(output_layer, self.network_interface) else { + return; + }; + let Some(ramp) = self.gradient_value_ramp(gradient_value_id) else { return }; + + let ramp = GradientRamp { gradient_hue_direction, ..ramp }; + let input_connector = InputConnector::node(gradient_value_id, graphene_std::math_nodes::gradient_value::GradientInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::GradientRamp(ramp), false), false); } pub fn clip_mode_toggle(&mut self, clip_mode: Option) { let clip = !clip_mode.unwrap_or(false); - let Some(clip_node_id) = self.existing_proto_node_id(graphene_std::blending_nodes::clipping_mask::IDENTIFIER, true) else { + let Some(clip_node_id) = self.existing_chain_hosted_node_id(graphene_std::blending_nodes::clipping_mask::IDENTIFIER, true) else { return; }; - let input_connector = InputConnector::node(clip_node_id, graphene_std::blending_nodes::clipping_mask::ClipInput::INDEX); + let input_connector = InputConnector::node(clip_node_id, graphene_std::blending_nodes::clipping_mask::ClipInput); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::Bool(clip), false), false); } pub fn stroke_set(&mut self, color: Option, stroke: Stroke) { - let Some(stroke_node_id) = self.existing_proto_node_id(graphene_std::vector::stroke::IDENTIFIER, true) else { + let Some(stroke_node_id) = self.existing_chain_hosted_node_id(graphene_std::vector::stroke::IDENTIFIER, true) else { return; }; - let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::PaintInput::INDEX); - self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::Color(color), false), true); - let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::WeightInput::INDEX); + let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::PaintInput); + self.set_input_with_refresh(input_connector, NodeInput::value(color.map_or_else(TaggedValue::no_paint, TaggedValue::Color), false), true); + let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::WeightInput); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::F64(stroke.weight), false), true); - let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::AlignInput::INDEX); + let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::AlignInput); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::StrokeAlign(stroke.align), false), false); - let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::CapInput::INDEX); + let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::CapInput); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::StrokeCap(stroke.cap), false), true); - let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::JoinInput::INDEX); + let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::JoinInput); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::StrokeJoin(stroke.join), false), true); - let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::MiterLimitInput::INDEX); + let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::MiterLimitInput); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::F64(stroke.join_miter_limit), false), false); - let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::PaintOrderInput::INDEX); + // Our stroke node keeps a paint order input rather than encoding the order by Fill/Stroke node adjacency + let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::PaintOrderInput); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::PaintOrder(stroke.paint_order), false), false); - let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::DashLengthsInput::INDEX); - self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::F64Array(stroke.dash_lengths), false), true); - let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::DashOffsetInput::INDEX); + let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::DashPatternInput); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::DashPattern(stroke.dash_lengths), false), true); + let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::DashOffsetInput); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::F64(stroke.dash_offset), false), true); } @@ -828,13 +961,6 @@ impl<'a> ModifyInputsContext<'a> { self.responses.add(NodeGraphMessage::RunDocumentGraph); } - pub fn brush_modify(&mut self, strokes: Vec) { - let Some(brush_node_id) = self.existing_proto_node_id(graphene_std::brush::brush::brush::IDENTIFIER, true) else { - return; - }; - self.set_input_with_refresh(InputConnector::node(brush_node_id, 1), NodeInput::value(TaggedValue::BrushStrokes(strokes), false), false); - } - pub fn resize_artboard(&mut self, location: DVec2, dimensions: DVec2) { let Some(artboard_node_id) = self.existing_network_node_id("Artboard", true) else { return; @@ -851,8 +977,16 @@ impl<'a> ModifyInputsContext<'a> { dimensions.y = -dimensions.y; location.y -= dimensions.y; } - self.set_input_with_refresh(InputConnector::node(artboard_node_id, 2), NodeInput::value(TaggedValue::DVec2(location), false), false); - self.set_input_with_refresh(InputConnector::node(artboard_node_id, 3), NodeInput::value(TaggedValue::DVec2(dimensions), false), false); + self.set_input_with_refresh( + InputConnector::node_at_index(artboard_node_id, ARTBOARD_LOCATION_INPUT_INDEX), + NodeInput::value(TaggedValue::DVec2(location), false), + false, + ); + self.set_input_with_refresh( + InputConnector::node_at_index(artboard_node_id, ARTBOARD_DIMENSIONS_INPUT_INDEX), + NodeInput::value(TaggedValue::DVec2(dimensions), false), + false, + ); } /// Set the input, refresh the Properties panel, and run the document graph if skip_rerender is false @@ -864,3 +998,16 @@ impl<'a> ModifyInputsContext<'a> { } } } + +/// Sets the Stroke node's paint order input, which decides whether the stroke paints above or below the fill. +/// Returns whether the graph changed. +pub fn set_stroke_paint_order(network_interface: &mut NodeNetworkInterface, network_path: &[NodeId], stroke_node_id: NodeId, paint_order: PaintOrder) -> bool { + let connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::PaintOrderInput); + if let Some(NodeInput::Value { tagged_value, .. }) = network_interface.input_from_connector(&connector, network_path) + && **tagged_value == TaggedValue::PaintOrder(paint_order) + { + return false; + } + network_interface.set_input(&connector, NodeInput::value(TaggedValue::PaintOrder(paint_order), false), network_path); + true +} diff --git a/editor/src/messages/portfolio/document/navigation/navigation_message.rs b/editor/src/messages/portfolio/document/navigation/navigation_message.rs index a55f8dbef4..a9e7179a0f 100644 --- a/editor/src/messages/portfolio/document/navigation/navigation_message.rs +++ b/editor/src/messages/portfolio/document/navigation/navigation_message.rs @@ -1,4 +1,4 @@ -use crate::messages::input_mapper::utility_types::input_keyboard::Key; +use crate::messages::input_mapper::utility_types::keyboard::Key; use crate::messages::prelude::*; use glam::DVec2; diff --git a/editor/src/messages/portfolio/document/navigation/navigation_message_handler.rs b/editor/src/messages/portfolio/document/navigation/navigation_message_handler.rs index a319cc0e57..5f56cde2ac 100644 --- a/editor/src/messages/portfolio/document/navigation/navigation_message_handler.rs +++ b/editor/src/messages/portfolio/document/navigation/navigation_message_handler.rs @@ -4,8 +4,8 @@ use crate::consts::{ VIEWPORT_ZOOM_TO_FIT_PADDING_SCALE_FACTOR, }; use crate::messages::frontend::utility_types::MouseCursorIcon; -use crate::messages::input_mapper::utility_types::input_keyboard::{Key, MouseMotion}; -use crate::messages::input_mapper::utility_types::input_mouse::ViewportPosition; +use crate::messages::input_mapper::utility_types::keyboard::{Key, MouseMotion}; +use crate::messages::input_mapper::utility_types::pointer::ViewportPosition; use crate::messages::portfolio::document::navigation::utility_types::NavigationOperation; use crate::messages::portfolio::document::utility_types::misc::PTZ; use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface; diff --git a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs index b8391b8f4f..c81e06a58f 100644 --- a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs +++ b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs @@ -2,11 +2,10 @@ mod document_node_derive; use super::node_properties::choice::enum_choice; use super::node_properties::{self, ParameterWidgetsInfo}; -use super::utility_types::FrontendNodeType; +use super::utility_types::{FrontendNodeType, InputTypeConstraint}; use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::portfolio::document::utility_types::network_interface::{ - DocumentNodeMetadata, DocumentNodePersistentMetadata, InputMetadata, NodeNetworkInterface, NodeNetworkMetadata, NodeNetworkPersistentMetadata, NodeTemplate, NodeTypePersistentMetadata, - Vec2InputSettings, WidgetOverride, + InputMetadata, NodeNetworkInterface, NodeNetworkTemplate, NodeTemplate, NodeTemplateImplementation, NodeTypePersistentMetadata, Vec2InputSettings, WidgetOverride, }; use crate::messages::prelude::{FontsMessage, FontsMessageHandler, Message, ResourceMessageHandler, Responses}; use crate::node_graph_executor::NodeGraphExecutor; @@ -14,7 +13,7 @@ use glam::DVec2; use graph_craft::ProtoNodeIdentifier; use graph_craft::document::value::*; use graph_craft::document::*; -use graph_craft::{concrete, descriptor}; +use graph_craft::concrete; use graphene_std::extract_xy::XY; use graphene_std::list::List; use graphene_std::raster::{CellularDistanceFunction, CellularReturnType, Color, DomainWarpType, FractalType, NoiseType, RedGreenBlueAlpha}; @@ -54,6 +53,13 @@ impl NodePropertiesContext<'_> { } } +/// Input position of the location parameter on the "Artboard" layer template, which follows the two layer-shaped inputs (stack and content) and maps through to the inner Create Artboard proto node. +pub const ARTBOARD_LOCATION_INPUT_INDEX: usize = 2; +/// Input position of the dimensions parameter on the "Artboard" layer template, which follows the two layer-shaped inputs (stack and content) and maps through to the inner Create Artboard proto node. +pub const ARTBOARD_DIMENSIONS_INPUT_INDEX: usize = 3; +/// Input position of the control path parameter on the "Blend" network node template. +pub const BLEND_PATH_INPUT_INDEX: usize = 4; + /// The key used to access definitions for a network node or proto node. /// For proto nodes, this is their [`ProtoNodeIdentifier`]. /// For network nodes, it doesn't necessarily have to be the same as the network's display name, but it often is. @@ -104,7 +110,7 @@ pub struct DocumentNodeDefinition { /// Used to create the [`DefinitionIdentifier::Network`] identifier. pub identifier: &'static str, - /// All data required to construct a [`DocumentNode`] and [`DocumentNodeMetadata`] + /// The default [`NodeTemplate`] this definition instantiates. pub node_template: NodeTemplate, /// Definition specific data. In order for the editor to access this data, the reference will be used. @@ -133,14 +139,8 @@ fn document_node_definitions() -> HashMap HashMap), true), NodeInput::type_default(descriptor!(List), true)], - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![("Base", "TODO").into(), ("Content", "TODO").into()], - output_names: vec!["Out".to_string()], - node_type_metadata: NodeTypePersistentMetadata::layer(IVec2::new(0, 0)), - network_metadata: Some(NodeNetworkMetadata { - persistent_metadata: NodeNetworkPersistentMetadata { - node_metadata: [ - // 0: to_graphic - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, -3)), - ..Default::default() - }, - ..Default::default() - }, - // 1: wrap_graphic - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, -1)), - ..Default::default() - }, - ..Default::default() - }, - // 2: path_of_subgraph - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, 1)), - ..Default::default() - }, - ..Default::default() - }, - // 3: stamp_layer_path - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-14, -1)), - ..Default::default() - }, - ..Default::default() - }, - // 4: monitor - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-7, -1)), - ..Default::default() - }, - ..Default::default() - }, - // 5: extend - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, -3)), - ..Default::default() - }, - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), + implementation: NodeTemplateImplementation::Network(NodeNetworkTemplate { + exports: vec![NodeInput::node(NodeId(5), 0)], + nodes: [ + // Primary (bottom) input type coercion + NodeTemplate { + inputs: vec![NodeInput::import(generic!(T), 0)], + implementation: NodeTemplateImplementation::ProtoNode(graphic::to_graphic::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, -3)), ..Default::default() }, - ..Default::default() - }), + // Collection of the content into the layer's group; the wrap keeps the content level's element type for the legacy boundary + NodeTemplate { + inputs: vec![NodeInput::import(generic!(T), 1)], + implementation: NodeTemplateImplementation::ProtoNode(graphic::wrap_graphic::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, -1)), + ..Default::default() + }, + // Derive the parent layer's NodeId from the document path + NodeTemplate { + inputs: vec![NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath)], + implementation: NodeTemplateImplementation::ProtoNode(graphic::path_of_subgraph::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, 1)), + ..Default::default() + }, + // Stamp each item of the content with the parent layer's NodeId via the `editor:layer_path` attribute, + // so editor tools (e.g. selection, click target routing) can trace data back to its owning layer. + NodeTemplate { + inputs: vec![NodeInput::node(NodeId(1), 0), NodeInput::node(NodeId(2), 0)], + implementation: NodeTemplateImplementation::ProtoNode(graphic::stamp_layer_path::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-14, -1)), + ..Default::default() + }, + // The monitor node is used to display a thumbnail in the UI + NodeTemplate { + inputs: vec![NodeInput::node(NodeId(3), 0)], + implementation: NodeTemplateImplementation::ProtoNode(memo::monitor::IDENTIFIER), + skip_deduplication: true, + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-7, -1)), + ..Default::default() + }, + NodeTemplate { + call_argument: generic!(T), + inputs: vec![NodeInput::node(NodeId(0), 0), NodeInput::node(NodeId(4), 0)], + implementation: NodeTemplateImplementation::ProtoNode(graphic::extend::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, -3)), + ..Default::default() + }, + ] + .into_iter() + .enumerate() + .map(|(id, node)| (NodeId(id as u64), node)) + .collect(), ..Default::default() - }, + }), + inputs: vec![NodeInput::type_default(concrete!(List), true), NodeInput::type_default(concrete!(List), true)], + input_metadata: vec![("Base", "TODO").into(), ("Content", "TODO").into()], + output_names: vec!["Out".to_string()], + node_type_metadata: NodeTypePersistentMetadata::layer(IVec2::new(0, 0)), + ..Default::default() }, description: Cow::Borrowed("Merges the provided content as a new item in the layer's compositing stack."), properties: None, @@ -276,198 +216,125 @@ fn document_node_definitions() -> HashMap))), 0), - NodeInput::node(NodeId(3), 0), - ], - implementation: DocumentNodeImplementation::ProtoNode(graphic::extend::IDENTIFIER), - ..Default::default() - }, - // Content coercion into a graphic level, evaluated within the artboard's footprint - DocumentNode { - inputs: vec![NodeInput::import(generic!(T), 1)], - implementation: DocumentNodeImplementation::ProtoNode(graphic::to_graphic::IDENTIFIER), - ..Default::default() - }, - DocumentNode { - inputs: vec![NodeInput::node(NodeId(5), 0), NodeInput::import(concrete!(TaggedValue), 2)], - implementation: DocumentNodeImplementation::ProtoNode(artboard::translate_footprint::IDENTIFIER), - ..Default::default() - }, - // Lifts the artboard element onto a one-lane level so it concatenates with the base stack - DocumentNode { - inputs: vec![ - NodeInput::node(NodeId(2), 0), - NodeInput::value(TaggedValue::U32(1), false), - NodeInput::value(TaggedValue::Bool(false), false), - ], - implementation: DocumentNodeImplementation::ProtoNode(repeat_nodes::repeat::IDENTIFIER), - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), - ..Default::default() - }), - inputs: vec![ - NodeInput::type_default(descriptor!(List), true), - NodeInput::type_default(descriptor!(List), true), - NodeInput::value(TaggedValue::DVec2(DVec2::ZERO), false), - NodeInput::value(TaggedValue::DVec2(DVec2::new(1920., 1080.)), false), - NodeInput::value(TaggedValue::Color(Some(Color::WHITE)), false), - NodeInput::value(TaggedValue::Bool(true), false), - ], - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![ - ("Base", "TODO").into(), - InputMetadata::with_name_description_override("Content", "TODO", WidgetOverride::Hidden), - InputMetadata::with_name_description_override( - "Location", - "TODO", - WidgetOverride::Vec2(Vec2InputSettings { - x: "X".to_string(), - y: "Y".to_string(), - unit: " px".to_string(), - is_integer: true, - ..Default::default() - }), - ), - InputMetadata::with_name_description_override( - "Dimensions", - "TODO", - WidgetOverride::Vec2(Vec2InputSettings { - x: "W".to_string(), - y: "H".to_string(), - unit: " px".to_string(), - is_integer: true, - ..Default::default() - }), - ), - InputMetadata::with_name_description_override("Background", "TODO", WidgetOverride::Custom("artboard_background".to_string())), - ("Clip", "TODO").into(), - ], - output_names: vec!["Out".to_string()], - node_type_metadata: NodeTypePersistentMetadata::layer(IVec2::new(0, 0)), - network_metadata: Some(NodeNetworkMetadata { - persistent_metadata: NodeNetworkPersistentMetadata { - node_metadata: [ - // 0: create_artboard - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, -3)), - ..Default::default() - }, - ..Default::default() - }, - // 1: path_of_subgraph - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, 3)), - ..Default::default() - }, - ..Default::default() - }, - // 2: stamp_layer_path - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-14, -3)), - ..Default::default() - }, - ..Default::default() - }, - // 3: monitor - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-7, -3)), - ..Default::default() - }, - ..Default::default() - }, - // 4: extend - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, -4)), - ..Default::default() - }, - ..Default::default() - }, - // 5: to_graphic - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-35, -3)), - ..Default::default() - }, - ..Default::default() - }, - // 6: translate_footprint - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-28, -3)), - ..Default::default() - }, - ..Default::default() - }, - // 7: repeat (the one-lane lift) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-10, -3)), - ..Default::default() - }, - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), + implementation: NodeTemplateImplementation::Network(NodeNetworkTemplate { + exports: vec![NodeInput::node(NodeId(4), 0)], + nodes: [ + NodeTemplate { + call_argument: generic!(T), + implementation: NodeTemplateImplementation::ProtoNode(artboard::create_artboard::IDENTIFIER), + inputs: vec![ + NodeInput::node(NodeId(6), 0), + NodeInput::import(concrete!(TaggedValue), 2), + NodeInput::import(concrete!(TaggedValue), 3), + NodeInput::import(concrete!(TaggedValue), 4), + NodeInput::import(concrete!(TaggedValue), 5), + ], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, -3)), ..Default::default() }, - ..Default::default() - }), + // Derive the parent layer's NodeId from the document path + NodeTemplate { + inputs: vec![NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath)], + implementation: NodeTemplateImplementation::ProtoNode(graphic::path_of_subgraph::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, 3)), + ..Default::default() + }, + // Stamp each item of the content with the parent layer's NodeId via the `editor:layer_path` attribute, + // so editor tools (e.g. selection, click target routing) can trace data back to its owning layer. + NodeTemplate { + inputs: vec![NodeInput::node(NodeId(0), 0), NodeInput::node(NodeId(1), 0)], + implementation: NodeTemplateImplementation::ProtoNode(graphic::stamp_layer_path::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-14, -3)), + ..Default::default() + }, + // The monitor node is used to display a thumbnail in the UI. + NodeTemplate { + inputs: vec![NodeInput::node(NodeId(7), 0)], + implementation: NodeTemplateImplementation::ProtoNode(memo::monitor::IDENTIFIER), + call_argument: generic!(T), + skip_deduplication: true, + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-7, -3)), + ..Default::default() + }, + NodeTemplate { + inputs: vec![ + NodeInput::import(graphene_std::Type::Fn(Box::new(concrete!(Context)), Box::new(concrete!(List))), 0), + NodeInput::node(NodeId(3), 0), + ], + implementation: NodeTemplateImplementation::ProtoNode(graphic::extend::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, -4)), + ..Default::default() + }, + // Content coercion into a graphic level, evaluated within the artboard's footprint + NodeTemplate { + inputs: vec![NodeInput::import(generic!(T), 1)], + implementation: NodeTemplateImplementation::ProtoNode(graphic::to_graphic::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-35, -3)), + ..Default::default() + }, + NodeTemplate { + inputs: vec![NodeInput::node(NodeId(5), 0), NodeInput::import(concrete!(TaggedValue), 2)], + implementation: NodeTemplateImplementation::ProtoNode(artboard::translate_footprint::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-28, -3)), + ..Default::default() + }, + // Lifts the artboard element onto a one-lane level so it concatenates with the base stack + NodeTemplate { + inputs: vec![ + NodeInput::node(NodeId(2), 0), + NodeInput::value(TaggedValue::U32(1), false), + NodeInput::value(TaggedValue::Bool(false), false), + ], + implementation: NodeTemplateImplementation::ProtoNode(repeat_nodes::repeat::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-10, -3)), + ..Default::default() + }, + ] + .into_iter() + .enumerate() + .map(|(id, node)| (NodeId(id as u64), node)) + .collect(), ..Default::default() - }, + }), + inputs: vec![ + NodeInput::type_default(concrete!(List), true), + NodeInput::type_default(concrete!(List), true), + NodeInput::value(TaggedValue::DVec2(DVec2::ZERO), false), + NodeInput::value(TaggedValue::DVec2(DVec2::new(1920., 1080.)), false), + NodeInput::value(TaggedValue::Color(Color::WHITE), false), + NodeInput::value(TaggedValue::Bool(true), false), + ], + input_metadata: vec![ + ("Base", "TODO").into(), + InputMetadata::with_name_description_override("Content", "TODO", WidgetOverride::Hidden), + InputMetadata::with_name_description_override( + "Location", + "TODO", + WidgetOverride::Vec2(Vec2InputSettings { + x: "X".to_string(), + y: "Y".to_string(), + unit: " px".to_string(), + is_integer: true, + ..Default::default() + }), + ), + InputMetadata::with_name_description_override( + "Dimensions", + "TODO", + WidgetOverride::Vec2(Vec2InputSettings { + x: "W".to_string(), + y: "H".to_string(), + unit: " px".to_string(), + is_integer: true, + ..Default::default() + }), + ), + InputMetadata::with_name_description_override("Background", "TODO", WidgetOverride::Custom("artboard_background".to_string())), + ("Clip", "TODO").into(), + ], + output_names: vec!["Out".to_string()], + node_type_metadata: NodeTypePersistentMetadata::layer(IVec2::new(0, 0)), + ..Default::default() }, description: Cow::Borrowed("Creates a new Artboard which can be used as a working surface."), properties: None, @@ -476,322 +343,172 @@ fn document_node_definitions() -> HashMap), true), - NodeInput::value(TaggedValue::F64(10.), false), - NodeInput::value(TaggedValue::Bool(Default::default()), false), - NodeInput::value(TaggedValue::InterpolationDistribution(Default::default()), false), - NodeInput::type_default(descriptor!(List), false), - ], - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![ - ("Content", "TODO").into(), - ("Count", "TODO").into(), - ("Reverse", "TODO").into(), - ("Distribution", "TODO").into(), - ("Path", "TODO").into(), - ], - output_names: vec!["Out".to_string()], - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), - network_metadata: Some(NodeNetworkMetadata { - persistent_metadata: NodeNetworkPersistentMetadata { - node_metadata: [ - // 0: Separate Subpaths - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(2, 0)), - ..Default::default() - }, - ..Default::default() - }, - // 1: Count Elements - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(2, 2)), - ..Default::default() - }, - ..Default::default() - }, - // 2: Max (subpath count) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(9, 2)), - ..Default::default() - }, - ..Default::default() - }, - // 3: Floor (count) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(2, 13)), - ..Default::default() - }, - ..Default::default() - }, - // 4: Multiply (total items) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(16, 1)), - ..Default::default() - }, - ..Default::default() - }, - // 5: Subtract (count - 1) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(16, 14)), - ..Default::default() - }, - ..Default::default() - }, - // 6: Read Index - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(2, 7)), - ..Default::default() - }, - ..Default::default() - }, - // 7: Divide (index / count) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(16, 10)), - ..Default::default() - }, - ..Default::default() - }, - // 8: Floor (subpath index) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(23, 4)), - ..Default::default() - }, - ..Default::default() - }, - // 9: Modulo (local index) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(16, 7)), - ..Default::default() - }, - ..Default::default() - }, - // 10: Path Is Closed - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(30, 2)), - ..Default::default() - }, - ..Default::default() - }, - // 11: Switch (denominator) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(30, 12)), - ..Default::default() - }, - ..Default::default() - }, - // 12: Divide (within-subpath fraction) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(23, 7)), - ..Default::default() - }, - ..Default::default() - }, - // 13: Multiply (clamp fraction) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(30, 7)), - ..Default::default() - }, - ..Default::default() - }, - // 14: Add (progression) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(37, 4)), - ..Default::default() - }, - ..Default::default() - }, - // 15: Morph - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(44, 3)), - ..Default::default() - }, - ..Default::default() - }, - // 16: Repeat - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(51, 0)), - ..Default::default() - }, - ..Default::default() - }, - // 17: Max (clamp count) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(9, 13)), - ..Default::default() - }, - ..Default::default() - }, - // 18: Max (clamp open-path denominator) - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(23, 14)), - ..Default::default() - }, - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), + implementation: NodeTemplateImplementation::Network(NodeNetworkTemplate { + exports: vec![NodeInput::node(NodeId(16), 0)], + nodes: [ + // 0: Separate Subpaths (split path into individual subpaths) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(vector::separate_subpaths::IDENTIFIER), + inputs: vec![NodeInput::import(generic!(T), 4)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(2, 0)), ..Default::default() }, - ..Default::default() - }), + // 1: Count Elements (number of subpaths) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(vector::count_elements::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(0), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(2, 2)), + ..Default::default() + }, + // 2: Max (clamp subpath count to at least 1 for empty path case) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::max::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(1), 0), NodeInput::value(TaggedValue::F64(1.), false)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(9, 2)), + ..Default::default() + }, + // 3: Floor (integer count per subpath) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::floor::IDENTIFIER), + inputs: vec![NodeInput::import(concrete!(f64), 1)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(2, 13)), + ..Default::default() + }, + // 4: Multiply (total_instances = count Γ— subpath_count) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::multiply::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(17), 0), NodeInput::node(NodeId(2), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(16, 1)), + ..Default::default() + }, + // 5: Subtract (count - 1, open subpath denominator) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::subtract::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(17), 0), NodeInput::value(TaggedValue::F64(1.), false)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(16, 14)), + ..Default::default() + }, + // 6: Read Index (current repetition index) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(context::read_index::IDENTIFIER), + inputs: vec![NodeInput::value(TaggedValue::None, false), NodeInput::value(TaggedValue::U32(0), false)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(2, 7)), + ..Default::default() + }, + // 7: Divide (index / count) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::divide::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(6), 0), NodeInput::node(NodeId(17), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(16, 10)), + ..Default::default() + }, + // 8: Floor (floor(index / count) = subpath index) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::floor::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(7), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(23, 4)), + ..Default::default() + }, + // 9: Modulo (index % count = local index within subpath) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::modulo::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(6), 0), NodeInput::node(NodeId(17), 0), NodeInput::value(TaggedValue::Bool(true), false)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(16, 7)), + ..Default::default() + }, + // 10: Path Is Closed (check if current subpath is closed) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(vector::path_is_closed::IDENTIFIER), + inputs: vec![NodeInput::import(generic!(T), 4), NodeInput::node(NodeId(8), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(30, 2)), + ..Default::default() + }, + // 11: Switch (closed β†’ count, open β†’ max(count - 1, 1) as denominator) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::switch::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(10), 0), NodeInput::node(NodeId(17), 0), NodeInput::node(NodeId(18), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(30, 12)), + ..Default::default() + }, + // 12: Divide (local_index / denominator = within-subpath fraction) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::divide::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(9), 0), NodeInput::node(NodeId(11), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(23, 7)), + ..Default::default() + }, + // 13: Multiply (fraction Γ— 0.9999999999 to avoid overflowing to the next subpath) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::multiply::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(12), 0), NodeInput::value(TaggedValue::F64(0.9999999999), false)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(30, 7)), + ..Default::default() + }, + // 14: Add (subpath_index + clamped fraction = progression) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::add::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(8), 0), NodeInput::node(NodeId(13), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(37, 4)), + ..Default::default() + }, + // 15: Morph (content, progression, reverse, distribution, path) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(vector::morph::IDENTIFIER), + inputs: vec![ + NodeInput::import(generic!(T), 0), + NodeInput::node(NodeId(14), 0), + NodeInput::value(TaggedValue::Bool(false), false), + NodeInput::import(concrete!(vector::misc::InterpolationDistribution), 3), + NodeInput::import(concrete!(Vector), 4), + ], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(44, 3)), + ..Default::default() + }, + // 16: Repeat + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(repeat_nodes::repeat::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(15), 0), NodeInput::node(NodeId(4), 0), NodeInput::import(generic!(T), 2)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(51, 0)), + ..Default::default() + }, + // 17: Max (clamp count to at least 1) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::max::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(3), 0), NodeInput::value(TaggedValue::F64(1.), false)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(9, 13)), + ..Default::default() + }, + // 18: Max (clamp open-path denominator to at least 1 to avoid division by zero when count = 1) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(math_nodes::max::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(5), 0), NodeInput::value(TaggedValue::F64(1.), false)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(23, 14)), + ..Default::default() + }, + ] + .into_iter() + .enumerate() + .map(|(id, node)| (NodeId(id as u64), node)) + .collect(), ..Default::default() - }, + }), + inputs: vec![ + NodeInput::type_default(concrete!(List), true), + NodeInput::value(TaggedValue::F64(10.), false), + NodeInput::value(TaggedValue::Bool(Default::default()), false), + NodeInput::value(TaggedValue::InterpolationDistribution(Default::default()), false), + NodeInput::type_default(concrete!(List), false), + ], + input_metadata: vec![ + ("Content", "TODO").into(), + ("Count", "TODO").into(), + ("Reverse", "TODO").into(), + ("Distribution", "TODO").into(), + ("Path", "TODO").into(), + ], + output_names: vec!["Out".to_string()], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), + ..Default::default() }, description: Cow::Borrowed("TODO"), properties: None, @@ -800,150 +517,77 @@ fn document_node_definitions() -> HashMap) - DocumentNode { - implementation: DocumentNodeImplementation::ProtoNode(vector::as_vector::IDENTIFIER), - inputs: vec![NodeInput::node(NodeId(2), 0)], - ..Default::default() - }, - // 4: Flatten Vector - DocumentNode { - implementation: DocumentNodeImplementation::ProtoNode(graphic_nodes::graphic::flatten_vector::IDENTIFIER), - inputs: vec![NodeInput::import(generic!(T), 0)], - ..Default::default() - }, - // 5: Map - DocumentNode { - implementation: DocumentNodeImplementation::ProtoNode(graphic::map::IDENTIFIER), - inputs: vec![NodeInput::node(NodeId(4), 0), NodeInput::node(NodeId(3), 0)], - ..Default::default() - }, - // 6: Flatten Path - DocumentNode { - implementation: DocumentNodeImplementation::ProtoNode(vector::flatten_path::IDENTIFIER), - inputs: vec![NodeInput::node(NodeId(5), 0)], - ..Default::default() - }, - // 7: Points to Polyline - DocumentNode { - implementation: DocumentNodeImplementation::ProtoNode(vector::points_to_polyline::IDENTIFIER), - inputs: vec![NodeInput::node(NodeId(6), 0), NodeInput::value(TaggedValue::Bool(false), false)], - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), - ..Default::default() - }), - inputs: vec![NodeInput::type_default(descriptor!(List), true)], - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![("Vector", "TODO").into()], - output_names: vec!["Vector".to_string()], - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), - network_metadata: Some(NodeNetworkMetadata { - persistent_metadata: NodeNetworkPersistentMetadata { - node_metadata: [ - // 0: Read Vector - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 1)), - ..Default::default() - }, - ..Default::default() - }, - // 1: Extract Transform - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 1)), - ..Default::default() - }, - ..Default::default() - }, - // 2: Decompose Transform - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(14, 1)), - ..Default::default() - }, - ..Default::default() - }, - // 3: As Vector - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(21, 1)), - ..Default::default() - }, - ..Default::default() - }, - // 4: Flatten Vector - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(21, 0)), - ..Default::default() - }, - ..Default::default() - }, - // 5: Map - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(28, 0)), - ..Default::default() - }, - ..Default::default() - }, - // 6: Flatten Path - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(35, 0)), - ..Default::default() - }, - ..Default::default() - }, - // 7: Points to Polyline - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(42, 0)), - ..Default::default() - }, - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), + implementation: NodeTemplateImplementation::Network(NodeNetworkTemplate { + exports: vec![NodeInput::node(NodeId(7), 0)], + nodes: [ + // 0: Read Vector + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(context::read_vector::IDENTIFIER), + inputs: vec![NodeInput::value(TaggedValue::None, false)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 1)), ..Default::default() }, - ..Default::default() - }), + // 1: Extract Transform + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(transform_nodes::extract_transform::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(0), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 1)), + ..Default::default() + }, + // 2: Decompose Translation + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(transform_nodes::decompose_translation::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(1), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(14, 1)), + ..Default::default() + }, + // 3: As Vector (auto-converts the decomposed translation into a single-anchor List) + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(vector::as_vector::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(2), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(21, 1)), + ..Default::default() + }, + // 4: Flatten Vector + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(graphic_nodes::graphic::flatten_vector::IDENTIFIER), + inputs: vec![NodeInput::import(generic!(T), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(21, 0)), + ..Default::default() + }, + // 5: Map + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(graphic::map::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(4), 0), NodeInput::node(NodeId(3), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(28, 0)), + ..Default::default() + }, + // 6: Combine Paths + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(vector::combine_paths::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(5), 0)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(35, 0)), + ..Default::default() + }, + // 7: Points to Polyline + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(vector::points_to_polyline::IDENTIFIER), + inputs: vec![NodeInput::node(NodeId(6), 0), NodeInput::value(TaggedValue::Bool(false), false)], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(42, 0)), + ..Default::default() + }, + ] + .into_iter() + .enumerate() + .map(|(id, node)| (NodeId(id as u64), node)) + .collect(), ..Default::default() - }, + }), + inputs: vec![NodeInput::type_default(concrete!(List), true)], + input_metadata: vec![("Vector", "TODO").into()], + output_names: vec!["Vector".to_string()], + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), + ..Default::default() }, description: Cow::Borrowed("TODO"), properties: None, @@ -952,66 +596,37 @@ fn document_node_definitions() -> HashMap HashMap), true), - NodeInput::value( - TaggedValue::Footprint(Footprint { - transform: DAffine2::from_scale_angle_translation(DVec2::new(1000., 1000.), 0., DVec2::new(0., 0.)), - resolution: UVec2::new(1000, 1000), - ..Default::default() - }), - false, - ), - ], - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![("Artwork", "TODO").into(), ("Footprint", "TODO").into()], - output_names: vec!["Canvas".to_string()], - network_metadata: Some(NodeNetworkMetadata { - persistent_metadata: NodeNetworkPersistentMetadata { - node_metadata: [ - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 2)), - ..Default::default() - }, - ..Default::default() - }, - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 2)), - ..Default::default() - }, - ..Default::default() - }, - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(14, 0)), - ..Default::default() - }, - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), + implementation: NodeTemplateImplementation::Network(NodeNetworkTemplate { + exports: vec![NodeInput::node(NodeId(2), 0)], + nodes: [ + NodeTemplate { + inputs: vec![], + implementation: NodeTemplateImplementation::ProtoNode(platform_application_io::create_canvas::IDENTIFIER), + skip_deduplication: true, + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 2)), ..Default::default() }, - ..Default::default() - }), + NodeTemplate { + inputs: vec![NodeInput::node(NodeId(0), 0)], + implementation: NodeTemplateImplementation::ProtoNode(memo::memoize::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 2)), + ..Default::default() + }, + NodeTemplate { + inputs: vec![ + NodeInput::value(TaggedValue::None, false), + NodeInput::import(generic!(T), 0), + NodeInput::import(concrete!(Footprint), 1), + NodeInput::node(NodeId(1), 0), + NodeInput::scope("graphene_std::runtime::RuntimeNode"), + NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::SourceId), + ], + implementation: NodeTemplateImplementation::ProtoNode(platform_application_io::rasterize::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(14, 0)), + ..Default::default() + }, + ] + .into_iter() + .enumerate() + .map(|(id, node)| (NodeId(id as u64), node)) + .collect(), ..Default::default() - }, + }), + inputs: vec![ + NodeInput::type_default(concrete!(List), true), + NodeInput::value( + TaggedValue::Footprint(Footprint { + transform: DAffine2::from_scale_angle_translation(DVec2::new(1000., 1000.), 0., DVec2::new(0., 0.)), + resolution: UVec2::new(1000, 1000), + ..Default::default() + }), + false, + ), + ], + input_metadata: vec![("Artwork", "TODO").into(), ("Footprint", "TODO").into()], + output_names: vec!["Canvas".to_string()], + ..Default::default() }, description: Cow::Borrowed("TODO"), properties: None, @@ -1114,267 +694,119 @@ fn document_node_definitions() -> HashMap>), 0), - NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Red), false), - ], - implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), - call_argument: generic!(T), - ..Default::default() - }, - DocumentNode { - inputs: vec![ - NodeInput::import(concrete!(List>), 0), - NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Green), false), - ], - implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), - call_argument: generic!(T), - ..Default::default() - }, - DocumentNode { - inputs: vec![ - NodeInput::import(concrete!(List>), 0), - NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Blue), false), - ], - implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), - call_argument: generic!(T), - ..Default::default() - }, - DocumentNode { - inputs: vec![ - NodeInput::import(concrete!(List>), 0), - NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Alpha), false), - ], - implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), - call_argument: generic!(T), - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), - ..Default::default() - }), - inputs: vec![NodeInput::type_default(descriptor!(List>), true)], - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![("Image", "TODO").into()], - output_names: vec!["".to_string(), "Red".to_string(), "Green".to_string(), "Blue".to_string(), "Alpha".to_string()], - network_metadata: Some(NodeNetworkMetadata { - persistent_metadata: NodeNetworkPersistentMetadata { - node_metadata: [ - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), - ..Default::default() - }, - ..Default::default() - }, - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 2)), - ..Default::default() - }, - ..Default::default() - }, - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 4)), - ..Default::default() - }, - ..Default::default() - }, - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 6)), - ..Default::default() - }, - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), + implementation: NodeTemplateImplementation::Network(NodeNetworkTemplate { + exports: vec![ + NodeInput::value(TaggedValue::None, false), + NodeInput::node(NodeId(0), 0), + NodeInput::node(NodeId(1), 0), + NodeInput::node(NodeId(2), 0), + NodeInput::node(NodeId(3), 0), + ], + nodes: [ + NodeTemplate { + inputs: vec![ + NodeInput::import(concrete!(List>), 0), + NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Red), false), + ], + implementation: NodeTemplateImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), + call_argument: generic!(T), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), ..Default::default() }, - ..Default::default() - }), + NodeTemplate { + inputs: vec![ + NodeInput::import(concrete!(List>), 0), + NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Green), false), + ], + implementation: NodeTemplateImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), + call_argument: generic!(T), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 2)), + ..Default::default() + }, + NodeTemplate { + inputs: vec![ + NodeInput::import(concrete!(List>), 0), + NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Blue), false), + ], + implementation: NodeTemplateImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), + call_argument: generic!(T), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 4)), + ..Default::default() + }, + NodeTemplate { + inputs: vec![ + NodeInput::import(concrete!(List>), 0), + NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Alpha), false), + ], + implementation: NodeTemplateImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), + call_argument: generic!(T), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 6)), + ..Default::default() + }, + ] + .into_iter() + .enumerate() + .map(|(id, node)| (NodeId(id as u64), node)) + .collect(), ..Default::default() - }, + }), + inputs: vec![NodeInput::type_default(concrete!(List>), true)], + input_metadata: vec![("Image", "TODO").into()], + output_names: vec!["".to_string(), "Red".to_string(), "Green".to_string(), "Blue".to_string(), "Alpha".to_string()], + ..Default::default() }, description: Cow::Borrowed("TODO"), properties: None, }, DocumentNodeDefinition { identifier: "Split Vec2", - category: "Math: Vector", + category: "Math: Vec2", node_template: NodeTemplate { - document_node: DocumentNode { - implementation: DocumentNodeImplementation::Network(NodeNetwork { - exports: vec![NodeInput::value(TaggedValue::None, false), NodeInput::node(NodeId(0), 0), NodeInput::node(NodeId(1), 0)], - nodes: [ - DocumentNode { - inputs: vec![NodeInput::import(concrete!(DVec2), 0), NodeInput::value(TaggedValue::XY(XY::X), false)], - implementation: DocumentNodeImplementation::ProtoNode(extract_xy::extract_xy::IDENTIFIER), - call_argument: generic!(T), - ..Default::default() - }, - DocumentNode { - inputs: vec![NodeInput::import(concrete!(DVec2), 0), NodeInput::value(TaggedValue::XY(XY::Y), false)], - implementation: DocumentNodeImplementation::ProtoNode(extract_xy::extract_xy::IDENTIFIER), - call_argument: generic!(T), - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), - - ..Default::default() - }), - inputs: vec![NodeInput::value(TaggedValue::DVec2(DVec2::ZERO), true)], - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![("Vec2", "TODO").into()], - output_names: vec!["".to_string(), "X".to_string(), "Y".to_string()], - network_metadata: Some(NodeNetworkMetadata { - persistent_metadata: NodeNetworkPersistentMetadata { - node_metadata: [ - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), - ..Default::default() - }, - ..Default::default() - }, - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 2)), - ..Default::default() - }, - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), + implementation: NodeTemplateImplementation::Network(NodeNetworkTemplate { + exports: vec![NodeInput::value(TaggedValue::None, false), NodeInput::node(NodeId(0), 0), NodeInput::node(NodeId(1), 0)], + nodes: [ + NodeTemplate { + inputs: vec![NodeInput::import(concrete!(DVec2), 0), NodeInput::value(TaggedValue::XY(XY::X), false)], + implementation: NodeTemplateImplementation::ProtoNode(extract_xy::extract_xy::IDENTIFIER), + call_argument: generic!(T), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), ..Default::default() }, - ..Default::default() - }), + NodeTemplate { + inputs: vec![NodeInput::import(concrete!(DVec2), 0), NodeInput::value(TaggedValue::XY(XY::Y), false)], + implementation: NodeTemplateImplementation::ProtoNode(extract_xy::extract_xy::IDENTIFIER), + call_argument: generic!(T), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 2)), + ..Default::default() + }, + ] + .into_iter() + .enumerate() + .map(|(id, node)| (NodeId(id as u64), node)) + .collect(), ..Default::default() - }, + }), + inputs: vec![NodeInput::value(TaggedValue::DVec2(DVec2::ZERO), true)], + input_metadata: vec![("Vec2", "TODO").into()], + output_names: vec!["".to_string(), "X".to_string(), "Y".to_string()], + ..Default::default() }, description: Cow::Borrowed( "Decomposes the X and Y components of a vec2.\n\ \n\ - The inverse of this node is \"Vec2 Value\", which can have either or both its X and Y parameters exposed as graph inputs.", + The inverse of this node is **Combine Vec2**, which composes a vec2 from its X and Y components.", ), properties: None, }, - #[cfg(feature = "gpu")] - DocumentNodeDefinition { - identifier: "Upload Texture", - category: "Debug", - node_template: NodeTemplate { - document_node: DocumentNode { - implementation: DocumentNodeImplementation::Network(NodeNetwork { - exports: vec![NodeInput::node(NodeId(1), 0)], - nodes: [ - DocumentNode { - inputs: vec![NodeInput::import(concrete!(List>), 0), NodeInput::scope(platform_application_io::wgpu_executor::IDENTIFIER)], - call_argument: generic!(T), - implementation: DocumentNodeImplementation::ProtoNode(wgpu_executor::texture_conversion::upload_texture::IDENTIFIER), - ..Default::default() - }, - DocumentNode { - call_argument: generic!(T), - inputs: vec![NodeInput::node(NodeId(0), 0)], - implementation: DocumentNodeImplementation::ProtoNode(memo::memoize::IDENTIFIER), - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), - ..Default::default() - }), - inputs: vec![NodeInput::type_default(descriptor!(List>), true)], - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - output_names: vec!["Texture".to_string()], - network_metadata: Some(NodeNetworkMetadata { - persistent_metadata: NodeNetworkPersistentMetadata { - node_metadata: [ - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-7, 0)), - ..Default::default() - }, - ..Default::default() - }, - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), - ..Default::default() - }, - ..Default::default() - }, - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 0)), - ..Default::default() - }, - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), - ..Default::default() - }, - ..Default::default() - }), - ..Default::default() - }, - }, - description: Cow::Borrowed("TODO"), - properties: None, - }, DocumentNodeDefinition { identifier: "Extract", category: "", node_template: NodeTemplate { - document_node: DocumentNode { - implementation: DocumentNodeImplementation::Extract, - inputs: vec![NodeInput::type_default(descriptor!(DocumentNode), true)], - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![("Node", "TODO").into()], - output_names: vec!["Document Node".to_string()], - ..Default::default() - }, + implementation: NodeTemplateImplementation::Extract, + inputs: vec![NodeInput::type_default(concrete!(DocumentNode), true)], + input_metadata: vec![("Node", "TODO").into()], + output_names: vec!["Document Node".to_string()], + ..Default::default() }, description: Cow::Borrowed("TODO"), properties: None, @@ -1383,103 +815,68 @@ fn document_node_definitions() -> HashMap), each item carries `start`/`end`/`name` attributes from `regex_find` - NodeInput::node(NodeId(2), 0), - ], - nodes: [ - // Node 0: regex_find proto node β€” returns List of [whole_match, ...capture_groups] - DocumentNode { - inputs: vec![ - NodeInput::import(concrete!(String), 0), - NodeInput::import(concrete!(String), 1), - NodeInput::import(concrete!(f64), 2), - NodeInput::import(concrete!(bool), 3), - NodeInput::import(concrete!(bool), 4), - ], - implementation: DocumentNodeImplementation::ProtoNode(text_nodes::regex::regex_find::IDENTIFIER), - ..Default::default() - }, - // Node 1: extract_element at index 0, extracts the whole match as a bare String (drops the item's start/end/name attributes since the unwrapped String can't carry them) - DocumentNode { - inputs: vec![NodeInput::node(NodeId(0), 0), NodeInput::value(TaggedValue::F64(0.), false)], - implementation: DocumentNodeImplementation::ProtoNode(graphic::extract_element::IDENTIFIER), - ..Default::default() - }, - // Node 2: omit_element at index 0, returns the capture group items as a List, preserving each item's start/end/name attributes - DocumentNode { - inputs: vec![NodeInput::node(NodeId(0), 0), NodeInput::value(TaggedValue::F64(0.), false)], - implementation: DocumentNodeImplementation::ProtoNode(graphic::omit_element::IDENTIFIER), - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), - ..Default::default() - }), - inputs: vec![ - NodeInput::value(TaggedValue::String(String::new()), true), - NodeInput::value(TaggedValue::String(String::new()), false), - NodeInput::value(TaggedValue::F64(0.), false), - NodeInput::value(TaggedValue::Bool(false), false), - NodeInput::value(TaggedValue::Bool(false), false), + implementation: NodeTemplateImplementation::Network(NodeNetworkTemplate { + exports: vec![ + // Primary output: the whole match (String) + NodeInput::node(NodeId(1), 0), + // Secondary output: capture groups (List), each item carries `start`/`end`/`name` attributes from `regex_find` + NodeInput::node(NodeId(2), 0), ], - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![ - ("String", "The string to search within.").into(), - ("Pattern", "The regular expression pattern to search for.").into(), - ( - "Match Index", - "Which non-overlapping occurrence of the pattern to return, starting from 0 for the first match. Negative indices count backwards from the last match.", - ) - .into(), - ("Case Insensitive", "Match letters regardless of case.").into(), - ("Multiline", "Make `^` and `$` match the start and end of each line, not just the whole string.").into(), - ], - output_names: vec!["Match".to_string(), "Captures".to_string()], - network_metadata: Some(NodeNetworkMetadata { - persistent_metadata: NodeNetworkPersistentMetadata { - node_metadata: [ - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), - ..Default::default() - }, - ..Default::default() - }, - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(8, 0)), - ..Default::default() - }, - ..Default::default() - }, - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(8, 2)), - ..Default::default() - }, - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), + nodes: [ + // Node 0: regex_find proto node β€” returns List of [whole_match, ...capture_groups] + NodeTemplate { + inputs: vec![ + NodeInput::import(concrete!(String), 0), + NodeInput::import(concrete!(String), 1), + NodeInput::import(concrete!(f64), 2), + NodeInput::import(concrete!(bool), 3), + NodeInput::import(concrete!(bool), 4), + ], + implementation: NodeTemplateImplementation::ProtoNode(text_nodes::regex::regex_find::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), ..Default::default() }, - ..Default::default() - }), + // Node 1: extract_element at index 0, extracts the whole match as a bare String (drops the item's start/end/name attributes since the unwrapped String can't carry them) + NodeTemplate { + inputs: vec![NodeInput::node(NodeId(0), 0), NodeInput::value(TaggedValue::F64(0.), false)], + implementation: NodeTemplateImplementation::ProtoNode(graphic::extract_element::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(8, 0)), + ..Default::default() + }, + // Node 2: omit_element at index 0, returns the capture group items as a List, preserving each item's start/end/name attributes + NodeTemplate { + inputs: vec![NodeInput::node(NodeId(0), 0), NodeInput::value(TaggedValue::F64(0.), false)], + implementation: NodeTemplateImplementation::ProtoNode(graphic::omit_element::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(8, 2)), + ..Default::default() + }, + ] + .into_iter() + .enumerate() + .map(|(id, node)| (NodeId(id as u64), node)) + .collect(), ..Default::default() - }, + }), + inputs: vec![ + NodeInput::value(TaggedValue::String(String::new()), true), + NodeInput::value(TaggedValue::String(String::new()), false), + NodeInput::value(TaggedValue::F64(0.), false), + NodeInput::value(TaggedValue::Bool(false), false), + NodeInput::value(TaggedValue::Bool(false), false), + ], + input_metadata: vec![ + ("String", "The string to search within.").into(), + ("Pattern", "The regular expression pattern to search for.").into(), + ( + "Match Index", + "Which non-overlapping occurrence of the pattern to return, starting from 0 for the first match. Negative indices count backwards from the last match.", + ) + .into(), + ("Case Insensitive", "Match letters regardless of case.").into(), + ("Multiline", "Make `^` and `$` match the start and end of each line, not just the whole string.").into(), + ], + output_names: vec!["Match".to_string(), "Captures".to_string()], + ..Default::default() }, description: Cow::Borrowed( r#"Finds a portion of the string matching a regular expression pattern. With "Match Index" at its default 0, it selects the first non-overlapping occurrence, but others may be selected. Capture groups, if any, are produced as a list in the "Captures" output."#, @@ -1490,71 +887,42 @@ fn document_node_definitions() -> HashMap), 0)], - implementation: DocumentNodeImplementation::ProtoNode(memo::monitor::IDENTIFIER), - call_argument: generic!(T), - skip_deduplication: true, - ..Default::default() - }, - DocumentNode { - inputs: vec![ - NodeInput::node(NodeId(0), 0), - NodeInput::import(concrete!(graphene_std::vector::VectorModification), 1), - NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath), - ], - call_argument: generic!(T), - implementation: DocumentNodeImplementation::ProtoNode(vector::path_modify::IDENTIFIER), - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), - ..Default::default() - }), - inputs: vec![ - NodeInput::type_default(descriptor!(List), true), - NodeInput::value(TaggedValue::VectorModification(Default::default()), false), - ], - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![("Content", "TODO").into(), ("Modification", "TODO").into()], - output_names: vec!["Modified".to_string()], - network_metadata: Some(NodeNetworkMetadata { - persistent_metadata: NodeNetworkPersistentMetadata { - node_metadata: [ - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), - ..Default::default() - }, - ..Default::default() - }, - DocumentNodeMetadata { - persistent_metadata: DocumentNodePersistentMetadata { - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 0)), - ..Default::default() - }, - ..Default::default() - }, - ] - .into_iter() - .enumerate() - .map(|(id, node)| (NodeId(id as u64), node)) - .collect(), + implementation: NodeTemplateImplementation::Network(NodeNetworkTemplate { + exports: vec![NodeInput::node(NodeId(1), 0)], + nodes: [ + NodeTemplate { + inputs: vec![NodeInput::import(generic!(T), 0)], + implementation: NodeTemplateImplementation::ProtoNode(memo::monitor::IDENTIFIER), + call_argument: generic!(T), + skip_deduplication: true, + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), ..Default::default() }, - ..Default::default() - }), + NodeTemplate { + inputs: vec![ + NodeInput::node(NodeId(0), 0), + NodeInput::import(concrete!(graphene_std::vector::VectorModification), 1), + NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath), + ], + call_argument: generic!(T), + implementation: NodeTemplateImplementation::ProtoNode(vector::path_modify::IDENTIFIER), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 0)), + ..Default::default() + }, + ] + .into_iter() + .enumerate() + .map(|(id, node)| (NodeId(id as u64), node)) + .collect(), ..Default::default() - }, + }), + inputs: vec![ + NodeInput::type_default(concrete!(Vector), true), + NodeInput::value(TaggedValue::VectorModification(Default::default()), false), + ], + input_metadata: vec![("Content", "TODO").into(), ("Modification", "TODO").into()], + output_names: vec!["Modified".to_string()], + ..Default::default() }, description: Cow::Borrowed("TODO"), properties: None, @@ -1688,7 +1056,7 @@ fn static_input_properties() -> InputProperties { }); Ok(vec![LayoutGroup::row(node_properties::number_widget( - ParameterWidgetsInfo::new(node_id, index, blank_assist, context), + ParameterWidgetsInfo::at_index(node_id, index, blank_assist, context), number_input, ))]) }), @@ -1729,7 +1097,7 @@ fn static_input_properties() -> InputProperties { }; // NOTE: The bool input MUST be at the input index directly before the f64 input! Ok(vec![LayoutGroup::row(node_properties::optional_f64_widget( - ParameterWidgetsInfo::new(node_id, index, false, context), + ParameterWidgetsInfo::at_index(node_id, index, false, context), index - 1, number_input, ))]) @@ -1742,7 +1110,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let number_input = NumberInput::default().percentage().min(0.).max(100.); Ok(vec![LayoutGroup::row(node_properties::optional_f64_widget( - ParameterWidgetsInfo::new(node_id, index, false, context), + ParameterWidgetsInfo::at_index(node_id, index, false, context), index - 1, number_input, ))]) @@ -1789,7 +1157,7 @@ fn static_input_properties() -> InputProperties { .unwrap_or_default(); Ok(vec![node_properties::vec2_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), &x, &y, &unit, @@ -1803,7 +1171,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (_, coherent_noise_active, _, _, _, _) = node_properties::query_noise_pattern_state(node_id, context)?; let scale = node_properties::number_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), NumberInput::default().min(0.).disabled(!coherent_noise_active), ); Ok(vec![scale.into()]) @@ -1812,7 +1180,7 @@ fn static_input_properties() -> InputProperties { map.insert( "noise_properties_noise_type".to_string(), Box::new(|node_id, index, context| { - let noise_type_row = enum_choice::().for_socket(ParameterWidgetsInfo::new(node_id, index, true, context)).property_row(); + let noise_type_row = enum_choice::().for_socket(ParameterWidgetsInfo::at_index(node_id, index, true, context)).property_row(); Ok(vec![noise_type_row, LayoutGroup::row(Vec::new())]) }), ); @@ -1821,7 +1189,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (_, coherent_noise_active, _, _, _, _) = node_properties::query_noise_pattern_state(node_id, context)?; let domain_warp_type = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, index, true, context)) + .for_socket(ParameterWidgetsInfo::at_index(node_id, index, true, context)) .disabled(!coherent_noise_active) .property_row(); Ok(vec![domain_warp_type]) @@ -1832,7 +1200,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (_, coherent_noise_active, _, _, domain_warp_active, _) = node_properties::query_noise_pattern_state(node_id, context)?; let domain_warp_amplitude = node_properties::number_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), NumberInput::default().min(0.).disabled(!coherent_noise_active || !domain_warp_active), ); Ok(vec![domain_warp_amplitude.into(), LayoutGroup::row(Vec::new())]) @@ -1843,7 +1211,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (_, coherent_noise_active, _, _, _, _) = node_properties::query_noise_pattern_state(node_id, context)?; let fractal_type_row = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, index, true, context)) + .for_socket(ParameterWidgetsInfo::at_index(node_id, index, true, context)) .disabled(!coherent_noise_active) .property_row(); Ok(vec![fractal_type_row]) @@ -1854,7 +1222,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (fractal_active, coherent_noise_active, _, _, _, domain_warp_only_fractal_type_wrongly_active) = node_properties::query_noise_pattern_state(node_id, context)?; let fractal_octaves = node_properties::number_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), NumberInput::default() .mode_range() .min(1.) @@ -1871,7 +1239,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (fractal_active, coherent_noise_active, _, _, _, domain_warp_only_fractal_type_wrongly_active) = node_properties::query_noise_pattern_state(node_id, context)?; let fractal_lacunarity = node_properties::number_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), NumberInput::default() .mode_range() .min(0.) @@ -1886,7 +1254,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (fractal_active, coherent_noise_active, _, _, _, domain_warp_only_fractal_type_wrongly_active) = node_properties::query_noise_pattern_state(node_id, context)?; let fractal_gain = node_properties::number_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), NumberInput::default() .mode_range() .min(0.) @@ -1901,7 +1269,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (fractal_active, coherent_noise_active, _, _, _, domain_warp_only_fractal_type_wrongly_active) = node_properties::query_noise_pattern_state(node_id, context)?; let fractal_weighted_strength = node_properties::number_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), NumberInput::default() .mode_range() .min(0.) @@ -1916,7 +1284,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (fractal_active, coherent_noise_active, _, ping_pong_active, _, domain_warp_only_fractal_type_wrongly_active) = node_properties::query_noise_pattern_state(node_id, context)?; let fractal_ping_pong_strength = node_properties::number_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), NumberInput::default() .mode_range() .min(0.) @@ -1931,7 +1299,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (_, coherent_noise_active, cellular_noise_active, _, _, _) = node_properties::query_noise_pattern_state(node_id, context)?; let cellular_distance_function_row = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, index, true, context)) + .for_socket(ParameterWidgetsInfo::at_index(node_id, index, true, context)) .disabled(!coherent_noise_active || !cellular_noise_active) .property_row(); Ok(vec![cellular_distance_function_row]) @@ -1942,7 +1310,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (_, coherent_noise_active, cellular_noise_active, _, _, _) = node_properties::query_noise_pattern_state(node_id, context)?; let cellular_return_type = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, index, true, context)) + .for_socket(ParameterWidgetsInfo::at_index(node_id, index, true, context)) .disabled(!coherent_noise_active || !cellular_noise_active) .property_row(); Ok(vec![cellular_return_type]) @@ -1953,7 +1321,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let (_, coherent_noise_active, cellular_noise_active, _, _, _) = node_properties::query_noise_pattern_state(node_id, context)?; let cellular_jitter = node_properties::number_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), NumberInput::default() .mode_range() .range_min(Some(0.)) @@ -1966,7 +1334,7 @@ fn static_input_properties() -> InputProperties { map.insert( "assign_colors_gradient".to_string(), Box::new(|node_id, index, context| { - let gradient_row = node_properties::color_widget(ParameterWidgetsInfo::new(node_id, index, true, context), ColorInput::default().allow_none(false)); + let gradient_row = node_properties::color_widget(ParameterWidgetsInfo::at_index(node_id, index, true, context), ColorInput::default().allow_none(false)); Ok(vec![gradient_row]) }), ); @@ -1975,7 +1343,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let randomize_enabled = node_properties::query_assign_colors_randomize(node_id, context)?; let seed_row = node_properties::number_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), NumberInput::default().min(0.).int().disabled(!randomize_enabled), ); Ok(vec![seed_row.into()]) @@ -1986,7 +1354,7 @@ fn static_input_properties() -> InputProperties { Box::new(|node_id, index, context| { let randomize_enabled = node_properties::query_assign_colors_randomize(node_id, context)?; let repeat_every_row = node_properties::number_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), NumberInput::default().min(0.).int().disabled(randomize_enabled), ); Ok(vec![repeat_every_row.into()]) @@ -1995,7 +1363,7 @@ fn static_input_properties() -> InputProperties { map.insert( "transform_rotation".to_string(), Box::new(|node_id, index, context| { - let mut widgets = node_properties::start_widgets(ParameterWidgetsInfo::new(node_id, index, true, context)); + let mut widgets = node_properties::start_widgets(&ParameterWidgetsInfo::at_index(node_id, index, true, context)); let document_node = node_properties::get_document_node(node_id, context)?; let Some(input) = document_node.inputs.get(index) else { @@ -2009,7 +1377,7 @@ fn static_input_properties() -> InputProperties { .mode(NumberInputMode::Range) .range_min(Some(-180.)) .range_max(Some(180.)) - .on_update(node_properties::update_value( + .on_update(node_properties::update_value_at_index( |number_input: &NumberInput| TaggedValue::F64(number_input.value.unwrap()), node_id, index, @@ -2027,7 +1395,7 @@ fn static_input_properties() -> InputProperties { "transform_translation".to_string(), Box::new(|node_id, index, context| { Ok(vec![node_properties::vec2_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), "X", "Y", " px", @@ -2039,13 +1407,22 @@ fn static_input_properties() -> InputProperties { // Scale uses a Vec2 widget with W/H labels and an "x" unit suffix map.insert( "transform_scale".to_string(), - Box::new(|node_id, index, context| Ok(vec![node_properties::vec2_widget(ParameterWidgetsInfo::new(node_id, index, true, context), "W", "H", "x", None, false)])), + Box::new(|node_id, index, context| { + Ok(vec![node_properties::vec2_widget( + ParameterWidgetsInfo::at_index(node_id, index, true, context), + "W", + "H", + "x", + None, + false, + )]) + }), ); // Skew has a custom override that maps to degrees map.insert( "transform_skew".to_string(), Box::new(|node_id, index, context| { - let mut widgets = node_properties::start_widgets(ParameterWidgetsInfo::new(node_id, index, true, context)); + let mut widgets = node_properties::start_widgets(&ParameterWidgetsInfo::at_index(node_id, index, true, context)); let document_node = node_properties::get_document_node(node_id, context)?; let Some(input) = document_node.inputs.get(index) else { @@ -2059,7 +1436,7 @@ fn static_input_properties() -> InputProperties { .unit("Β°") .min(-89.9) .max(89.9) - .on_update(node_properties::update_value( + .on_update(node_properties::update_value_at_index( move |input: &NumberInput| TaggedValue::DVec2(DVec2::new(input.value.unwrap(), val.y)), node_id, index, @@ -2072,7 +1449,7 @@ fn static_input_properties() -> InputProperties { .unit("Β°") .min(-89.9) .max(89.9) - .on_update(node_properties::update_value( + .on_update(node_properties::update_value_at_index( move |input: &NumberInput| TaggedValue::DVec2(DVec2::new(val.x, input.value.unwrap())), node_id, index, @@ -2087,7 +1464,7 @@ fn static_input_properties() -> InputProperties { ); map.insert( "text_area".to_string(), - Box::new(|node_id, index, context| Ok(vec![LayoutGroup::row(node_properties::text_area_widget(ParameterWidgetsInfo::new(node_id, index, true, context)))])), + Box::new(|node_id, index, context| Ok(vec![LayoutGroup::row(node_properties::text_area_widget(ParameterWidgetsInfo::at_index(node_id, index, true, context)))])), ); map.insert( "text_font".to_string(), @@ -2096,7 +1473,7 @@ fn static_input_properties() -> InputProperties { if context.fonts.font_catalog.is_empty() { context.responses.add(FontsMessage::LoadCatalog); } - let (font, style) = node_properties::font_inputs(ParameterWidgetsInfo::new(node_id, index, true, context)); + let (font, style) = node_properties::font_inputs(ParameterWidgetsInfo::at_index(node_id, index, true, context)); let mut result = vec![LayoutGroup::row(font)]; if let Some(style) = style { result.push(LayoutGroup::row(style)); @@ -2108,7 +1485,7 @@ fn static_input_properties() -> InputProperties { "artboard_background".to_string(), Box::new(|node_id, index, context| { Ok(vec![node_properties::color_widget( - ParameterWidgetsInfo::new(node_id, index, true, context), + ParameterWidgetsInfo::at_index(node_id, index, true, context), ColorInput::default().allow_none(false), )]) }), @@ -2116,7 +1493,9 @@ fn static_input_properties() -> InputProperties { map.insert( "text_align".to_string(), Box::new(|node_id, index, context| { - let choices = enum_choice::().for_socket(ParameterWidgetsInfo::new(node_id, index, true, context)).property_row(); + let choices = enum_choice::() + .for_socket(ParameterWidgetsInfo::at_index(node_id, index, true, context)) + .property_row(); Ok(vec![choices]) }), ); @@ -2135,27 +1514,127 @@ pub fn resolve_document_node_type(identifier: &DefinitionIdentifier) -> Option<& DOCUMENT_NODE_TYPES.get(identifier) } +impl InputTypeConstraint { + #[must_use] + fn type_name(ty: &Type) -> String { + ty.nested_type().to_string() + } + + /// Find types that satisfy both constraints + #[must_use] + fn intersection(self, other: Self) -> Self { + match (self, other) { + (Self::Limited(a), Self::Limited(b)) => Self::Limited(a.intersection(&b).cloned().collect()), + (Self::Limited(a), Self::All) | (Self::All, Self::Limited(a)) => Self::Limited(a), + (Self::All, Self::All) => Self::All, + } + } + + /// Construct a constraint that no types satisfy + #[must_use] + fn empty() -> Self { + Self::Limited(Default::default()) + } + + /// Check if type satisfies the constraint + #[must_use] + fn satisfies(&self, ty: &Type) -> bool { + match self { + Self::Limited(types) => types.contains(&Self::type_name(ty)), + Self::All => true, + } + } + + /// Add a new type that the constraint satisfied. Returns true if the type is not previously added. + fn insert(&mut self, ty: &Type) -> bool { + match self { + Self::Limited(types) => types.insert(Self::type_name(ty)), + Self::All => false, + } + } + + /// Compute the type constraint for one input. Note that this cannot use the infrastructure in the node network interface as the node is not placed in a network. + #[must_use] + fn compute_constraint_for_input(template_document_node: &NodeTemplate, name: &str, input_index: usize) -> Self { + // Add input type from node implementation + match &template_document_node.implementation { + // TODO: This does not consider the constrains by nodes not directly connected to the import + NodeTemplateImplementation::Network(nested_network) => { + // Find all inputs connected to the relevant import + fn valid_types_from_node(child_node: &NodeTemplate, name: &str, input_index: usize) -> impl Iterator { + let all_inputs = child_node.inputs.iter().enumerate(); + let input_for_import = all_inputs.filter(move |(_, child_input)| matches!(child_input, NodeInput::Import { import_index, .. } if *import_index == input_index)); + input_for_import.map(move |(index, _)| InputTypeConstraint::compute_constraint_for_input(child_node, name, index)) + } + let all_type_constraints = nested_network.nodes.values().flat_map(|node| valid_types_from_node(node, name, input_index)); + // The type fed to the network must satisfy all protonodes it is connected to + let intersection_of_constraints = all_type_constraints.reduce(|a, b| a.intersection(b)); + // If no constraints, then all types are accepted + intersection_of_constraints.unwrap_or(Self::All) + } + NodeTemplateImplementation::ProtoNode(proto_node_identifier) => { + // The passthrough node has no implementations but accepts all types (it is filtered from the compiled network) + if proto_node_identifier == &graphene_std::ops::passthrough::IDENTIFIER { + return Self::All; + } + + let Some(implementations) = interpreted_executor::node_registry::NODE_REGISTRY.get(proto_node_identifier) else { + warn!("No implementations found for protonode {proto_node_identifier} in {name}"); + return Self::All; + }; + + // Find the union of all the possible types from the dynamic executor implementations + let mut result_accepted = Self::empty(); + for node_io in implementations.keys() { + if let Some(input_type) = node_io.inputs.get(input_index) { + result_accepted.insert(input_type); + } + } + result_accepted + } + NodeTemplateImplementation::Extract => { + warn!("Input types for extract node {name} not supported"); + Self::All + } + } + } + + /// Compute the type constraints for each input, validating that the current input satisfies the value. + #[must_use] + fn constraints_for_all_inputs(template_document_node: &NodeTemplate, name: &str) -> Vec { + let input_indices = 0..template_document_node.inputs.len(); + let all_input_constraints: Vec<_> = input_indices.map(|input_index| Self::compute_constraint_for_input(template_document_node, name, input_index)).collect(); + + // Validate that the current inputs are valid + for (index, (constraint, input)) in all_input_constraints.iter().zip(&template_document_node.inputs).enumerate() { + if let Some(value) = input.as_value() { + let input_ty = value.ty(); + + // Empty types are used when the input must come from the graph so they can be skipped. + if input_ty.nested_type() != &concrete!(()) && !constraint.satisfies(&input_ty) { + warn!("The default value for input index {index} node {name} is {input_ty}, but does not satisfy {constraint:?}"); + } + } + } + + all_input_constraints + } +} + pub fn collect_node_types() -> Vec { DOCUMENT_NODE_TYPES .iter() .filter(|(_, definition)| !definition.category.is_empty()) .map(|(identifier, definition)| { - let input_types = definition - .node_template - .document_node - .inputs - .iter() - .map(|node_input| node_input.as_value().map(|node_value| node_value.ty().nested_type().to_string()).unwrap_or_default()) - .collect::>(); - let mut name = definition.node_template.persistent_node_metadata.display_name.clone(); + let mut name = definition.node_template.display_name.clone(); if name.is_empty() { name = identifier.implementation_name_from_identifier() } FrontendNodeType { identifier: identifier.serialized(), + input_types: InputTypeConstraint::constraints_for_all_inputs(&definition.node_template, &name), name, category: definition.category.to_string(), - input_types, } }) .collect() @@ -2184,71 +1663,125 @@ impl DocumentNodeDefinition { // Only value inputs should be overridden, since node inputs change graph structure and must be handled by the network interface. // However, this would require changing some tooling which creates multiple nodes at once, before they are inserted into the network. // debug_assert!(input_override.as_node().is_none(), "Node inputs are not supported in input overrides"); - template.document_node.inputs[index] = input_override; + template.inputs[index] = input_override; } }); - // Ensure that the input properties are initialized for every Document Node input for every node - fn populate_input_properties(node_template: &mut NodeTemplate, mut path: Vec) { - if let Some(current_node) = path.pop() { - let DocumentNodeImplementation::Network(template_network) = &node_template.document_node.implementation else { - log::error!("Template network should always exist"); - return; - }; - let Some(nested_network) = template_network.nested_network(&path) else { - log::error!("Nested network should exist for path"); - return; - }; - let Some(input_length) = nested_network.nodes.get(¤t_node).map(|node| node.inputs.len()) else { - log::error!("Could not get current node in nested network"); - return; - }; - let Some(template_network_metadata) = &mut node_template.persistent_node_metadata.network_metadata else { - log::error!("Template should have metadata if it has network implementation"); - return; - }; - let Some(nested_network_metadata) = template_network_metadata.nested_metadata_mut(&path) else { - log::error!("Path is not valid for network"); - return; - }; - let Some(nested_node_metadata) = nested_network_metadata.persistent_metadata.node_metadata.get_mut(¤t_node) else { - log::error!("Path is not valid for network"); - return; - }; - nested_node_metadata.persistent_metadata.input_metadata.resize_with(input_length, InputMetadata::default); - - // Recurse over all sub-nodes if the current node is a network implementation - let mut current_path = path.clone(); - current_path.push(current_node); - let DocumentNodeImplementation::Network(template_network) = &node_template.document_node.implementation else { - log::error!("Template network should always exist"); - return; - }; - if let Some(current_nested_network) = template_network.nested_network(¤t_path) { - for sub_node_id in current_nested_network.nodes.keys().cloned().collect::>() { - let mut sub_path = current_path.clone(); - sub_path.push(sub_node_id); - populate_input_properties(node_template, sub_path); - } - }; - } else { - // Base case - let input_len = node_template.document_node.inputs.len(); - node_template.persistent_node_metadata.input_metadata.resize_with(input_len, InputMetadata::default); - if let DocumentNodeImplementation::Network(node_template_network) = &node_template.document_node.implementation { - for sub_node_id in node_template_network.nodes.keys().cloned().collect::>() { - populate_input_properties(node_template, vec![sub_node_id]); - } - } - } - } - populate_input_properties(&mut template, Vec::new()); + // Ensure that the input properties are initialized for every input of every node + template.normalize_input_metadata(); template } /// Converts the [DocumentNodeDefinition] type to a [NodeTemplate], completely default. pub fn default_node_template(&self) -> NodeTemplate { - self.node_template_input_override(self.node_template.document_node.inputs.clone().into_iter().map(Some)) + self.node_template_input_override(self.node_template.inputs.clone().into_iter().map(Some)) + } +} + +#[cfg(test)] +mod test { + use super::resolve_network_node_type; + use crate::test_utils::test_prelude::*; + use graph_craft::document::NodeId; + + // Guards the embedded Map body chain (Read Vector -> Extract Transform -> Decompose Translation -> As Vector) against registry drift + #[tokio::test] + async fn origins_to_polyline_resolves_and_evaluates() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + editor.draw_rect(0., 0., 10., 10.).await; + + let layer = editor.active_document().metadata().all_layers().next().expect("drawing a rectangle should create a layer"); + let node_id = NodeId::new(); + let node_template = resolve_network_node_type("Origins to Polyline") + .expect("the Origins to Polyline definition should exist") + .default_node_template(); + editor + .handle_message(NodeGraphMessage::InsertNode { + node_id, + node_template: Box::new(node_template), + }) + .await; + editor.handle_message(NodeGraphMessage::MoveNodeToChainStart { node_id, parent: layer }).await; + + editor.eval_graph().await.expect("the Origins to Polyline chain should type-resolve and evaluate"); + } +} + +#[cfg(test)] +mod test_type_constraints { + use crate::messages::portfolio::document::node_graph::document_node_definitions::resolve_proto_node_type; + use crate::messages::portfolio::document::node_graph::utility_types::InputTypeConstraint; + use crate::messages::portfolio::document::utility_types::network_interface::{NodeNetworkTemplate, NodeTemplate, NodeTemplateImplementation}; + use crate::test_utils::test_prelude::*; + use core_types::{Ctx, list::Item}; + use graph_craft::document::{NodeId, NodeInput}; + use graphene_std::{Type, concrete, generic}; + use node_macro; + + #[track_caller] + fn all_satisifed(constraint: &InputTypeConstraint, values: impl IntoIterator) { + for ty in values { + assert!(constraint.satisfies(&ty), "{ty} not satisfied by {:#?}", constraint); + } + } + + #[test] + fn passthrough() { + let node_type = resolve_proto_node_type(graphene_std::ops::passthrough::IDENTIFIER).expect("passthrough node"); + let constraint = InputTypeConstraint::constraints_for_all_inputs(&node_type.node_template, "name"); + assert_eq!(constraint, vec![InputTypeConstraint::All]); + } + + #[node_macro::node(category(""))] + fn test_node_accept_f32_f64_dvec2(_: impl Ctx, #[implementations(f32, f64, DVec2)] a: Item, _b: Item) -> Item { + a + } + + #[test] + fn single_protonode() { + let node_type = resolve_proto_node_type(test_node_accept_f_32_f_64_dvec_2::IDENTIFIER).expect("test node to exist"); + let constraint = InputTypeConstraint::constraints_for_all_inputs(&node_type.node_template, "name"); + all_satisifed(&constraint[0], [concrete!(f32), concrete!(f64), concrete!(glam::DVec2)]); + assert!(!constraint[0].satisfies(&concrete!(String))); + all_satisifed(&constraint[1], [concrete!(bool)]); + } + + #[node_macro::node(category(""))] + fn test_node_accept_f32_f64_string(_: impl Ctx, #[implementations(f32, f64, String)] a: Item, _b: Item) -> Item { + a + } + + #[test] + fn single_protonode2() { + let node_type = resolve_proto_node_type(test_node_accept_f_32_f_64_string::IDENTIFIER).expect("test node to exist"); + let constraint = InputTypeConstraint::constraints_for_all_inputs(&node_type.node_template, "name"); + all_satisifed(&constraint[0], [concrete!(f32), concrete!(f64), concrete!(String)]); + assert!(!constraint[0].satisfies(&concrete!(glam::DVec2))); + all_satisifed(&constraint[1], [concrete!(bool)]); + } + + #[test] + fn network() { + let atan_definition = resolve_proto_node_type(test_node_accept_f_32_f_64_dvec_2::IDENTIFIER).expect("test node to exist"); + let min_definition = resolve_proto_node_type(test_node_accept_f_32_f_64_string::IDENTIFIER).expect("test node to exist"); + let atan_node = atan_definition.node_template_input_override([Some(NodeInput::import(generic!(X), 0))]); + let min_node = min_definition.node_template_input_override([Some(NodeInput::import(generic!(X), 0))]); + let inner_network = NodeNetworkTemplate { + exports: vec![NodeInput::node(NodeId(10), 0)], + nodes: [(NodeId(10), atan_node), (NodeId(11), min_node)].into_iter().collect(), + ..Default::default() + }; + + let node = NodeTemplate { + inputs: vec![NodeInput::import(generic!(X), 0)], + implementation: NodeTemplateImplementation::Network(inner_network), + ..Default::default() + }; + let constraint = InputTypeConstraint::compute_constraint_for_input(&node, "name", 0); + all_satisifed(&constraint, [concrete!(f32), concrete!(f64)]); + assert!(!constraint.satisfies(&concrete!(String))); + assert!(!constraint.satisfies(&concrete!(glam::DVec2))); } } diff --git a/editor/src/messages/portfolio/document/node_graph/document_node_definitions/document_node_derive.rs b/editor/src/messages/portfolio/document/node_graph/document_node_definitions/document_node_derive.rs index 94df698af2..841edc562d 100644 --- a/editor/src/messages/portfolio/document/node_graph/document_node_definitions/document_node_derive.rs +++ b/editor/src/messages/portfolio/document/node_graph/document_node_definitions/document_node_derive.rs @@ -1,7 +1,6 @@ use super::DocumentNodeDefinition; use crate::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier; -use crate::messages::portfolio::document::utility_types::network_interface::{DocumentNodePersistentMetadata, InputMetadata, NodeTemplate, WidgetOverride}; -use graph_craft::document::*; +use crate::messages::portfolio::document::utility_types::network_interface::{InputMetadata, NodeTemplate, NodeTemplateImplementation, WidgetOverride}; use graphene_std::registry::*; use graphene_std::*; use std::collections::{HashMap, HashSet}; @@ -14,7 +13,7 @@ pub(super) fn post_process_nodes(custom: Vec) -> HashMap let network_nodes = custom .into_iter() .filter_map(|definition| { - if let DocumentNodeImplementation::ProtoNode(proto_node_identifier) = &definition.node_template.document_node.implementation { + if let NodeTemplateImplementation::ProtoNode(proto_node_identifier) = &definition.node_template.implementation { definitions_map.insert(DefinitionIdentifier::ProtoNode(proto_node_identifier.clone()), definition); return None; }; @@ -71,29 +70,22 @@ pub(super) fn post_process_nodes(custom: Vec) -> HashMap DocumentNodeDefinition { identifier: display_name, node_template: NodeTemplate { - document_node: DocumentNode { - inputs, - call_argument: input_type.clone(), - implementation: DocumentNodeImplementation::ProtoNode(id.clone()), - visible: true, - skip_deduplication: false, - context_features: ContextDependencies::default(), - ..Default::default() - }, - persistent_node_metadata: DocumentNodePersistentMetadata { - // TODO: Store information for input overrides in the node macro - input_metadata: fields - .iter() - .map(|f| match f.widget_override { - RegistryWidgetOverride::None => (f.name, f.description).into(), - RegistryWidgetOverride::Hidden => InputMetadata::with_name_description_override(f.name, f.description, WidgetOverride::Hidden), - RegistryWidgetOverride::String(str) => InputMetadata::with_name_description_override(f.name, f.description, WidgetOverride::String(str.to_string())), - RegistryWidgetOverride::Custom(str) => InputMetadata::with_name_description_override(f.name, f.description, WidgetOverride::Custom(str.to_string())), - }) - .collect(), - locked: false, - ..Default::default() - }, + inputs, + call_argument: input_type.clone(), + implementation: NodeTemplateImplementation::ProtoNode(id.clone()), + // Context features are resolved from the registry at compile time, not persisted on the node + context_features: ContextDependencies::default(), + // TODO: Store information for input overrides in the node macro + input_metadata: fields + .iter() + .map(|f| match f.widget_override { + RegistryWidgetOverride::None => (f.name, f.description).into(), + RegistryWidgetOverride::Hidden => InputMetadata::with_name_description_override(f.name, f.description, WidgetOverride::Hidden), + RegistryWidgetOverride::String(str) => InputMetadata::with_name_description_override(f.name, f.description, WidgetOverride::String(str.to_string())), + RegistryWidgetOverride::Custom(str) => InputMetadata::with_name_description_override(f.name, f.description, WidgetOverride::Custom(str.to_string())), + }) + .collect(), + ..Default::default() }, category, description: Cow::Borrowed(description), @@ -104,13 +96,14 @@ pub(super) fn post_process_nodes(custom: Vec) -> HashMap // Add the rest of the network nodes to the map and add the metadata for their internal protonodes for mut network_node in network_nodes { - traverse_node(&network_node.node_template.document_node, &mut network_node.node_template.persistent_node_metadata, &definitions_map); + fill_proto_node_metadata(&mut network_node.node_template, &definitions_map); + // Set the reference to the node identifier - if let Some(nested_metadata) = network_node.node_template.persistent_node_metadata.network_metadata.as_mut() { - nested_metadata.persistent_metadata.reference = Some(network_node.identifier.to_string()); + if let NodeTemplateImplementation::Network(network_template) = &mut network_node.node_template.implementation { + network_template.reference = Some(network_node.identifier.to_string()); // If it is not a merge node, then set the display name to the identifier/reference if network_node.identifier != "Merge" { - network_node.node_template.persistent_node_metadata.display_name = network_node.identifier.to_string(); + network_node.node_template.display_name = network_node.identifier.to_string(); } } definitions_map.insert(DefinitionIdentifier::Network(network_node.identifier.to_string()), network_node); @@ -119,27 +112,27 @@ pub(super) fn post_process_nodes(custom: Vec) -> HashMap definitions_map } -/// Traverses a document node template and metadata in parallel to add metadata to the protonodes -fn traverse_node(node: &DocumentNode, node_metadata: &mut DocumentNodePersistentMetadata, definitions_map: &HashMap) { - match &node.implementation { - DocumentNodeImplementation::Network(node_network) => { - for (nested_node_id, nested_node) in node_network.nodes.iter() { - let nested_metadata = node_metadata.network_metadata.as_mut().unwrap().persistent_metadata.node_metadata.get_mut(nested_node_id).unwrap(); - traverse_node(nested_node, &mut nested_metadata.persistent_metadata, definitions_map); +/// Recursively fills each nested proto node's editor metadata from its definition, preserving only the authored position. +fn fill_proto_node_metadata(node_template: &mut NodeTemplate, definitions_map: &HashMap) { + match &mut node_template.implementation { + NodeTemplateImplementation::Network(network_template) => { + for nested_template in network_template.nodes.values_mut() { + fill_proto_node_metadata(nested_template, definitions_map); } } - DocumentNodeImplementation::ProtoNode(id) => { - // Set all the metadata except the position to the proto node information from the macro - // TODO: Use options in the template to specify what you want to default and what you want to override - // If this fails then the proto node id in the definition doesn't match what is generated by the macro + NodeTemplateImplementation::ProtoNode(id) => { + // If this lookup fails then the proto node id in the definition doesn't match what is generated by the macro let Some(definition) = definitions_map.get(&DefinitionIdentifier::ProtoNode(id.clone())) else { - // log::error!("Could not get definition for id {} when filling in protonode metadata for a custom node", id.clone()); return; }; - let mut new_metadata = definition.node_template.persistent_node_metadata.clone(); - new_metadata.node_type_metadata = node_metadata.node_type_metadata.clone(); - *node_metadata = new_metadata + + let definition_template = &definition.node_template; + node_template.display_name = definition_template.display_name.clone(); + node_template.input_metadata = definition_template.input_metadata.clone(); + node_template.output_names = definition_template.output_names.clone(); + node_template.locked = definition_template.locked; + node_template.pinned = definition_template.pinned; } - DocumentNodeImplementation::Extract => {} + NodeTemplateImplementation::Extract => {} } } diff --git a/editor/src/messages/portfolio/document/node_graph/node_graph_message.rs b/editor/src/messages/portfolio/document/node_graph/node_graph_message.rs index 011065fd78..4d9f6896d4 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_graph_message.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_graph_message.rs @@ -1,5 +1,5 @@ use super::utility_types::Direction; -use crate::messages::input_mapper::utility_types::input_keyboard::Key; +use crate::messages::input_mapper::utility_types::keyboard::Key; use crate::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::portfolio::document::utility_types::network_interface::{ImportOrExport, InputConnector, NodeTemplate, OutputConnector}; @@ -157,7 +157,7 @@ pub enum NodeGraphMessage { SetInputValue { node_id: NodeId, input_index: usize, - value: TaggedValue, + value: Box, }, SetInput { input_connector: InputConnector, diff --git a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs index 52fb20a17f..5914c311ed 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs @@ -234,8 +234,8 @@ impl<'a> MessageHandler> for NodeG x: (mid_point.x / 24.) as i32, y: (mid_point.y / 24.) as i32, }); - let node_input_connector = InputConnector::node(node_id, 0); - let node_output_connector = OutputConnector::node(node_id, 0); + let node_input_connector = InputConnector::primary_input(node_id); + let node_output_connector = OutputConnector::primary_output(node_id); responses.add(NodeGraphMessage::CreateWire { output_connector, input_connector: node_input_connector, @@ -301,7 +301,7 @@ impl<'a> MessageHandler> for NodeG // A freshly added Text node carries no font, so give it the default font (registered like the Text tool does) if node_type == DefinitionIdentifier::ProtoNode(graphene_std::text::text::IDENTIFIER) { let font_resource_id = graph_craft::application_io::resource::ResourceId::new(); - if let Some(font_input) = node_template.document_node.inputs.get_mut(graphene_std::text::text::FontInput::INDEX) { + if let Some(font_input) = node_template.input_mut(graphene_std::text::text::FontInput) { *font_input = NodeInput::value(TaggedValue::Resource(font_resource_id), false); } responses.add(DocumentMessage::Resource(ResourceMessage::AddFont { @@ -336,10 +336,10 @@ impl<'a> MessageHandler> for NodeG }; // Ensure connection is to correct input of new node. If it does not have an input then do not connect - if let Some((input_index, _)) = node_template.document_node.inputs.iter().enumerate().find(|(_, input)| input.is_exposed()) { + if let Some((input_index, _)) = node_template.inputs.iter().enumerate().find(|(_, input)| input.is_exposed()) { responses.add(NodeGraphMessage::CreateWire { output_connector: *output_connector, - input_connector: InputConnector::node(node_id, input_index), + input_connector: InputConnector::node_at_index(node_id, input_index), }); responses.add(NodeGraphMessage::RunDocumentGraph); @@ -493,7 +493,7 @@ impl<'a> MessageHandler> for NodeG *exposed = set_to_exposed; } responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, input_index), + input_connector: InputConnector::node_at_index(node_id, input_index), input: node_input, }); @@ -515,7 +515,7 @@ impl<'a> MessageHandler> for NodeG return; }; - let encapsulating_connector = InputConnector::node(*node_id, 0); + let encapsulating_connector = InputConnector::primary_input(*node_id); if !exposed { network_interface.disconnect_input(&encapsulating_connector, network_path); } @@ -530,19 +530,8 @@ impl<'a> MessageHandler> for NodeG network_interface.set_input(&encapsulating_connector, input, network_path); - let Some(outward_wires) = network_interface.outward_wires(breadcrumb_network_path) else { - log::error!("Could not get outward wires in remove_import"); - return; - }; - let Some(downstream_connections) = outward_wires.get(&OutputConnector::Import(0)).cloned() else { - log::error!("Could not get outward wires for import in remove_import"); - return; - }; - - // Disconnect all connections in the encapsulating network - for downstream_connection in &downstream_connections { - network_interface.disconnect_input(downstream_connection, breadcrumb_network_path); - } + // Disconnect all connections fed by the hidden import in the nested network + network_interface.disconnect_import_wires(0, breadcrumb_network_path); responses.add(NodeGraphMessage::UpdateImportsExports); responses.add(NodeGraphMessage::SendWires); @@ -565,18 +554,7 @@ impl<'a> MessageHandler> for NodeG // Disconnect all connections in the encapsulating network if let Some((encapsulating_node, encapsulating_path)) = breadcrumb_network_path.split_last() { - let Some(outward_wires) = network_interface.outward_wires(encapsulating_path) else { - log::error!("Could not get outward wires in remove_import"); - return; - }; - let Some(downstream_connections) = outward_wires.get(&OutputConnector::node(*encapsulating_node, 0)).cloned() else { - log::error!("Could not get outward wires for import in remove_import"); - return; - }; - - for downstream_connection in &downstream_connections { - network_interface.disconnect_input(downstream_connection, encapsulating_path); - } + network_interface.disconnect_output_wires(&OutputConnector::primary_output(*encapsulating_node), encapsulating_path); } responses.add(NodeGraphMessage::UpdateImportsExports); @@ -618,7 +596,7 @@ impl<'a> MessageHandler> for NodeG // Ensure that nodes can be grouped by checking if there is an unselected node between selected nodes for selected_node_id in &selected_node_ids { for input_index in 0..network_interface.number_of_inputs(selected_node_id, breadcrumb_network_path) { - let input_connector = InputConnector::node(*selected_node_id, input_index); + let input_connector = InputConnector::node_at_index(*selected_node_id, input_index); if let Some(upstream_deselected_node_id) = network_interface .upstream_output_connector(&input_connector, breadcrumb_network_path) .and_then(|output_connector| output_connector.node_id()) @@ -640,7 +618,7 @@ impl<'a> MessageHandler> for NodeG } for node_id in nodes_sorted_top_to_bottom { for input_index in 0..network_interface.number_of_inputs(&node_id, breadcrumb_network_path) { - let current_input_connector = InputConnector::node(node_id, input_index); + let current_input_connector = InputConnector::node_at_index(node_id, input_index); let Some(upstream_connector) = network_interface.upstream_output_connector(¤t_input_connector, breadcrumb_network_path) else { continue; }; @@ -693,7 +671,7 @@ impl<'a> MessageHandler> for NodeG return; }; let center_of_selected_nodes_grid_space = IVec2::new((center_of_selected_nodes.x / 24. + 0.5).floor() as i32, (center_of_selected_nodes.y / 24. + 0.5).floor() as i32); - default_node_template.persistent_node_metadata.node_type_metadata = NodeTypePersistentMetadata::node(center_of_selected_nodes_grid_space - IVec2::new(3, 1)); + default_node_template.node_type_metadata = NodeTypePersistentMetadata::node(center_of_selected_nodes_grid_space - IVec2::new(3, 1)); responses.add(DocumentMessage::AddTransaction); responses.add(NodeGraphMessage::InsertNode { node_id: encapsulating_node_id, @@ -737,7 +715,7 @@ impl<'a> MessageHandler> for NodeG for (input_index, output_connector) in input_connections.into_iter().enumerate() { responses.add(NodeGraphMessage::CreateWire { output_connector, - input_connector: InputConnector::node(encapsulating_node_id, input_index), + input_connector: InputConnector::node_at_index(encapsulating_node_id, input_index), }); } for (output_index, input_connectors) in output_connections.into_iter().enumerate() { @@ -1179,6 +1157,8 @@ impl<'a> MessageHandler> for NodeG data_type: self.wire_in_progress_type, thick: false, dashed: false, + is_list: false, + center_path_string: String::new(), }; responses.add(FrontendMessage::UpdateWirePathInProgress { wire_path: Some(wire_path) }); } @@ -1350,7 +1330,7 @@ impl<'a> MessageHandler> for NodeG self.shift_without_push = false; // Reset all offsets to end the rubber banding while dragging - network_interface.unload_stack_dependents_y_offset(selection_network_path); + network_interface.clear_drag_offsets(selection_network_path); let Some(selected_nodes) = network_interface.selected_nodes_in_nested_network(selection_network_path) else { log::error!("Could not get selected nodes in PointerUp"); return; @@ -1379,7 +1359,7 @@ impl<'a> MessageHandler> for NodeG .cloned() .collect::>() { - network_interface.try_set_upstream_to_chain(&InputConnector::node(layer, 1), selection_network_path); + network_interface.try_set_upstream_to_chain(&InputConnector::layer_secondary_input(layer), selection_network_path); } responses.add(NodeGraphMessage::SendGraph); @@ -1390,9 +1370,11 @@ impl<'a> MessageHandler> for NodeG // Check if a single node was dragged onto a wire and that the node was dragged onto the wire if selected_nodes.selected_nodes_ref().len() == 1 && !self.begin_dragging { let selected_node_id = selected_nodes.selected_nodes_ref()[0]; - let has_primary_output_connection = network_interface - .outward_wires(selection_network_path) - .is_some_and(|outward_wires| outward_wires.get(&OutputConnector::node(selected_node_id, 0)).is_some_and(|outward_wires| !outward_wires.is_empty())); + let has_primary_output_connection = network_interface.outward_wires(selection_network_path).is_some_and(|outward_wires| { + outward_wires + .get(&OutputConnector::primary_output(selected_node_id)) + .is_some_and(|outward_wires| !outward_wires.is_empty()) + }); if !has_primary_output_connection { let Some(network) = network_interface.nested_network(selection_network_path) else { return; @@ -1417,7 +1399,7 @@ impl<'a> MessageHandler> for NodeG // Prevent inserting on a link that is connected upstream to the selected node for upstream_node in network_interface.upstream_flow_back_from_nodes(vec![selected_node_id], selection_network_path, network_interface::FlowType::UpstreamFlow) { for input_index in 0..network_interface.number_of_inputs(&upstream_node, selection_network_path) { - wires_to_check.remove(&InputConnector::node(upstream_node, input_index)); + wires_to_check.remove(&InputConnector::node_at_index(upstream_node, input_index)); } } @@ -1431,7 +1413,7 @@ impl<'a> MessageHandler> for NodeG return None; } - let (wire, is_stack) = network_interface.vector_wire_from_input(&input, preferences.graph_wire_style, selection_network_path)?; + let (wire, _center_line, is_stack) = network_interface.vector_wire_from_input(&input, preferences.graph_wire_style, selection_network_path)?; let node_bbox = kurbo::Rect::new(node_bbox[0].x, node_bbox[0].y, node_bbox[1].x, node_bbox[1].y).to_path(DEFAULT_ACCURACY); let inside = bezpath_is_inside_bezpath(&wire, &node_bbox, None, None); @@ -1527,7 +1509,7 @@ impl<'a> MessageHandler> for NodeG } } NodeGraphMessage::ShakeNode => { - let Some(drag_start) = &self.drag_start else { + let Some((drag_start, _)) = &mut self.drag_start else { log::error!("Drag start should be initialized when shaking a node"); return; }; @@ -1545,7 +1527,11 @@ impl<'a> MessageHandler> for NodeG .transform_point2(viewport_location); // Collect the distance to move the shaken nodes after the undo - let graph_delta = IVec2::new(((point.x - drag_start.0.start_x) / 24.).round() as i32, ((point.y - drag_start.0.start_y) / 24.).round() as i32); + let graph_delta = IVec2::new(((point.x - drag_start.start_x) / 24.).round() as i32, ((point.y - drag_start.start_y) / 24.).round() as i32); + + // Keep the incremental rounding baseline in sync with the total shift reapplied below + drag_start.round_x = graph_delta.x; + drag_start.round_y = graph_delta.y; // Undo to the state of the graph before shaking responses.add(DocumentMessage::AbortTransaction); @@ -1574,7 +1560,7 @@ impl<'a> MessageHandler> for NodeG for selected_node in &all_selected_nodes { // Handle inputs of selected node for input_index in 0..network_interface.number_of_inputs(selected_node, selection_network_path) { - let input_connector = InputConnector::node(*selected_node, input_index); + let input_connector = InputConnector::node_at_index(*selected_node, input_index); // Only disconnect inputs to non selected nodes if network_interface .upstream_output_connector(&input_connector, selection_network_path) @@ -1585,13 +1571,13 @@ impl<'a> MessageHandler> for NodeG } let number_of_outputs = network_interface.number_of_outputs(selected_node, selection_network_path); - let mut first_deselected_upstream_output = network_interface.upstream_output_connector(&InputConnector::node(*selected_node, 0), selection_network_path); + let mut first_deselected_upstream_output = network_interface.upstream_output_connector(&InputConnector::primary_input(*selected_node), selection_network_path); while let Some(OutputConnector::Node { node_id, .. }) = &first_deselected_upstream_output { if !all_selected_nodes.contains(node_id) { break; } - first_deselected_upstream_output = network_interface.upstream_output_connector(&InputConnector::node(*node_id, 0), selection_network_path); + first_deselected_upstream_output = network_interface.upstream_output_connector(&InputConnector::primary_input(*node_id), selection_network_path); } let Some(outward_wires) = network_interface.outward_wires(selection_network_path) else { @@ -1614,7 +1600,7 @@ impl<'a> MessageHandler> for NodeG // Handle reconnection // Find first non selected upstream node by primary flow if let Some(first_deselected_upstream_output) = first_deselected_upstream_output { - let Some(downstream_connections_to_first_output) = outward_wires.get(&OutputConnector::node(*selected_node, 0)).cloned() else { + let Some(downstream_connections_to_first_output) = outward_wires.get(&OutputConnector::primary_output(*selected_node)).cloned() else { log::error!("Could not get downstream_connections_to_first_output in shake node"); return; }; @@ -1726,7 +1712,13 @@ impl<'a> MessageHandler> for NodeG continue; }; - if node_bbox[1].x >= document_bbox[0].x && node_bbox[0].x <= document_bbox[1].x && node_bbox[1].y >= document_bbox[0].y && node_bbox[0].y <= document_bbox[1].y { + // Expand the cull box by a grid cell so a node stays rendered until its connectors, which reach beyond its bounding box, also leave the viewport + let cull_margin = 24.; + if node_bbox[1].x + cull_margin >= document_bbox[0].x + && node_bbox[0].x - cull_margin <= document_bbox[1].x + && node_bbox[1].y + cull_margin >= document_bbox[0].y + && node_bbox[0].y - cull_margin <= document_bbox[1].y + { nodes.push(*node_id); } for error in &network_interface.resolved_types.node_graph_errors { @@ -1742,6 +1734,7 @@ impl<'a> MessageHandler> for NodeG responses.add(NodeGraphMessage::UpdateLayerPanel); responses.add(DocumentMessage::DocumentStructureChanged); responses.add(PropertiesPanelMessage::Refresh); + responses.add(EventMessage::GraphChanged); if breadcrumb_network_path == selection_network_path && graph_view_overlay_open { let nodes = self.collect_nodes(network_interface, breadcrumb_network_path); self.frontend_nodes = nodes.iter().map(|node| node.id).collect(); @@ -1769,16 +1762,16 @@ impl<'a> MessageHandler> for NodeG let is_text_node = reference.as_ref().is_some_and(|r| *r == DefinitionIdentifier::ProtoNode(graphene_std::text::text::IDENTIFIER)); let is_stroke_node = reference.as_ref().is_some_and(|r| *r == DefinitionIdentifier::ProtoNode(graphene_std::vector::stroke::IDENTIFIER)); let is_fill_node = reference.as_ref().is_some_and(|r| *r == DefinitionIdentifier::ProtoNode(graphene_std::vector::fill::IDENTIFIER)); - let is_fill_input = is_fill_node && input_index == graphene_std::vector::fill::FillInput::INDEX; + let is_fill_input = is_fill_node && input_index == graphene_std::vector::fill::PaintInput::INDEX; let is_shape_generator_node = reference.as_ref().is_some_and(|r| { [regular_polygon::IDENTIFIER, star::IDENTIFIER, arc::IDENTIFIER, spiral::IDENTIFIER, grid::IDENTIFIER, arrow::IDENTIFIER] .into_iter() .any(|id| *r == DefinitionIdentifier::ProtoNode(id)) }); - let input = NodeInput::value(value, false); + let input = NodeInput::value(*value, false); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, input_index), + input_connector: InputConnector::node_at_index(node_id, input_index), input, }); responses.add(PropertiesPanelMessage::Refresh); @@ -1804,7 +1797,7 @@ impl<'a> MessageHandler> for NodeG network_interface.shift_selected_nodes(direction, self.shift_without_push, selection_network_path); if !rubber_band { - network_interface.unload_stack_dependents_y_offset(selection_network_path); + network_interface.clear_drag_offsets(selection_network_path); } if graph_view_overlay_open { @@ -2167,7 +2160,37 @@ impl<'a> MessageHandler> for NodeG responses.add(NodeGraphMessage::SendGraph); } NodeGraphMessage::UpdateTypes { resolved_types, node_graph_errors } => { + // Hidden passthrough nodes let a wire borrow its color and rank from an upstream node, so any type change can restyle wires whose own node is unchanged. + // Compare each displayed wire's style (color, rank) across the update and unload only those that changed, so value-only recompiles keep their built wire paths. + let types_changed = !resolved_types.add.is_empty() || !resolved_types.remove.is_empty(); + let wire_style = |network_interface: &mut NodeNetworkInterface, input: &InputConnector| { + network_interface.upstream_output_connector(input, breadcrumb_network_path).map(|output| { + let output_type = network_interface.output_type(&output, breadcrumb_network_path); + (output_type.displayed_type(), output_type.is_list()) + }) + }; + let styles_before = types_changed.then(|| { + network_interface + .node_graph_input_connectors(breadcrumb_network_path) + .into_iter() + .map(|input| { + let style = wire_style(network_interface, &input); + (input, style) + }) + .collect::>() + }); + network_interface.resolved_types.update(resolved_types, node_graph_errors); + + if let Some(styles_before) = styles_before { + for (input, style_before) in styles_before { + if wire_style(network_interface, &input) != style_before { + network_interface.unload_wire(&input, breadcrumb_network_path); + } + } + } + + responses.add(NodeGraphMessage::SendGraph); } NodeGraphMessage::UpdateActionButtons => { if selection_network_path == breadcrumb_network_path { @@ -2406,7 +2429,7 @@ impl NodeGraphMessageHandler { if subgraph_path_names_length >= 2 { widgets.extend([ Separator::new(SeparatorStyle::Unrelated).widget_instance(), - BreadcrumbTrailButtons::new(subgraph_path_names) + BreadcrumbTrailButtons::new(subgraph_path_names.iter().map(|name| truncate_breadcrumb_label(name)).collect()) .on_update(move |index| { DocumentMessage::ExitNestedNetwork { steps_back: subgraph_path_names_length - (*index as usize) - 1, @@ -2591,7 +2614,7 @@ impl NodeGraphMessageHandler { .popover_layout({ let compatible_type = context .network_interface - .upstream_output_connector(&InputConnector::node(layer, 1), &[]) + .upstream_output_connector(&InputConnector::layer_secondary_input(layer), &[]) .and_then(|upstream_output| context.network_interface.output_type(&upstream_output, &[]).add_node_string()); let mut node_chooser = NodeCatalog::new(); @@ -2688,7 +2711,7 @@ impl NodeGraphMessageHandler { }; let mut nodes = Vec::new(); for (node_id, visible) in network.nodes.iter().map(|(node_id, node)| (*node_id, node.visible)).collect::>() { - let primary_input_connector = InputConnector::node(node_id, 0); + let primary_input_connector = InputConnector::primary_input(node_id); let primary_input = if network_interface .input_from_connector(&primary_input_connector, breadcrumb_network_path) @@ -2699,10 +2722,10 @@ impl NodeGraphMessageHandler { None }; let exposed_inputs = (1..network_interface.number_of_inputs(&node_id, breadcrumb_network_path)) - .filter_map(|input_index| network_interface.frontend_input_from_connector(&InputConnector::node(node_id, input_index), breadcrumb_network_path)) + .filter_map(|input_index| network_interface.frontend_input_from_connector(&InputConnector::node_at_index(node_id, input_index), breadcrumb_network_path)) .collect(); - let primary_output = network_interface.frontend_output_from_connector(&OutputConnector::node(node_id, 0), breadcrumb_network_path); + let primary_output = network_interface.frontend_output_from_connector(&OutputConnector::primary_output(node_id), breadcrumb_network_path); let exposed_outputs = (1..network_interface.number_of_outputs(&node_id, breadcrumb_network_path)) .filter_map(|output_index| network_interface.frontend_output_from_connector(&OutputConnector::node(node_id, output_index), breadcrumb_network_path)) @@ -2830,7 +2853,7 @@ impl NodeGraphMessageHandler { })) ); - let clippable = layer.can_be_clipped(network_interface.document_metadata()); + let clippable = layer.can_be_clipped(network_interface.document_metadata()) && network_interface.layer_hosts_blending_nodes(&node_id, &[]); let data = LayerPanelEntry { id: node_id, diff --git a/editor/src/messages/portfolio/document/node_graph/node_properties.rs b/editor/src/messages/portfolio/document/node_graph/node_properties.rs index 59d101120f..d31fee8b35 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_properties.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_properties.rs @@ -16,9 +16,7 @@ use graph_craft::application_io::resource::ResourceId; use graph_craft::document::value::TaggedValue; use graph_craft::document::{DocumentNode, DocumentNodeImplementation, NodeId, NodeInput}; use graph_craft::{Type, concrete}; -use graphene_std::NodeInputDecleration; use graphene_std::animation::RealTimeMode; -use graphene_std::brush::brush_stroke::BrushStroke; use graphene_std::color::SRGBA8; use graphene_std::extract_xy::XY; use graphene_std::list::List; @@ -31,26 +29,48 @@ use graphene_std::text::{Font, TextAlign}; use graphene_std::text_nodes::StringCapitalization; use graphene_std::transform::{Footprint, ReferencePoint, ScaleType, Transform}; use graphene_std::vector::misc::BooleanOperation; -use graphene_std::vector::misc::{ArcType, CentroidType, ExtrudeJoiningAlgorithm, GridType, InterpolationDistribution, MergeByDistanceAlgorithm, PointSpacingType, RowsOrColumns, SpiralType}; +use graphene_std::vector::misc::{ + ArcType, BoxCorners, CentroidType, ExtrudeJoiningAlgorithm, GridType, InterpolationDistribution, MergeByDistanceAlgorithm, PointSpacingType, RowsOrColumns, SpiralType, +}; use graphene_std::vector::style::{ - FillChoice, FillChoiceUI, GradientSpreadMethod, GradientStops, GradientStopsUI, GradientType, PaintOrder, StrokeAlign, StrokeCap, StrokeJoin, build_transform_with_y_preservation, + FillChoice, Gradient, GradientForm, GradientHueDirection, GradientInterpolation, GradientRamp, GradientSettings, GradientSpace, GradientSpread, GradientStops, PaintOrder, StrokeAlign, StrokeCap, + StrokeJoin, build_transform_with_y_preservation, }; use graphene_std::vector::{QRCodeErrorCorrectionLevel, VectorModification}; +use graphene_std::{NodeParameter, ParameterRef}; pub(crate) fn string_properties(text: &str) -> Vec { let widget = TextLabel::new(text).widget_instance(); vec![LayoutGroup::row(vec![widget])] } -fn optionally_update_value(value: impl Fn(&T) -> Option + 'static + Send + Sync, node_id: NodeId, input_index: usize) -> impl Fn(&T) -> Message + 'static + Send + Sync { +fn optionally_update_value( + value: impl Fn(&T) -> Option + 'static + Send + Sync, + node_id: NodeId, + parameter: impl Into, +) -> impl Fn(&T) -> Message + 'static + Send + Sync { + optionally_update_value_at_index(value, node_id, parameter.into().input_index) +} + +fn optionally_update_value_at_index(value: impl Fn(&T) -> Option + 'static + Send + Sync, node_id: NodeId, input_index: usize) -> impl Fn(&T) -> Message + 'static + Send + Sync { move |input_value: &T| match value(input_value) { - Some(value) => NodeGraphMessage::SetInputValue { node_id, input_index, value }.into(), + Some(value) => NodeGraphMessage::SetInputValue { + node_id, + input_index, + value: value.into(), + } + .into(), None => Message::NoOp, } } -pub fn update_value(value: impl Fn(&T) -> TaggedValue + 'static + Send + Sync, node_id: NodeId, input_index: usize) -> impl Fn(&T) -> Message + 'static + Send + Sync { - optionally_update_value(move |v| Some(value(v)), node_id, input_index) +pub fn update_value(value: impl Fn(&T) -> TaggedValue + 'static + Send + Sync, node_id: NodeId, parameter: impl Into) -> impl Fn(&T) -> Message + 'static + Send + Sync { + optionally_update_value_at_index(move |v| Some(value(v)), node_id, parameter.into().input_index) +} + +/// Like [`update_value`], for callers that receive the input index dynamically (e.g. widget overrides). +pub fn update_value_at_index(value: impl Fn(&T) -> TaggedValue + 'static + Send + Sync, node_id: NodeId, input_index: usize) -> impl Fn(&T) -> Message + 'static + Send + Sync { + optionally_update_value_at_index(move |v| Some(value(v)), node_id, input_index) } pub fn commit_value(_: &T) -> Message { @@ -68,7 +88,7 @@ pub fn expose_widget(node_id: NodeId, index: usize, data_type: FrontendGraphData }) .on_update(move |_parameter| Message::Batched { messages: Box::new([NodeGraphMessage::ExposeInput { - input_connector: InputConnector::node(node_id, index), + input_connector: InputConnector::node_at_index(node_id, index), set_to_exposed: !exposed, start_transaction: true, } @@ -110,43 +130,39 @@ pub fn jump_to_source_widget(input: &NodeInput, network_interface: &NodeNetworkI } } -pub fn start_widgets(parameter_widgets_info: ParameterWidgetsInfo) -> Vec { - let ParameterWidgetsInfo { - document_node, - node_id, - index, - name, - description, - input_type, - blank_assist, - exposable, - network_interface, - selection_network_path, - .. - } = parameter_widgets_info; - - let Some(document_node) = document_node else { +pub fn start_widgets(parameter_widgets_info: &ParameterWidgetsInfo) -> Vec { + if parameter_widgets_info.document_node.is_none() { log::warn!("A widget failed to be built because its document node is invalid."); return vec![]; - }; + } - let Some(input) = document_node.inputs.get(index) else { + let Some(input) = parameter_widgets_info.input() else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; - let mut widgets = Vec::with_capacity(6); - if exposable { - widgets.push(expose_widget(node_id, index, input_type, input.is_exposed())); - } - widgets.push(TextLabel::new(name).tooltip_description(description).widget_instance()); - if blank_assist || input.is_exposed() { + let mut widgets = Vec::with_capacity(6); + if parameter_widgets_info.exposable { + widgets.push(expose_widget( + parameter_widgets_info.node_id, + parameter_widgets_info.index, + parameter_widgets_info.input_type, + input.is_exposed(), + )); + } + widgets.push( + TextLabel::new(parameter_widgets_info.name.clone()) + .tooltip_description(parameter_widgets_info.description.clone()) + .widget_instance(), + ); + + if parameter_widgets_info.blank_assist || input.is_exposed() { add_blank_assist(&mut widgets); } if input.is_exposed() { widgets.push(Separator::new(SeparatorStyle::Unrelated).widget_instance()); - widgets.push(jump_to_source_widget(input, network_interface, selection_network_path)); + widgets.push(jump_to_source_widget(input, parameter_widgets_info.network_interface, parameter_widgets_info.selection_network_path)); } widgets @@ -210,7 +226,25 @@ pub(crate) fn property_from_type( .range_max(Some(extent_max).filter(|bound| bound.is_finite())) }; - let default_info = ParameterWidgetsInfo::new(node_id, index, true, context); + let default_info = ParameterWidgetsInfo::at_index(node_id, index, true, context); + + // A type with no widget can only be supplied through the graph, labeled with a placeholder row + let unsupported_widgets = |default_info: ParameterWidgetsInfo, type_label: String| { + let is_exposed = default_info.is_exposed(); + + let mut widgets = start_widgets(&default_info); + if !is_exposed { + widgets.extend_from_slice(&[ + Separator::new(SeparatorStyle::Unrelated).widget_instance(), + TextLabel::new("-") + .tooltip_label(type_label) + .tooltip_description("This data can only be supplied through the node graph because no widget exists for its type.") + .widget_instance(), + ]); + } + + vec![LayoutGroup::from(widgets)] + }; let mut extra_widgets = vec![]; let widgets = match ty { @@ -233,92 +267,78 @@ pub(crate) fn property_from_type( // For all other types, use TypeId-based matching _ => { use std::any::TypeId; + + // The compiler peels a rank-0 `Item` cell to its element before this arm runs, so widgets dispatch on the bare element `T` + fn id_is(id: TypeId) -> bool { + id == TypeId::of::() + } + match concrete_type.id { // =============== // PRIMITIVE TYPES // =============== - Some(x) if x == TypeId::of::() || x == TypeId::of::() => number_widget(default_info, bounded(number_input, f64::NEG_INFINITY, f64::INFINITY)).into(), - Some(x) if x == TypeId::of::() => number_widget(default_info, bounded(number_input.int(), 0., f64::from(u32::MAX))).into(), - Some(x) if x == TypeId::of::() => number_widget(default_info, bounded(number_input.int(), 0., f64::INFINITY)).into(), - Some(x) if x == TypeId::of::() => bool_widget(default_info, CheckboxInput::default()).into(), - Some(x) if x == TypeId::of::() => text_widget(default_info).into(), - Some(x) if x == TypeId::of::() => vec2_widget(default_info, "X", "Y", "", None, false), - Some(x) if x == TypeId::of::() => transform_widget(default_info, &mut extra_widgets), - // ========== - // LIST TYPES - // ========== - Some(x) if x == TypeId::of::>() => array_of_number_widget(default_info, TextInput::default()).into(), - Some(x) if x == TypeId::of::>() => color_widget(default_info, ColorInput::default().allow_none(true)), - Some(x) if x == TypeId::of::>() => color_widget(default_info, ColorInput::default().allow_none(false)), - Some(x) if x == TypeId::of::>() => brush_strokes_widget(default_info).into(), - // Leveled wires type by their element; each element keeps its list form's widget. - Some(x) if x == TypeId::of::() => color_widget(default_info, ColorInput::default().allow_none(true)), - Some(x) if x == TypeId::of::() => color_widget(default_info, ColorInput::default().allow_none(false)), - Some(x) if x == TypeId::of::() => brush_strokes_widget(default_info).into(), + Some(x) if id_is::(x) || id_is::(x) => number_widget(default_info, bounded(number_input, f64::NEG_INFINITY, f64::INFINITY)).into(), + Some(x) if id_is::(x) => number_widget(default_info, bounded(number_input.int(), 0., f64::from(u32::MAX))).into(), + Some(x) if id_is::(x) => number_widget(default_info, bounded(number_input.int(), 0., f64::INFINITY)).into(), + Some(x) if id_is::(x) => bool_widget(default_info, CheckboxInput::default()).into(), + Some(x) if id_is::(x) => text_widget(default_info).into(), + Some(x) if id_is::(x) => vec2_widget(default_info, "X", "Y", "", None, false), + Some(x) if id_is::(x) => transform_widget(default_info, &mut extra_widgets), + // A leveled f64 arrives peeled to its element, so only a genuinely list-typed input reaches this arm + Some(x) if id_is::>(x) => array_of_number_widget(default_info, TextInput::default()).into(), + Some(x) if id_is::(x) => color_widget(default_info, ColorInput::default().allow_none(false)), + Some(x) if id_is::(x) => color_widget(default_info, ColorInput::default().allow_none(false)), // ============ // STRUCT TYPES // ============ - Some(x) if x == TypeId::of::() => font_widget(default_info), - Some(x) if x == TypeId::of::() => footprint_widget(default_info, &mut extra_widgets), - Some(x) if x == TypeId::of::>() => vector_modification_widget(default_info).into(), - Some(x) if x == TypeId::of::>() => image_data_widget(default_info).into(), + Some(x) if id_is::(x) => font_widget(default_info), + Some(x) if id_is::(x) => footprint_widget(default_info, &mut extra_widgets), + Some(x) if id_is::>(x) => vector_modification_widget(default_info).into(), + Some(x) if id_is::>(x) => image_data_widget(default_info).into(), // =============================== // MANUALLY IMPLEMENTED ENUM TYPES // =============================== - Some(x) if x == TypeId::of::() => reference_point_widget(default_info, false).into(), - Some(x) if x == TypeId::of::() => blend_mode_widget(default_info), + Some(x) if id_is::(x) => reference_point_widget(default_info, false).into(), + Some(x) if id_is::(x) => blend_mode_widget(default_info), // ========================= // AUTO-GENERATED ENUM TYPES // ========================= - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).disabled(false).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).disabled(false).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).disabled(false).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).disabled(false).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).disabled(false).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), - Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).disabled(false).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).disabled(false).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).disabled(false).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).disabled(false).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).disabled(false).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), + Some(x) if id_is::(x) => enum_choice::().for_socket(default_info).property_row(), // ===== // OTHER // ===== - _ => { - let is_exposed = default_info.is_exposed(); - - let mut widgets = start_widgets(default_info); - - if !is_exposed { - widgets.extend_from_slice(&[ - Separator::new(SeparatorStyle::Unrelated).widget_instance(), - TextLabel::new("-") - .tooltip_label(concrete_type.to_string()) - .tooltip_description("This data can only be supplied through the node graph because no widget exists for its type.") - .widget_instance(), - ]); - } - return Err(vec![widgets.into()]); - } + _ => return Err(unsupported_widgets(default_info, concrete_type.to_string())), } } } @@ -335,12 +355,9 @@ pub(crate) fn property_from_type( } pub fn text_widget(parameter_widgets_info: ParameterWidgetsInfo) -> Vec { - let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; + let mut widgets = start_widgets(¶meter_widgets_info); - let mut widgets = start_widgets(parameter_widgets_info); - - let Some(document_node) = document_node else { return Vec::new() }; - let Some(input) = document_node.inputs.get(index) else { + let Some(input) = parameter_widgets_info.input() else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; @@ -348,7 +365,7 @@ pub fn text_widget(parameter_widgets_info: ParameterWidgetsInfo) -> Vec Vec Vec { - let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; + let mut widgets = start_widgets(¶meter_widgets_info); - let mut widgets = start_widgets(parameter_widgets_info); - - let Some(document_node) = document_node else { return Vec::new() }; - let Some(input) = document_node.inputs.get(index) else { + let Some(input) = parameter_widgets_info.input() else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; @@ -370,7 +384,7 @@ pub fn text_area_widget(parameter_widgets_info: ParameterWidgetsInfo) -> Vec Vec Vec { - let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; + let mut widgets = start_widgets(¶meter_widgets_info); - let mut widgets = start_widgets(parameter_widgets_info); - - let Some(document_node) = document_node else { return Vec::new() }; - let Some(input) = document_node.inputs.get(index) else { + let Some(input) = parameter_widgets_info.input() else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; @@ -393,7 +404,7 @@ pub fn bool_widget(parameter_widgets_info: ParameterWidgetsInfo, checkbox_input: Separator::new(SeparatorStyle::Unrelated).widget_instance(), checkbox_input .checked(x) - .on_update(update_value(|x: &CheckboxInput| TaggedValue::Bool(x.checked), node_id, index)) + .on_update(parameter_widgets_info.update_value(|x: &CheckboxInput| TaggedValue::Bool(x.checked))) .on_commit(commit_value) .widget_instance(), ]) @@ -402,12 +413,9 @@ pub fn bool_widget(parameter_widgets_info: ParameterWidgetsInfo, checkbox_input: } pub fn reference_point_widget(parameter_widgets_info: ParameterWidgetsInfo, disabled: bool) -> Vec { - let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; + let mut widgets = start_widgets(¶meter_widgets_info); - let mut widgets = start_widgets(parameter_widgets_info); - - let Some(document_node) = document_node else { return Vec::new() }; - let Some(input) = document_node.inputs.get(index) else { + let Some(input) = parameter_widgets_info.input() else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; @@ -415,16 +423,12 @@ pub fn reference_point_widget(parameter_widgets_info: ParameterWidgetsInfo, disa widgets.extend_from_slice(&[ Separator::new(SeparatorStyle::Unrelated).widget_instance(), CheckboxInput::new(reference_point != ReferencePoint::None) - .on_update(update_value( - move |x: &CheckboxInput| TaggedValue::ReferencePoint(if x.checked { ReferencePoint::Center } else { ReferencePoint::None }), - node_id, - index, - )) + .on_update(parameter_widgets_info.update_value(move |x: &CheckboxInput| TaggedValue::ReferencePoint(if x.checked { ReferencePoint::Center } else { ReferencePoint::None }))) .disabled(disabled) .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), ReferencePointInput::new(reference_point) - .on_update(update_value(move |x: &ReferencePointInput| TaggedValue::ReferencePoint(x.value), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |x: &ReferencePointInput| TaggedValue::ReferencePoint(x.value))) .disabled(disabled) .widget_instance(), ]) @@ -435,7 +439,7 @@ pub fn reference_point_widget(parameter_widgets_info: ParameterWidgetsInfo, disa pub fn vector_modification_widget(parameter_widgets_info: ParameterWidgetsInfo) -> Vec { let ParameterWidgetsInfo { document_node, node_id: _, index, .. } = parameter_widgets_info; - let mut widgets = start_widgets(parameter_widgets_info); + let mut widgets = start_widgets(¶meter_widgets_info); let Some(document_node) = document_node else { return widgets }; let Some(input) = document_node.inputs.get(index) else { return widgets }; @@ -453,37 +457,10 @@ pub fn vector_modification_widget(parameter_widgets_info: ParameterWidgetsInfo) widgets } -pub fn brush_strokes_widget(parameter_widgets_info: ParameterWidgetsInfo) -> Vec { - let ParameterWidgetsInfo { document_node, node_id: _, index, .. } = parameter_widgets_info; - - let mut widgets = start_widgets(parameter_widgets_info); - - let Some(document_node) = document_node else { return widgets }; - let Some(input) = document_node.inputs.get(index) else { return widgets }; - - if let Some(TaggedValue::BrushStrokes(strokes)) = input.as_non_exposed_value() { - let stroke_count = strokes.len(); - let sample_count: usize = strokes.iter().map(|s| s.trace.len()).sum(); - let label = if stroke_count == 0 { - "Empty".to_string() - } else { - format!( - "{stroke_count} {} / {sample_count} {}", - if stroke_count == 1 { "Stroke" } else { "Strokes" }, - if sample_count == 1 { "Sample" } else { "Samples" } - ) - }; - - widgets.extend_from_slice(&[Separator::new(SeparatorStyle::Unrelated).widget_instance(), TextLabel::new(label).widget_instance()]); - } - - widgets -} - pub fn image_data_widget(parameter_widgets_info: ParameterWidgetsInfo) -> Vec { let ParameterWidgetsInfo { document_node, node_id: _, index, .. } = parameter_widgets_info; - let mut widgets = start_widgets(parameter_widgets_info); + let mut widgets = start_widgets(¶meter_widgets_info); let Some(document_node) = document_node else { return widgets }; let Some(input) = document_node.inputs.get(index) else { return widgets }; @@ -500,7 +477,7 @@ pub fn image_data_widget(parameter_widgets_info: ParameterWidgetsInfo) -> Vec) -> LayoutGroup { let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; - let mut location_widgets = start_widgets(parameter_widgets_info); + let mut location_widgets = start_widgets(¶meter_widgets_info); location_widgets.push(Separator::new(SeparatorStyle::Unrelated).widget_instance()); let mut scale_widgets = vec![TextLabel::new("").widget_instance()]; @@ -526,48 +503,40 @@ pub fn footprint_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg NumberInput::new(Some(top_left.x)) .label("X") .unit(" px") - .on_update(update_value( - move |x: &NumberInput| { - let (offset, scale) = { - let diff = DVec2::new(top_left.x - x.value.unwrap_or_default(), 0.); - (top_left - diff, bounds) - }; + .on_update(parameter_widgets_info.update_value(move |x: &NumberInput| { + let (offset, scale) = { + let diff = DVec2::new(top_left.x - x.value.unwrap_or_default(), 0.); + (top_left - diff, bounds) + }; - let footprint = Footprint { - transform: DAffine2::from_scale_angle_translation(scale, 0., offset), - resolution: (oversample * scale).as_uvec2(), - ..footprint - }; + let footprint = Footprint { + transform: DAffine2::from_scale_angle_translation(scale, 0., offset), + resolution: (oversample * scale).as_uvec2(), + ..footprint + }; - TaggedValue::Footprint(footprint) - }, - node_id, - index, - )) + TaggedValue::Footprint(footprint) + })) .on_commit(commit_value) .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), NumberInput::new(Some(top_left.y)) .label("Y") .unit(" px") - .on_update(update_value( - move |x: &NumberInput| { - let (offset, scale) = { - let diff = DVec2::new(0., top_left.y - x.value.unwrap_or_default()); - (top_left - diff, bounds) - }; + .on_update(parameter_widgets_info.update_value(move |x: &NumberInput| { + let (offset, scale) = { + let diff = DVec2::new(0., top_left.y - x.value.unwrap_or_default()); + (top_left - diff, bounds) + }; - let footprint = Footprint { - transform: DAffine2::from_scale_angle_translation(scale, 0., offset), - resolution: (oversample * scale).as_uvec2(), - ..footprint - }; + let footprint = Footprint { + transform: DAffine2::from_scale_angle_translation(scale, 0., offset), + resolution: (oversample * scale).as_uvec2(), + ..footprint + }; - TaggedValue::Footprint(footprint) - }, - node_id, - index, - )) + TaggedValue::Footprint(footprint) + })) .on_commit(commit_value) .widget_instance(), ]); @@ -576,7 +545,7 @@ pub fn footprint_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg NumberInput::new(Some(bounds.x)) .label("W") .unit(" px") - .on_update(update_value( + .on_update(update_value_at_index( move |x: &NumberInput| { let (offset, scale) = (top_left, DVec2::new(x.value.unwrap_or_default(), bounds.y)); @@ -597,7 +566,7 @@ pub fn footprint_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg NumberInput::new(Some(bounds.y)) .label("H") .unit(" px") - .on_update(update_value( + .on_update(update_value_at_index( move |x: &NumberInput| { let (offset, scale) = (top_left, DVec2::new(bounds.x, x.value.unwrap_or_default())); @@ -624,16 +593,12 @@ pub fn footprint_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg .range_min(Some(1.)) .range_max(Some(100.)) .unit("%") - .on_update(update_value( - move |x: &NumberInput| { - let resolution = (bounds * x.value.unwrap_or(100.) / 100.).as_uvec2().max((1, 1).into()).min((4000, 4000).into()); + .on_update(parameter_widgets_info.update_value(move |x: &NumberInput| { + let resolution = (bounds * x.value.unwrap_or(100.) / 100.).as_uvec2().max((1, 1).into()).min((4000, 4000).into()); - let footprint = Footprint { resolution, ..footprint }; - TaggedValue::Footprint(footprint) - }, - node_id, - index, - )) + let footprint = Footprint { resolution, ..footprint }; + TaggedValue::Footprint(footprint) + })) .on_commit(commit_value) .widget_instance(), ); @@ -648,7 +613,7 @@ pub fn footprint_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg pub fn transform_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widgets: &mut Vec) -> LayoutGroup { let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; - let mut location_widgets = start_widgets(parameter_widgets_info); + let mut location_widgets = start_widgets(¶meter_widgets_info); location_widgets.push(Separator::new(SeparatorStyle::Unrelated).widget_instance()); let mut rotation_widgets = vec![TextLabel::new("").widget_instance()]; @@ -674,30 +639,22 @@ pub fn transform_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg NumberInput::new(Some(translation.x)) .label("X") .unit(" px") - .on_update(update_value( - move |x: &NumberInput| { - let mut transform = transform; - transform.translation.x = x.value.unwrap_or(transform.translation.x); - TaggedValue::DAffine2(transform) - }, - node_id, - index, - )) + .on_update(parameter_widgets_info.update_value(move |x: &NumberInput| { + let mut transform = transform; + transform.translation.x = x.value.unwrap_or(transform.translation.x); + TaggedValue::DAffine2(transform) + })) .on_commit(commit_value) .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), NumberInput::new(Some(translation.y)) .label("Y") .unit(" px") - .on_update(update_value( - move |y: &NumberInput| { - let mut transform = transform; - transform.translation.y = y.value.unwrap_or(transform.translation.y); - TaggedValue::DAffine2(transform) - }, - node_id, - index, - )) + .on_update(parameter_widgets_info.update_value(move |y: &NumberInput| { + let mut transform = transform; + transform.translation.y = y.value.unwrap_or(transform.translation.y); + TaggedValue::DAffine2(transform) + })) .on_commit(commit_value) .widget_instance(), ]); @@ -707,7 +664,7 @@ pub fn transform_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg .mode(NumberInputMode::Range) .range_min(Some(-180.)) .range_max(Some(180.)) - .on_update(update_value( + .on_update(update_value_at_index( move |r: &NumberInput| { let transform = DAffine2::from_scale_angle_translation(scale, r.value.map(|r| r.to_radians()).unwrap_or(rotation), translation) * skew_matrix; TaggedValue::DAffine2(transform) @@ -722,7 +679,7 @@ pub fn transform_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg NumberInput::new(Some(scale.x)) .label("W") .unit("x") - .on_update(update_value( + .on_update(update_value_at_index( move |w: &NumberInput| { let transform = DAffine2::from_scale_angle_translation(DVec2::new(w.value.unwrap_or(scale.x), scale.y), rotation, translation) * skew_matrix; TaggedValue::DAffine2(transform) @@ -736,7 +693,7 @@ pub fn transform_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg NumberInput::new(Some(scale.y)) .label("H") .unit("x") - .on_update(update_value( + .on_update(update_value_at_index( move |h: &NumberInput| { let transform = DAffine2::from_scale_angle_translation(DVec2::new(scale.x, h.value.unwrap_or(scale.y)), rotation, translation) * skew_matrix; TaggedValue::DAffine2(transform) @@ -762,12 +719,9 @@ pub fn transform_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg } pub fn vec2_widget(parameter_widgets_info: ParameterWidgetsInfo, x: &str, y: &str, unit: &str, min: Option, is_integer: bool) -> LayoutGroup { - let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; + let mut widgets = start_widgets(¶meter_widgets_info); - let mut widgets = start_widgets(parameter_widgets_info); - - let Some(document_node) = document_node else { return LayoutGroup::default() }; - let Some(input) = document_node.inputs.get(index) else { + let Some(input) = parameter_widgets_info.input() else { log::warn!("A widget failed to be built because its node's input index is invalid."); return LayoutGroup::row(vec![]); }; @@ -781,7 +735,7 @@ pub fn vec2_widget(parameter_widgets_info: ParameterWidgetsInfo, x: &str, y: &st .min(min.unwrap_or(-((1_u64 << f64::MANTISSA_DIGITS) as f64))) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) .is_integer(is_integer) - .on_update(update_value(move |input: &NumberInput| TaggedValue::DVec2(DVec2::new(input.value.unwrap(), dvec2.y)), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |input: &NumberInput| TaggedValue::DVec2(DVec2::new(input.value.unwrap(), dvec2.y)))) .on_commit(commit_value) .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), @@ -791,7 +745,7 @@ pub fn vec2_widget(parameter_widgets_info: ParameterWidgetsInfo, x: &str, y: &st .min(min.unwrap_or(-((1_u64 << f64::MANTISSA_DIGITS) as f64))) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) .is_integer(is_integer) - .on_update(update_value(move |input: &NumberInput| TaggedValue::DVec2(DVec2::new(dvec2.x, input.value.unwrap())), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |input: &NumberInput| TaggedValue::DVec2(DVec2::new(dvec2.x, input.value.unwrap())))) .on_commit(commit_value) .widget_instance(), ]); @@ -805,7 +759,7 @@ pub fn vec2_widget(parameter_widgets_info: ParameterWidgetsInfo, x: &str, y: &st .min(min.unwrap_or(-((1_u64 << f64::MANTISSA_DIGITS) as f64))) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) .is_integer(is_integer) - .on_update(update_value(move |input: &NumberInput| TaggedValue::DVec2(DVec2::new(input.value.unwrap(), value)), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |input: &NumberInput| TaggedValue::DVec2(DVec2::new(input.value.unwrap(), value)))) .on_commit(commit_value) .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), @@ -815,7 +769,7 @@ pub fn vec2_widget(parameter_widgets_info: ParameterWidgetsInfo, x: &str, y: &st .min(min.unwrap_or(-((1_u64 << f64::MANTISSA_DIGITS) as f64))) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) .is_integer(is_integer) - .on_update(update_value(move |input: &NumberInput| TaggedValue::DVec2(DVec2::new(value, input.value.unwrap())), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |input: &NumberInput| TaggedValue::DVec2(DVec2::new(value, input.value.unwrap())))) .on_commit(commit_value) .widget_instance(), ]); @@ -827,9 +781,7 @@ pub fn vec2_widget(parameter_widgets_info: ParameterWidgetsInfo, x: &str, y: &st } pub fn array_of_number_widget(parameter_widgets_info: ParameterWidgetsInfo, text_input: TextInput) -> Vec { - let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; - - let mut widgets = start_widgets(parameter_widgets_info); + let mut widgets = start_widgets(¶meter_widgets_info); let from_string = |string: &str| { string @@ -841,8 +793,7 @@ pub fn array_of_number_widget(parameter_widgets_info: ParameterWidgetsInfo, text .map(TaggedValue::F64Array) }; - let Some(document_node) = document_node else { return Vec::new() }; - let Some(input) = document_node.inputs.get(index) else { + let Some(input) = parameter_widgets_info.input() else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; @@ -851,7 +802,26 @@ pub fn array_of_number_widget(parameter_widgets_info: ParameterWidgetsInfo, text Separator::new(SeparatorStyle::Unrelated).widget_instance(), text_input .value(values.iter().map(|v| v.to_string()).collect::>().join(", ")) - .on_update(optionally_update_value(move |x: &TextInput| from_string(&x.value), node_id, index)) + .on_update(parameter_widgets_info.optionally_update_value(move |x: &TextInput| from_string(&x.value))) + .widget_instance(), + ]) + } + widgets +} + +pub fn dash_pattern_widget(parameter_widgets_info: ParameterWidgetsInfo, text_input: TextInput) -> Vec { + let mut widgets = start_widgets(¶meter_widgets_info); + + let Some(input) = parameter_widgets_info.input() else { + log::warn!("A widget failed to be built because its node's input index is invalid."); + return vec![]; + }; + if let Some(TaggedValue::DashPattern(lengths)) = &input.as_non_exposed_value() { + widgets.extend_from_slice(&[ + Separator::new(SeparatorStyle::Unrelated).widget_instance(), + text_input + .value(lengths.iter().map(|length| length.to_string()).collect::>().join(", ")) + .on_update(parameter_widgets_info.optionally_update_value(move |input: &TextInput| Some(TaggedValue::DashPattern(graphene_std::core_types::misc::parse_f64_list(&input.value))))) .widget_instance(), ]) } @@ -867,7 +837,7 @@ pub fn font_inputs(parameter_widgets_info: ParameterWidgetsInfo) -> (Vec (Vec (Vec Vec { - let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; + let mut widgets = start_widgets(¶meter_widgets_info); - let mut widgets = start_widgets(parameter_widgets_info); - - let Some(document_node) = document_node else { return Vec::new() }; - let Some(input) = document_node.inputs.get(index) else { + let Some(input) = parameter_widgets_info.input() else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; @@ -998,7 +965,7 @@ pub fn progression_widget(parameter_widgets_info: ParameterWidgetsInfo, number_p .min(0.) .max(0.99999) .value(Some(fractional_part)) - .on_update(update_value(move |input: &NumberInput| TaggedValue::F64(whole_part + input.value.unwrap()), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |input: &NumberInput| TaggedValue::F64(whole_part + input.value.unwrap()))) .on_commit(commit_value) .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), @@ -1010,7 +977,7 @@ pub fn progression_widget(parameter_widgets_info: ParameterWidgetsInfo, number_p .min(0.) .is_integer(true) .value(Some(whole_part)) - .on_update(update_value(move |input: &NumberInput| TaggedValue::F64(input.value.unwrap() + fractional_part), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |input: &NumberInput| TaggedValue::F64(input.value.unwrap() + fractional_part))) .on_commit(commit_value) .widget_instance(), ]) @@ -1027,7 +994,7 @@ pub fn optional_f64_widget(parameter_widgets_info: ParameterWidgetsInfo, bool_in .. } = parameter_widgets_info; - let mut widgets = start_widgets(parameter_widgets_info); + let mut widgets = start_widgets(¶meter_widgets_info); let Some(document_node) = document_node else { return Vec::new() }; let Some(number_input) = document_node.inputs.get(number_input_index) else { @@ -1044,14 +1011,14 @@ pub fn optional_f64_widget(parameter_widgets_info: ParameterWidgetsInfo, bool_in Separator::new(SeparatorStyle::Related).widget_instance(), // The checkbox toggles if the value is Some or None CheckboxInput::new(enabled) - .on_update(update_value(|x: &CheckboxInput| TaggedValue::Bool(x.checked), node_id, bool_input_index)) + .on_update(update_value_at_index(|x: &CheckboxInput| TaggedValue::Bool(x.checked), node_id, bool_input_index)) .on_commit(commit_value) .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), Separator::new(SeparatorStyle::Unrelated).widget_instance(), number_props .value(Some(number)) - .on_update(update_value(move |x: &NumberInput| TaggedValue::F64(x.value.unwrap_or_default()), node_id, number_input_index)) + .on_update(update_value_at_index(move |x: &NumberInput| TaggedValue::F64(x.value.unwrap_or_default()), node_id, number_input_index)) .disabled(!enabled) .on_commit(commit_value) .widget_instance(), @@ -1062,12 +1029,9 @@ pub fn optional_f64_widget(parameter_widgets_info: ParameterWidgetsInfo, bool_in } pub fn number_widget(parameter_widgets_info: ParameterWidgetsInfo, number_props: NumberInput) -> Vec { - let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; + let mut widgets = start_widgets(¶meter_widgets_info); - let mut widgets = start_widgets(parameter_widgets_info); - - let Some(document_node) = document_node else { return Vec::new() }; - let Some(input) = document_node.inputs.get(index) else { + let Some(input) = parameter_widgets_info.input() else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; @@ -1076,7 +1040,7 @@ pub fn number_widget(parameter_widgets_info: ParameterWidgetsInfo, number_props: Separator::new(SeparatorStyle::Unrelated).widget_instance(), number_props .value(Some(x)) - .on_update(update_value(move |x: &NumberInput| TaggedValue::F64(x.value.unwrap()), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |x: &NumberInput| TaggedValue::F64(x.value.unwrap()))) .on_commit(commit_value) .widget_instance(), ]), @@ -1084,7 +1048,7 @@ pub fn number_widget(parameter_widgets_info: ParameterWidgetsInfo, number_props: Separator::new(SeparatorStyle::Unrelated).widget_instance(), number_props .value(Some(x as f64)) - .on_update(update_value(move |x: &NumberInput| TaggedValue::F32(x.value.unwrap() as f32), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |x: &NumberInput| TaggedValue::F32(x.value.unwrap() as f32))) .on_commit(commit_value) .widget_instance(), ]), @@ -1092,7 +1056,7 @@ pub fn number_widget(parameter_widgets_info: ParameterWidgetsInfo, number_props: Separator::new(SeparatorStyle::Unrelated).widget_instance(), number_props .value(Some(x as f64)) - .on_update(update_value(move |x: &NumberInput| TaggedValue::U32((x.value.unwrap()) as u32), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |x: &NumberInput| TaggedValue::U32((x.value.unwrap()) as u32))) .on_commit(commit_value) .widget_instance(), ]), @@ -1100,7 +1064,7 @@ pub fn number_widget(parameter_widgets_info: ParameterWidgetsInfo, number_props: Separator::new(SeparatorStyle::Unrelated).widget_instance(), number_props .value(Some(x as f64)) - .on_update(update_value(move |x: &NumberInput| TaggedValue::U64((x.value.unwrap()) as u64), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |x: &NumberInput| TaggedValue::U64((x.value.unwrap()) as u64))) .on_commit(commit_value) .widget_instance(), ]), @@ -1109,7 +1073,7 @@ pub fn number_widget(parameter_widgets_info: ParameterWidgetsInfo, number_props: number_props // We use an arbitrary `y` instead of an arbitrary `x` here because the "Grid" node's "Spacing" value's height should be used from rectangular mode when transferred to "Y Spacing" in isometric mode .value(Some(dvec2.y)) - .on_update(update_value(move |x: &NumberInput| TaggedValue::F64(x.value.unwrap()), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |x: &NumberInput| TaggedValue::F64(x.value.unwrap()))) .on_commit(commit_value) .widget_instance(), ]), @@ -1121,11 +1085,9 @@ pub fn number_widget(parameter_widgets_info: ParameterWidgetsInfo, number_props: // TODO: Auto-generate this enum dropdown menu widget pub fn blend_mode_widget(parameter_widgets_info: ParameterWidgetsInfo) -> LayoutGroup { - let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; + let mut widgets = start_widgets(¶meter_widgets_info); - let mut widgets = start_widgets(parameter_widgets_info); - let Some(document_node) = document_node else { return LayoutGroup::default() }; - let Some(input) = document_node.inputs.get(index) else { + let Some(input) = parameter_widgets_info.input() else { log::warn!("A widget failed to be built because its node's input index is invalid."); return LayoutGroup::row(vec![]); }; @@ -1138,7 +1100,7 @@ pub fn blend_mode_widget(parameter_widgets_info: ParameterWidgetsInfo) -> Layout .map(|blend_mode| { MenuListEntry::new(format!("{blend_mode:?}")) .label(blend_mode.to_string()) - .on_update(update_value(move |_| TaggedValue::BlendMode(*blend_mode), node_id, index)) + .on_update(parameter_widgets_info.update_value(move |_| TaggedValue::BlendMode(*blend_mode))) .on_commit(commit_value) }) .collect() @@ -1156,13 +1118,10 @@ pub fn blend_mode_widget(parameter_widgets_info: ParameterWidgetsInfo) -> Layout } pub fn color_widget(parameter_widgets_info: ParameterWidgetsInfo, color_button: ColorInput) -> LayoutGroup { - let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; + let mut widgets = start_widgets(¶meter_widgets_info); - let mut widgets = start_widgets(parameter_widgets_info); - - let Some(document_node) = document_node else { return LayoutGroup::default() }; // Return early with just the label if the input is exposed to the graph, meaning we don't want to show the color picker widget in the Properties panel - let NodeInput::Value { tagged_value, exposed: false } = &document_node.inputs[index] else { + let Some(NodeInput::Value { tagged_value, exposed: false }) = parameter_widgets_info.input() else { return LayoutGroup::row(widgets); }; @@ -1170,30 +1129,37 @@ pub fn color_widget(parameter_widgets_info: ParameterWidgetsInfo, color_button: widgets.push(Separator::new(SeparatorStyle::Unrelated).widget_instance()); // Add the color input - match &**tagged_value { - TaggedValue::Color(color) => widgets.push( - color_button - .value(FillChoiceUI::from(&match color { - Some(color) => FillChoice::Solid(*color), - None => FillChoice::None, - })) - .on_update(update_value(|input: &ColorInput| TaggedValue::Color(input.value.as_solid().map(Color::from)), node_id, index)) - .on_commit(commit_value) - .widget_instance(), - ), - TaggedValue::Gradient(stops) => widgets.push( - color_button - .value(FillChoiceUI::from(&FillChoice::Gradient(stops.clone()))) - .on_update(update_value( - |input: &ColorInput| TaggedValue::Gradient(input.value.as_gradient().map(GradientStops::from).unwrap_or_default()), - node_id, - index, - )) - .on_commit(commit_value) - .widget_instance(), - ), - x => warn!("Color {x:?}"), - } + let widget_value = match &**tagged_value { + TaggedValue::Color(color) => FillChoice::::Solid(SRGBA8::from(*color)), + TaggedValue::GradientRamp(ramp) => FillChoice::::Gradient(GradientRamp::from(ramp)), + value if value.is_no_paint() => FillChoice::::None, + x => { + warn!("Color {x:?}"); + return LayoutGroup::row(widgets); + } + }; + + // A paint input (`allow_none`) stores the pick as a plain color, gradient, or no-paint type default, + // while a plain color or gradient input always keeps its own value type + let on_update: fn(&ColorInput) -> TaggedValue = if color_button.allow_none { + |input| match &input.value { + FillChoice::::None => TaggedValue::no_paint(), + FillChoice::::Solid(srgba) => TaggedValue::Color(Color::from(*srgba)), + FillChoice::::Gradient(ramp) => TaggedValue::GradientRamp(GradientRamp::from(ramp)), + } + } else if matches!(&**tagged_value, TaggedValue::GradientRamp(_)) { + |input| TaggedValue::GradientRamp(input.value.as_gradient().map(GradientRamp::from).unwrap_or_else(GradientRamp::black_to_white)) + } else { + |input| TaggedValue::Color(input.value.as_solid().map(Color::from).unwrap_or(Color::TRANSPARENT)) + }; + + widgets.push( + color_button + .value(widget_value) + .on_update(parameter_widgets_info.update_value(on_update)) + .on_commit(commit_value) + .widget_instance(), + ); LayoutGroup::row(widgets) } @@ -1255,28 +1221,20 @@ pub fn query_assign_colors_randomize(node_id: NodeId, context: &NodePropertiesCo let document_node = get_document_node(node_id, context)?; // This is safe since the node is a proto node and the implementation cannot be changed. - Ok(match document_node.inputs.get(RandomizeInput::INDEX).and_then(|input| input.as_value()) { + Ok(match document_node.input(RandomizeInput).and_then(|input| input.as_value()) { Some(TaggedValue::Bool(randomize_enabled)) => *randomize_enabled, _ => false, }) } /// 2-stop black-to-white gradient track for spectrum sliders that map a value to a grayscale axis. -fn bw_track() -> GradientStops { - GradientStops { - position: vec![0., 1.], - midpoint: vec![0.5, 0.5], - color: vec![Color::BLACK, Color::WHITE], - } +fn bw_track() -> Gradient { + Gradient::from(vec![Color::BLACK, Color::WHITE]) } /// 3-stop black-to-color-to-white gradient track for spectrum sliders that map a value to a hue's full luminance range. -fn color_track(color: Color) -> GradientStops { - GradientStops { - position: vec![0., 0.5, 1.], - midpoint: vec![0.5; 3], - color: vec![Color::BLACK, color, Color::WHITE], - } +fn color_track(color: Color) -> Gradient { + Gradient::from(vec![Color::BLACK, color, Color::WHITE]) } pub(crate) fn brightness_contrast_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> Vec { @@ -1285,7 +1243,7 @@ pub(crate) fn brightness_contrast_properties(node_id: NodeId, context: &mut Node // Use Classic toggle changes the brightness range let use_classic_value = get_document_node(node_id, context) .ok() - .and_then(|document_node| document_node.inputs.get(UseClassicInput::INDEX).and_then(|input| input.as_value())) + .and_then(|document_node| document_node.input(UseClassicInput).and_then(|input| input.as_value())) .and_then(|tagged| if let TaggedValue::Bool(value) = tagged { Some(*value) } else { None }); let includes_use_classic = use_classic_value.is_some(); let use_classic_value = use_classic_value.unwrap_or(false); @@ -1296,7 +1254,7 @@ pub(crate) fn brightness_contrast_properties(node_id: NodeId, context: &mut Node let brightness = spectrum_slider_row( node_id, context, - BrightnessInput::INDEX, + BrightnessInput, bw_track(), Color::WHITE, brightness_min, @@ -1307,15 +1265,12 @@ pub(crate) fn brightness_contrast_properties(node_id: NodeId, context: &mut Node let contrast_min = if use_classic_value { -100. } else { -50. }; let zero_position = -contrast_min / (100. - contrast_min); - let contrast_track = GradientStops { - position: vec![0., zero_position, 1.], - midpoint: vec![0.5; 3], - color: vec![Color::from_rgbf32_unchecked(0.5, 0.5, 0.5), Color::BLACK, Color::from_rgbf32_unchecked(0.5, 0.5, 0.5)], - }; + let mut contrast_track = Gradient::from(vec![Color::MIDDLE_GRAY, Color::BLACK, Color::MIDDLE_GRAY]); + contrast_track.set_positions(&[0., zero_position, 1.]); let contrast = spectrum_slider_row( node_id, context, - ContrastInput::INDEX, + ContrastInput, contrast_track, Color::WHITE, contrast_min, @@ -1327,7 +1282,7 @@ pub(crate) fn brightness_contrast_properties(node_id: NodeId, context: &mut Node let mut layout = vec![brightness, contrast]; if includes_use_classic { // TODO: When we no longer use this function in the temporary "Brightness/Contrast Classic" node, remove this conditional pushing and just always include this - let use_classic = bool_widget(ParameterWidgetsInfo::new(node_id, UseClassicInput::INDEX, true, context), CheckboxInput::default()); + let use_classic = bool_widget(ParameterWidgetsInfo::new(node_id, UseClassicInput, true, context), CheckboxInput::default()); layout.push(LayoutGroup::row(use_classic)); } @@ -1337,13 +1292,13 @@ pub(crate) fn brightness_contrast_properties(node_id: NodeId, context: &mut Node pub(crate) fn levels_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> Vec { use graphene_std::raster::levels::*; - // (input index, marker handle color, default percentage for double-click reset) + // (parameter, marker handle color, default percentage for double-click reset) let input_range_params = [ - (ShadowsInput::INDEX, Color::BLACK, 0.), - (MidtonesInput::INDEX, Color::from_rgbf32_unchecked(0.5, 0.5, 0.5), 50.), - (HighlightsInput::INDEX, Color::WHITE, 100.), + (ShadowsInput.into(), Color::BLACK, 0.), + (MidtonesInput.into(), Color::MIDDLE_GRAY, 50.), + (HighlightsInput.into(), Color::WHITE, 100.), ]; - let output_range_params = [(OutputMinimumsInput::INDEX, Color::BLACK, 0.), (OutputMaximumsInput::INDEX, Color::WHITE, 100.)]; + let output_range_params = [(OutputMinimumsInput.into(), Color::BLACK, 0.), (OutputMaximumsInput.into(), Color::WHITE, 100.)]; let mut layout = Vec::with_capacity(5); build_shared_spectrum_section(node_id, context, &input_range_params, &mut layout); @@ -1354,13 +1309,13 @@ pub(crate) fn levels_properties(node_id: NodeId, context: &mut NodePropertiesCon /// Append a section of related percentage parameters as rows: a shared black-to-white spectrum (with one marker per non-exposed parameter) sits on the first non-exposed row /// alongside its 60px number input, and the remaining non-exposed rows show only their 60px number input. Exposed parameters render as the standard exposed-row display. /// Marker positions are clamped to non-decreasing display order so they never visually cross even if the underlying values do. -fn build_shared_spectrum_section(node_id: NodeId, context: &mut NodePropertiesContext, params: &[(usize, Color, f64)], layout: &mut Vec) { +fn build_shared_spectrum_section(node_id: NodeId, context: &mut NodePropertiesContext, params: &[(ParameterRef, Color, f64)], layout: &mut Vec) { // Snapshot exposure and values before the mutable-borrow loop let exposure_and_value: Vec<(bool, f64)> = match get_document_node(node_id, context) { Ok(document_node) => params .iter() - .map(|&(input_index, _, _)| { - let input = document_node.inputs.get(input_index); + .map(|(parameter, _, _)| { + let input = document_node.inputs.get(parameter.input_index); let exposed = input.is_some_and(|input| input.is_exposed()); let percent = input .and_then(|input| input.as_value()) @@ -1380,13 +1335,13 @@ fn build_shared_spectrum_section(node_id: NodeId, context: &mut NodePropertiesCo let mut marker_default_percents = Vec::new(); let mut marker_positions = Vec::new(); let mut handle_colors = Vec::new(); - for (i, &(input_index, handle_color, default_percent)) in params.iter().enumerate() { + for (i, &(ref parameter, handle_color, default_percent)) in params.iter().enumerate() { let (exposed, percent) = exposure_and_value[i]; if exposed { continue; } marker_positions.push((percent / 100.).clamp(0., 1.)); - marker_input_indices.push(input_index); + marker_input_indices.push(parameter.input_index); marker_default_percents.push(default_percent); handle_colors.push(handle_color); } @@ -1404,7 +1359,8 @@ fn build_shared_spectrum_section(node_id: NodeId, context: &mut NodePropertiesCo // Build the shared spectrum widget (placed on the first non-exposed row) let spectrum_widget = (!spectrum_markers.is_empty()).then(|| { - SpectrumInput::new(GradientStopsUI::from(&bw_track())) + SpectrumInput::new(GradientStops::from(&bw_track())) + .track_space(GradientSpace::RgbGamma) .markers(spectrum_markers) .show_midpoints(false) .allow_insert(false) @@ -1437,7 +1393,7 @@ fn build_shared_spectrum_section(node_id: NodeId, context: &mut NodePropertiesCo NodeGraphMessage::SetInputValue { node_id, input_index, - value: TaggedValue::F32(percent.clamp(0., 100.) as f32), + value: TaggedValue::F32(percent.clamp(0., 100.) as f32).into(), } .into() } @@ -1450,14 +1406,15 @@ fn build_shared_spectrum_section(node_id: NodeId, context: &mut NodePropertiesCo let number_input = NumberInput::default().mode_increment().unit("%").min(0.).max(100.); // One row per parameter: first non-exposed carries the shared spectrum, others get just a number input - for (i, &(input_index, _, _)) in params.iter().enumerate() { + for (i, (parameter, _, _)) in params.iter().enumerate() { let (exposed, current) = exposure_and_value[i]; + let input_index = parameter.input_index; if exposed { - let row = number_widget(ParameterWidgetsInfo::new(node_id, input_index, true, context), number_input.clone()); + let row = number_widget(ParameterWidgetsInfo::at_index(node_id, input_index, true, context), number_input.clone()); layout.push(LayoutGroup::row(row)); } else { - let mut row = start_widgets(ParameterWidgetsInfo::new(node_id, input_index, true, context)); + let mut row = start_widgets(&ParameterWidgetsInfo::at_index(node_id, input_index, true, context)); row.push(Separator::new(SeparatorStyle::Unrelated).widget_instance()); if Some(input_index) == spectrum_owner @@ -1474,7 +1431,11 @@ fn build_shared_spectrum_section(node_id: NodeId, context: &mut NodePropertiesCo .min_width(60) .max_width(60) .display_decimal_places(0) - .on_update(update_value(move |widget: &NumberInput| TaggedValue::F32(widget.value.unwrap_or(0.) as f32), node_id, input_index)) + .on_update(update_value_at_index( + move |widget: &NumberInput| TaggedValue::F32(widget.value.unwrap_or(0.) as f32), + node_id, + input_index, + )) .on_commit(commit_value) .widget_instance(), ); @@ -1489,7 +1450,7 @@ pub(crate) fn hue_saturation_properties(node_id: NodeId, context: &mut NodePrope // Current hue position on the rainbow track, used for the saturation track's right-end color let current_hue_shift = get_document_node(node_id, context) .ok() - .and_then(|document_node| document_node.inputs.get(HueShiftInput::INDEX).and_then(|input| input.as_value())) + .and_then(|document_node| document_node.input(HueShiftInput).and_then(|input| input.as_value())) .and_then(|tagged| if let TaggedValue::F32(value) = tagged { Some(*value) } else { None }) .unwrap_or(0.); // The rainbow has cyan at position 0.5 (hue_shift=0), so offset by +180 to align @@ -1497,17 +1458,9 @@ pub(crate) fn hue_saturation_properties(node_id: NodeId, context: &mut NodePrope let saturated_current_hue = Color::from_hsva(marker_hue, 1., 1., 1.); // Hue: cyclic rainbow - let hue_track = GradientStops { - position: vec![0., 1. / 6., 2. / 6., 3. / 6., 4. / 6., 5. / 6., 1.], - midpoint: vec![0.5; 7], - color: vec![Color::RED, Color::YELLOW, Color::GREEN, Color::CYAN, Color::BLUE, Color::MAGENTA, Color::RED], - }; + let hue_track = Gradient::from(vec![Color::RED, Color::YELLOW, Color::GREEN, Color::CYAN, Color::BLUE, Color::MAGENTA, Color::RED]); // Saturation: gray to the fully saturated current hue - let saturation_track = GradientStops { - position: vec![0., 1.], - midpoint: vec![0.5, 0.5], - color: vec![Color::from_rgbf32_unchecked(0.5, 0.5, 0.5), saturated_current_hue], - }; + let saturation_track = Gradient::from(vec![Color::MIDDLE_GRAY, saturated_current_hue]); // Lightness: black to white let lightness_track = bw_track(); @@ -1515,7 +1468,7 @@ pub(crate) fn hue_saturation_properties(node_id: NodeId, context: &mut NodePrope spectrum_slider_row( node_id, context, - HueShiftInput::INDEX, + HueShiftInput, hue_track, Color::WHITE, -180., @@ -1526,7 +1479,7 @@ pub(crate) fn hue_saturation_properties(node_id: NodeId, context: &mut NodePrope spectrum_slider_row( node_id, context, - SaturationShiftInput::INDEX, + SaturationShiftInput, saturation_track, Color::WHITE, -100., @@ -1537,7 +1490,7 @@ pub(crate) fn hue_saturation_properties(node_id: NodeId, context: &mut NodePrope spectrum_slider_row( node_id, context, - LightnessShiftInput::INDEX, + LightnessShiftInput, lightness_track, Color::WHITE, -100., @@ -1552,15 +1505,16 @@ pub(crate) fn hue_saturation_properties(node_id: NodeId, context: &mut NodePrope fn spectrum_slider_row( node_id: NodeId, context: &mut NodePropertiesContext, - input_index: usize, - track: GradientStops, + parameter: impl Into, + track: Gradient, handle_color: Color, value_min: f64, value_max: f64, default_value: f64, number_input: NumberInput, ) -> LayoutGroup { - let mut row = start_widgets(ParameterWidgetsInfo::new(node_id, input_index, true, context)); + let input_index = parameter.into().input_index; + let mut row = start_widgets(&ParameterWidgetsInfo::at_index(node_id, input_index, true, context)); let current = get_document_node(node_id, context) .ok() @@ -1578,7 +1532,8 @@ fn spectrum_slider_row( let position_to_value = move |position: f64| value_min + position * value_range; row.push( - SpectrumInput::new(GradientStopsUI::from(&track)) + SpectrumInput::new(GradientStops::from(&track)) + .track_space(GradientSpace::RgbGamma) .markers(vec![SpectrumMarker::new(position, 0.5, handle_color)]) .show_midpoints(false) .allow_insert(false) @@ -1594,7 +1549,7 @@ fn spectrum_slider_row( NodeGraphMessage::SetInputValue { node_id, input_index, - value: TaggedValue::F32(position_to_value(new_position).clamp(value_min, value_max) as f32), + value: TaggedValue::F32(position_to_value(new_position).clamp(value_min, value_max) as f32).into(), } .into() }) @@ -1608,7 +1563,11 @@ fn spectrum_slider_row( .min_width(60) .max_width(60) .display_decimal_places(0) - .on_update(update_value(move |widget: &NumberInput| TaggedValue::F32(widget.value.unwrap_or(0.) as f32), node_id, input_index)) + .on_update(update_value_at_index( + move |widget: &NumberInput| TaggedValue::F32(widget.value.unwrap_or(0.) as f32), + node_id, + input_index, + )) .on_commit(commit_value) .widget_instance(), ); @@ -1620,13 +1579,13 @@ fn spectrum_slider_row( pub(crate) fn threshold_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> Vec { use graphene_std::raster::threshold::*; - let params: &[(usize, Color, f64)] = &[(MinLuminanceInput::INDEX, Color::BLACK, 50.), (MaxLuminanceInput::INDEX, Color::WHITE, 100.)]; + let params: &[(ParameterRef, Color, f64)] = &[(MinLuminanceInput.into(), Color::BLACK, 50.), (MaxLuminanceInput.into(), Color::WHITE, 100.)]; let mut layout = Vec::with_capacity(3); build_shared_spectrum_section(node_id, context, params, &mut layout); let luminance_calc = { - let mut info = ParameterWidgetsInfo::new(node_id, LuminanceCalcInput::INDEX, true, context); + let mut info = ParameterWidgetsInfo::new(node_id, LuminanceCalcInput, true, context); info.exposable = false; enum_choice::().for_socket(info).property_row() }; @@ -1638,15 +1597,11 @@ pub(crate) fn threshold_properties(node_id: NodeId, context: &mut NodeProperties pub(crate) fn vibrance_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> Vec { use graphene_std::raster::vibrance::*; - let track = GradientStops { - position: vec![0., 1.], - midpoint: vec![0.5, 0.5], - color: vec![Color::from_rgbf32_unchecked(0.5, 0.5, 0.5), Color::RED], - }; + let track = Gradient::from(vec![Color::MIDDLE_GRAY, Color::RED]); vec![spectrum_slider_row( node_id, context, - VibranceInput::INDEX, + VibranceInput, track, Color::WHITE, -100., @@ -1661,27 +1616,27 @@ pub(crate) fn black_and_white_properties(node_id: NodeId, context: &mut NodeProp let number_input = NumberInput::default().mode_increment().unit("%").min(-200.).max(300.); - let tint = color_widget(ParameterWidgetsInfo::new(node_id, TintInput::INDEX, true, context), ColorInput::default()); + let tint = color_widget(ParameterWidgetsInfo::new(node_id, TintInput, true, context), ColorInput::default()); let mut layout = vec![tint]; - let params: &[(usize, Color, f64)] = &[ - (RedsInput::INDEX, Color::RED, 40.), - (YellowsInput::INDEX, Color::YELLOW, 60.), - (GreensInput::INDEX, Color::GREEN, 40.), - (CyansInput::INDEX, Color::CYAN, 60.), - (BluesInput::INDEX, Color::BLUE, 20.), - (MagentasInput::INDEX, Color::MAGENTA, 80.), + let params: &[(ParameterRef, Color, f64)] = &[ + (RedsInput.into(), Color::RED, 40.), + (YellowsInput.into(), Color::YELLOW, 60.), + (GreensInput.into(), Color::GREEN, 40.), + (CyansInput.into(), Color::CYAN, 60.), + (BluesInput.into(), Color::BLUE, 20.), + (MagentasInput.into(), Color::MAGENTA, 80.), ]; - for &(input_index, color, default) in params { + for (parameter, color, default) in params { layout.push(spectrum_slider_row( node_id, context, - input_index, - color_track(color), + parameter.clone(), + color_track(*color), Color::WHITE, -200., 300., - default, + *default, number_input.clone(), )); } @@ -1692,8 +1647,8 @@ pub(crate) fn black_and_white_properties(node_id: NodeId, context: &mut NodeProp pub(crate) fn channel_mixer_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> Vec { use graphene_std::raster::channel_mixer::*; - let is_monochrome = bool_widget(ParameterWidgetsInfo::new(node_id, MonochromeInput::INDEX, true, context), CheckboxInput::default()); - let mut parameter_info = ParameterWidgetsInfo::new(node_id, OutputChannelInput::INDEX, true, context); + let is_monochrome = bool_widget(ParameterWidgetsInfo::new(node_id, MonochromeInput, true, context), CheckboxInput::default()); + let mut parameter_info = ParameterWidgetsInfo::new(node_id, OutputChannelInput, true, context); parameter_info.exposable = false; let output_channel = enum_choice::().for_socket(parameter_info).property_row(); @@ -1705,12 +1660,12 @@ pub(crate) fn channel_mixer_properties(node_id: NodeId, context: &mut NodeProper } }; // Monochrome - let is_monochrome_value = match document_node.inputs[MonochromeInput::INDEX].as_value() { + let is_monochrome_value = match document_node.input_value(MonochromeInput) { Some(TaggedValue::Bool(monochrome_choice)) => *monochrome_choice, _ => false, }; // Output channel choice - let output_channel_value = match &document_node.inputs[OutputChannelInput::INDEX].as_value() { + let output_channel_value = match &document_node.input_value(OutputChannelInput) { Some(TaggedValue::RedGreenBlue(choice)) => choice, _ => { warn!("Channel Mixer node properties panel could not be displayed."); @@ -1718,15 +1673,15 @@ pub(crate) fn channel_mixer_properties(node_id: NodeId, context: &mut NodeProper } }; - // Input indices and defaults depend on monochrome toggle and output channel selection - let (indices, defaults) = match (is_monochrome_value, output_channel_value) { + // The edited parameters and their defaults depend on the monochrome toggle and output channel selection + let (parameters, defaults): ([ParameterRef; 4], [f64; 4]) = match (is_monochrome_value, output_channel_value) { (true, _) => ( - [MonochromeRInput::INDEX, MonochromeGInput::INDEX, MonochromeBInput::INDEX, MonochromeCInput::INDEX], + [MonochromeRInput.into(), MonochromeGInput.into(), MonochromeBInput.into(), MonochromeCInput.into()], [40., 40., 20., 0.], ), - (false, RedGreenBlue::Red) => ([RedRInput::INDEX, RedGInput::INDEX, RedBInput::INDEX, RedCInput::INDEX], [100., 0., 0., 0.]), - (false, RedGreenBlue::Green) => ([GreenRInput::INDEX, GreenGInput::INDEX, GreenBInput::INDEX, GreenCInput::INDEX], [0., 100., 0., 0.]), - (false, RedGreenBlue::Blue) => ([BlueRInput::INDEX, BlueGInput::INDEX, BlueBInput::INDEX, BlueCInput::INDEX], [0., 0., 100., 0.]), + (false, RedGreenBlue::Red) => ([RedRInput.into(), RedGInput.into(), RedBInput.into(), RedCInput.into()], [100., 0., 0., 0.]), + (false, RedGreenBlue::Green) => ([GreenRInput.into(), GreenGInput.into(), GreenBInput.into(), GreenCInput.into()], [0., 100., 0., 0.]), + (false, RedGreenBlue::Blue) => ([BlueRInput.into(), BlueGInput.into(), BlueBInput.into(), BlueCInput.into()], [0., 0., 100., 0.]), }; let number_input = NumberInput::default().mode_increment().unit("%").min(-200.).max(200.); @@ -1736,11 +1691,11 @@ pub(crate) fn channel_mixer_properties(node_id: NodeId, context: &mut NodeProper if !is_monochrome_value { layout.push(output_channel); } - for (i, (&input_index, &default)) in indices.iter().zip(defaults.iter()).enumerate() { + for (i, (parameter, &default)) in parameters.into_iter().zip(defaults.iter()).enumerate() { layout.push(spectrum_slider_row( node_id, context, - input_index, + parameter, tracks[i].clone(), Color::WHITE, -200., @@ -1756,7 +1711,7 @@ pub(crate) fn channel_mixer_properties(node_id: NodeId, context: &mut NodeProper pub(crate) fn selective_color_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> Vec { use graphene_std::raster::selective_color::*; - let mut default_info = ParameterWidgetsInfo::new(node_id, ColorsInput::INDEX, true, context); + let mut default_info = ParameterWidgetsInfo::new(node_id, ColorsInput, true, context); default_info.exposable = false; let colors = enum_choice::().for_socket(default_info).property_row(); @@ -1768,7 +1723,7 @@ pub(crate) fn selective_color_properties(node_id: NodeId, context: &mut NodeProp } }; // Colors choice - let colors_choice = match &document_node.inputs[ColorsInput::INDEX].as_value() { + let colors_choice = match &document_node.input_value(ColorsInput) { Some(TaggedValue::SelectiveColorChoice(choice)) => choice, _ => { warn!("Selective Color node properties panel could not be displayed."); @@ -1776,16 +1731,16 @@ pub(crate) fn selective_color_properties(node_id: NodeId, context: &mut NodeProp } }; // CMYK - let indices = match colors_choice { - SelectiveColorChoice::Reds => [RCInput::INDEX, RMInput::INDEX, RYInput::INDEX, RKInput::INDEX], - SelectiveColorChoice::Yellows => [YCInput::INDEX, YMInput::INDEX, YYInput::INDEX, YKInput::INDEX], - SelectiveColorChoice::Greens => [GCInput::INDEX, GMInput::INDEX, GYInput::INDEX, GKInput::INDEX], - SelectiveColorChoice::Cyans => [CCInput::INDEX, CMInput::INDEX, CYInput::INDEX, CKInput::INDEX], - SelectiveColorChoice::Blues => [BCInput::INDEX, BMInput::INDEX, BYInput::INDEX, BKInput::INDEX], - SelectiveColorChoice::Magentas => [MCInput::INDEX, MMInput::INDEX, MYInput::INDEX, MKInput::INDEX], - SelectiveColorChoice::Whites => [WCInput::INDEX, WMInput::INDEX, WYInput::INDEX, WKInput::INDEX], - SelectiveColorChoice::Neutrals => [NCInput::INDEX, NMInput::INDEX, NYInput::INDEX, NKInput::INDEX], - SelectiveColorChoice::Blacks => [KCInput::INDEX, KMInput::INDEX, KYInput::INDEX, KKInput::INDEX], + let parameters: [ParameterRef; 4] = match colors_choice { + SelectiveColorChoice::Reds => [RCInput.into(), RMInput.into(), RYInput.into(), RKInput.into()], + SelectiveColorChoice::Yellows => [YCInput.into(), YMInput.into(), YYInput.into(), YKInput.into()], + SelectiveColorChoice::Greens => [GCInput.into(), GMInput.into(), GYInput.into(), GKInput.into()], + SelectiveColorChoice::Cyans => [CCInput.into(), CMInput.into(), CYInput.into(), CKInput.into()], + SelectiveColorChoice::Blues => [BCInput.into(), BMInput.into(), BYInput.into(), BKInput.into()], + SelectiveColorChoice::Magentas => [MCInput.into(), MMInput.into(), MYInput.into(), MKInput.into()], + SelectiveColorChoice::Whites => [WCInput.into(), WMInput.into(), WYInput.into(), WKInput.into()], + SelectiveColorChoice::Neutrals => [NCInput.into(), NMInput.into(), NYInput.into(), NKInput.into()], + SelectiveColorChoice::Blacks => [KCInput.into(), KMInput.into(), KYInput.into(), KKInput.into()], }; let tracks = [color_track(Color::CYAN), color_track(Color::MAGENTA), color_track(Color::YELLOW), bw_track()]; @@ -1793,22 +1748,12 @@ pub(crate) fn selective_color_properties(node_id: NodeId, context: &mut NodeProp // Mode let mode = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, ModeInput::INDEX, true, context)) + .for_socket(ParameterWidgetsInfo::new(node_id, ModeInput, true, context)) .property_row(); let mut layout = vec![colors]; - for (i, &input_index) in indices.iter().enumerate() { - layout.push(spectrum_slider_row( - node_id, - context, - input_index, - tracks[i].clone(), - Color::WHITE, - -100., - 100., - 0., - number_input.clone(), - )); + for (i, parameter) in parameters.into_iter().enumerate() { + layout.push(spectrum_slider_row(node_id, context, parameter, tracks[i].clone(), Color::WHITE, -100., 100., 0., number_input.clone())); } layout.push(mode); @@ -1818,9 +1763,7 @@ pub(crate) fn selective_color_properties(node_id: NodeId, context: &mut NodeProp pub(crate) fn grid_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> Vec { use graphene_std::vector::generator_nodes::grid::*; - let grid_type = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, GridTypeInput::INDEX, true, context)) - .property_row(); + let grid_type = enum_choice::().for_socket(ParameterWidgetsInfo::new(node_id, GridTypeInput, true, context)).property_row(); let mut widgets = vec![grid_type]; @@ -1831,31 +1774,33 @@ pub(crate) fn grid_properties(node_id: NodeId, context: &mut NodePropertiesConte return Vec::new(); } }; - let Some(grid_type_input) = document_node.inputs.get(GridTypeInput::INDEX) else { + let Some(grid_type_input) = document_node.input(GridTypeInput) else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; if let Some(&TaggedValue::GridType(grid_type)) = grid_type_input.as_non_exposed_value() { match grid_type { GridType::Rectangular => { - let spacing = vec2_widget(ParameterWidgetsInfo::new(node_id, SpacingInput::::INDEX, true, context), "W", "H", " px", Some(0.), false); + let spacing = vec2_widget(ParameterWidgetsInfo::new(node_id, SpacingInput, true, context), "W", "H", " px", Some(0.), false); widgets.push(spacing); } GridType::Isometric => { let spacing = LayoutGroup::row(number_widget( - ParameterWidgetsInfo::new(node_id, SpacingInput::::INDEX, true, context), + ParameterWidgetsInfo::new(node_id, SpacingInput, true, context), NumberInput::default().label("H").min(0.).unit(" px"), )); - let angles = vec2_widget(ParameterWidgetsInfo::new(node_id, AnglesInput::INDEX, true, context), "", "", "Β°", None, false); + let angles = vec2_widget(ParameterWidgetsInfo::new(node_id, AnglesInput, true, context), "", "", "Β°", None, false); widgets.extend([spacing, angles]); } } } - let columns = number_widget(ParameterWidgetsInfo::new(node_id, ColumnsInput::INDEX, true, context), NumberInput::default().min(1.)); - let rows = number_widget(ParameterWidgetsInfo::new(node_id, RowsInput::INDEX, true, context), NumberInput::default().min(1.)); + let columns = number_widget(ParameterWidgetsInfo::new(node_id, ColumnsInput, true, context), NumberInput::default().min(1.)); + let rows = number_widget(ParameterWidgetsInfo::new(node_id, RowsInput, true, context), NumberInput::default().min(1.)); - widgets.extend([LayoutGroup::row(columns), LayoutGroup::row(rows)]); + let connect_cells = bool_widget(ParameterWidgetsInfo::new(node_id, ConnectCellsInput, true, context), CheckboxInput::default()); + + widgets.extend([LayoutGroup::row(columns), LayoutGroup::row(rows), LayoutGroup::row(connect_cells)]); widgets } @@ -1864,10 +1809,10 @@ pub(crate) fn spiral_properties(node_id: NodeId, context: &mut NodePropertiesCon use graphene_std::vector::generator_nodes::spiral::*; let spiral_type = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, SpiralTypeInput::INDEX, true, context)) + .for_socket(ParameterWidgetsInfo::new(node_id, SpiralTypeInput, true, context)) .property_row(); - let turns = number_widget(ParameterWidgetsInfo::new(node_id, TurnsInput::INDEX, true, context), NumberInput::default().min(0.1)); - let start_angle = number_widget(ParameterWidgetsInfo::new(node_id, StartAngleInput::INDEX, true, context), NumberInput::default().unit("Β°")); + let turns = number_widget(ParameterWidgetsInfo::new(node_id, TurnsInput, true, context), NumberInput::default().min(0.1)); + let start_angle = number_widget(ParameterWidgetsInfo::new(node_id, StartAngleInput, true, context), NumberInput::default().unit("Β°")); let mut widgets = vec![spiral_type, LayoutGroup::row(turns), LayoutGroup::row(start_angle)]; @@ -1879,7 +1824,7 @@ pub(crate) fn spiral_properties(node_id: NodeId, context: &mut NodePropertiesCon } }; - let Some(spiral_type_input) = document_node.inputs.get(SpiralTypeInput::INDEX) else { + let Some(spiral_type_input) = document_node.input(SpiralTypeInput) else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; @@ -1887,25 +1832,22 @@ pub(crate) fn spiral_properties(node_id: NodeId, context: &mut NodePropertiesCon match spiral_type { SpiralType::Archimedean => { let inner_radius = LayoutGroup::row(number_widget( - ParameterWidgetsInfo::new(node_id, InnerRadiusInput::INDEX, true, context), + ParameterWidgetsInfo::new(node_id, InnerRadiusInput, true, context), NumberInput::default().min(0.).unit(" px"), )); - let outer_radius = LayoutGroup::row(number_widget( - ParameterWidgetsInfo::new(node_id, OuterRadiusInput::INDEX, true, context), - NumberInput::default().unit(" px"), - )); + let outer_radius = LayoutGroup::row(number_widget(ParameterWidgetsInfo::new(node_id, OuterRadiusInput, true, context), NumberInput::default().unit(" px"))); widgets.extend([inner_radius, outer_radius]); } SpiralType::Logarithmic => { let inner_radius = LayoutGroup::row(number_widget( - ParameterWidgetsInfo::new(node_id, InnerRadiusInput::INDEX, true, context), + ParameterWidgetsInfo::new(node_id, InnerRadiusInput, true, context), NumberInput::default().min(0.).unit(" px"), )); let outer_radius = LayoutGroup::row(number_widget( - ParameterWidgetsInfo::new(node_id, OuterRadiusInput::INDEX, true, context), + ParameterWidgetsInfo::new(node_id, OuterRadiusInput, true, context), NumberInput::default().min(0.1).unit(" px"), )); @@ -1915,7 +1857,7 @@ pub(crate) fn spiral_properties(node_id: NodeId, context: &mut NodePropertiesCon } let angular_resolution = number_widget( - ParameterWidgetsInfo::new(node_id, AngularResolutionInput::INDEX, true, context), + ParameterWidgetsInfo::new(node_id, AngularResolutionInput, true, context), NumberInput::default().min(1.).max(180.).unit("Β°"), ); @@ -1942,20 +1884,17 @@ pub(crate) fn sample_polyline_properties(node_id: NodeId, context: &mut NodeProp } }; - let current_spacing = document_node.inputs.get(SpacingInput::INDEX).and_then(|input| input.as_value()).cloned(); + let current_spacing = document_node.input(SpacingInput).and_then(|input| input.as_value()).cloned(); let is_quantity = matches!(current_spacing, Some(TaggedValue::PointSpacingType(PointSpacingType::Quantity))); let spacing = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, SpacingInput::INDEX, true, context)) + .for_socket(ParameterWidgetsInfo::new(node_id, SpacingInput, true, context)) .property_row(); - let separation = number_widget(ParameterWidgetsInfo::new(node_id, SeparationInput::INDEX, true, context), NumberInput::default().min(0.).unit(" px")); - let quantity = number_widget(ParameterWidgetsInfo::new(node_id, QuantityInput::INDEX, true, context), NumberInput::default().min(2.).int()); - let start_offset = number_widget(ParameterWidgetsInfo::new(node_id, StartOffsetInput::INDEX, true, context), NumberInput::default().min(0.).unit(" px")); - let stop_offset = number_widget(ParameterWidgetsInfo::new(node_id, StopOffsetInput::INDEX, true, context), NumberInput::default().min(0.).unit(" px")); - let adaptive_spacing = bool_widget( - ParameterWidgetsInfo::new(node_id, AdaptiveSpacingInput::INDEX, true, context), - CheckboxInput::default().disabled(is_quantity), - ); + let separation = number_widget(ParameterWidgetsInfo::new(node_id, SeparationInput, true, context), NumberInput::default().min(0.).unit(" px")); + let quantity = number_widget(ParameterWidgetsInfo::new(node_id, QuantityInput, true, context), NumberInput::default().min(2.).int()); + let start_offset = number_widget(ParameterWidgetsInfo::new(node_id, StartOffsetInput, true, context), NumberInput::default().min(0.).unit(" px")); + let stop_offset = number_widget(ParameterWidgetsInfo::new(node_id, StopOffsetInput, true, context), NumberInput::default().min(0.).unit(" px")); + let adaptive_spacing = bool_widget(ParameterWidgetsInfo::new(node_id, AdaptiveSpacingInput, true, context), CheckboxInput::default().disabled(is_quantity)); vec![ spacing.with_tooltip_description(SAMPLE_POLYLINE_DESCRIPTION_SPACING), @@ -1973,10 +1912,10 @@ pub(crate) fn sample_polyline_properties(node_id: NodeId, context: &mut NodeProp pub(crate) fn exposure_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> Vec { use graphene_std::raster::exposure::*; - let exposure = number_widget(ParameterWidgetsInfo::new(node_id, ExposureInput::INDEX, true, context), NumberInput::default().min(-20.).max(20.)); - let offset = number_widget(ParameterWidgetsInfo::new(node_id, OffsetInput::INDEX, true, context), NumberInput::default().min(-0.5).max(0.5)); + let exposure = number_widget(ParameterWidgetsInfo::new(node_id, ExposureInput, true, context), NumberInput::default().min(-20.).max(20.)); + let offset = number_widget(ParameterWidgetsInfo::new(node_id, OffsetInput, true, context), NumberInput::default().min(-0.5).max(0.5)); let gamma_correction = number_widget( - ParameterWidgetsInfo::new(node_id, GammaCorrectionInput::INDEX, true, context), + ParameterWidgetsInfo::new(node_id, GammaCorrectionInput, true, context), NumberInput::default().min(0.01).max(9.99).increment_step(0.1), ); @@ -1989,20 +1928,20 @@ pub(crate) fn format_number_properties(node_id: NodeId, context: &mut NodeProper // Read current values before borrowing context mutably for widgets let (no_decimals, decimal_sep_value, use_thousands, thousands_sep_value) = match get_document_node(node_id, context) { Ok(document_node) => { - let decimal_places = match document_node.inputs.get(DecimalPlacesInput::INDEX).and_then(|input| input.as_value()) { + let decimal_places = match document_node.input(DecimalPlacesInput).and_then(|input| input.as_value()) { Some(&TaggedValue::U32(x)) => x, _ => 2, }; - let decimal_sep = match document_node.inputs.get(DecimalSeparatorInput::INDEX).and_then(|input| input.as_non_exposed_value()) { + let decimal_sep = match document_node.input(DecimalSeparatorInput).and_then(|input| input.as_non_exposed_value()) { Some(TaggedValue::String(x)) => Some(x.clone()), _ => None, }; - let use_thousands = match document_node.inputs.get(UseThousandsSeparatorInput::INDEX).and_then(|input| input.as_value()) { + let use_thousands = match document_node.input(UseThousandsSeparatorInput).and_then(|input| input.as_value()) { Some(&TaggedValue::Bool(x)) => x, _ => false, }; - let use_thousands = use_thousands || document_node.inputs.get(ThousandsSeparatorInput::INDEX).is_some_and(|input| input.is_exposed()); - let thousands_sep = match document_node.inputs.get(ThousandsSeparatorInput::INDEX).and_then(|input| input.as_non_exposed_value()) { + let use_thousands = use_thousands || document_node.input(ThousandsSeparatorInput).is_some_and(|input| input.is_exposed()); + let thousands_sep = match document_node.input(ThousandsSeparatorInput).and_then(|input| input.as_non_exposed_value()) { Some(TaggedValue::String(x)) => Some(x.clone()), _ => None, }; @@ -2014,50 +1953,44 @@ pub(crate) fn format_number_properties(node_id: NodeId, context: &mut NodeProper } }; - let decimal_places = number_widget(ParameterWidgetsInfo::new(node_id, DecimalPlacesInput::INDEX, true, context), NumberInput::default().min(0.).int()); + let decimal_places = number_widget(ParameterWidgetsInfo::new(node_id, DecimalPlacesInput, true, context), NumberInput::default().min(0.).int()); // Fixed decimals and decimal separator are disabled when decimal places is 0 - let fixed_decimals = bool_widget( - ParameterWidgetsInfo::new(node_id, FixedDecimalsInput::INDEX, true, context), - CheckboxInput::default().disabled(no_decimals), - ); - let mut decimal_sep_widgets = start_widgets(ParameterWidgetsInfo::new(node_id, DecimalSeparatorInput::INDEX, true, context)); + let fixed_decimals = bool_widget(ParameterWidgetsInfo::new(node_id, FixedDecimalsInput, true, context), CheckboxInput::default().disabled(no_decimals)); + let mut decimal_sep_widgets = start_widgets(&ParameterWidgetsInfo::new(node_id, DecimalSeparatorInput, true, context)); if let Some(sep) = decimal_sep_value { decimal_sep_widgets.extend_from_slice(&[ Separator::new(SeparatorStyle::Unrelated).widget_instance(), TextInput::new(sep) .disabled(no_decimals) - .on_update(update_value(|x: &TextInput| TaggedValue::String(x.value.clone()), node_id, DecimalSeparatorInput::INDEX)) + .on_update(update_value(|x: &TextInput| TaggedValue::String(x.value.clone()), node_id, DecimalSeparatorInput)) .on_commit(commit_value) .widget_instance(), ]); } // Thousands separator: checkbox in assist area - let mut thousands_sep_widgets = start_widgets(ParameterWidgetsInfo::new(node_id, ThousandsSeparatorInput::INDEX, false, context)); + let mut thousands_sep_widgets = start_widgets(&ParameterWidgetsInfo::new(node_id, ThousandsSeparatorInput, false, context)); if let Some(sep) = thousands_sep_value { thousands_sep_widgets.extend_from_slice(&[ Separator::new(SeparatorStyle::Unrelated).widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), CheckboxInput::new(use_thousands) - .on_update(update_value(|x: &CheckboxInput| TaggedValue::Bool(x.checked), node_id, UseThousandsSeparatorInput::INDEX)) + .on_update(update_value(|x: &CheckboxInput| TaggedValue::Bool(x.checked), node_id, UseThousandsSeparatorInput)) .on_commit(commit_value) .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), Separator::new(SeparatorStyle::Unrelated).widget_instance(), TextInput::new(sep) .disabled(!use_thousands) - .on_update(update_value(|x: &TextInput| TaggedValue::String(x.value.clone()), node_id, ThousandsSeparatorInput::INDEX)) + .on_update(update_value(|x: &TextInput| TaggedValue::String(x.value.clone()), node_id, ThousandsSeparatorInput)) .on_commit(commit_value) .widget_instance(), ]); } // Start at 10,000: disabled when thousands separator is off - let start_at_10000 = bool_widget( - ParameterWidgetsInfo::new(node_id, StartAt10000Input::INDEX, true, context), - CheckboxInput::default().disabled(!use_thousands), - ); + let start_at_10000 = bool_widget(ParameterWidgetsInfo::new(node_id, StartAt10000Input, true, context), CheckboxInput::default().disabled(!use_thousands)); vec![ LayoutGroup::row(decimal_places), @@ -2074,7 +2007,7 @@ pub(crate) fn string_capitalization_properties(node_id: NodeId, context: &mut No // Read the current values before borrowing context mutably for widgets let (is_simple_case, use_joiner_enabled, joiner_value) = match get_document_node(node_id, context) { Ok(document_node) => { - let capitalization_input = document_node.inputs.get(CapitalizationInput::INDEX); + let capitalization_input = document_node.input(CapitalizationInput); let capitalization_exposed = capitalization_input.is_some_and(|input| input.is_exposed()); // When exposed, the capitalization mode may change dynamically, so we can't assume it's a simple (joiner-inapplicable) mode let is_simple = !capitalization_exposed @@ -2082,11 +2015,11 @@ pub(crate) fn string_capitalization_properties(node_id: NodeId, context: &mut No capitalization_input.and_then(|input| input.as_value()), Some(TaggedValue::StringCapitalization(StringCapitalization::LowerCase | StringCapitalization::UpperCase)) ); - let use_joiner = match document_node.inputs.get(UseJoinerInput::INDEX).and_then(|input| input.as_value()) { + let use_joiner = match document_node.input(UseJoinerInput).and_then(|input| input.as_value()) { Some(&TaggedValue::Bool(x)) => x, _ => true, }; - let joiner = match document_node.inputs.get(JoinerInput::INDEX).and_then(|input| input.as_non_exposed_value()) { + let joiner = match document_node.input(JoinerInput).and_then(|input| input.as_non_exposed_value()) { Some(TaggedValue::String(x)) => Some(x.clone()), _ => None, }; @@ -2102,11 +2035,11 @@ pub(crate) fn string_capitalization_properties(node_id: NodeId, context: &mut No let joiner_disabled = is_simple_case || !use_joiner_enabled; let capitalization = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, CapitalizationInput::INDEX, true, context)) + .for_socket(ParameterWidgetsInfo::new(node_id, CapitalizationInput, true, context)) .property_row(); // Joiner row: the UseJoiner checkbox is drawn in the assist area, followed by the Joiner text input - let mut joiner_widgets = start_widgets(ParameterWidgetsInfo::new(node_id, JoinerInput::INDEX, false, context)); + let mut joiner_widgets = start_widgets(&ParameterWidgetsInfo::new(node_id, JoinerInput, false, context)); if let Some(joiner) = joiner_value { let joiner_is_empty = joiner.is_empty(); joiner_widgets.extend_from_slice(&[ @@ -2114,7 +2047,7 @@ pub(crate) fn string_capitalization_properties(node_id: NodeId, context: &mut No Separator::new(SeparatorStyle::Related).widget_instance(), CheckboxInput::new(use_joiner_enabled) .disabled(is_simple_case) - .on_update(update_value(|x: &CheckboxInput| TaggedValue::Bool(x.checked), node_id, UseJoinerInput::INDEX)) + .on_update(update_value(|x: &CheckboxInput| TaggedValue::Bool(x.checked), node_id, UseJoinerInput)) .on_commit(commit_value) .widget_instance(), Separator::new(SeparatorStyle::Related).widget_instance(), @@ -2122,7 +2055,7 @@ pub(crate) fn string_capitalization_properties(node_id: NodeId, context: &mut No TextInput::new(joiner) .placeholder(if joiner_is_empty { "Empty" } else { "" }) .disabled(joiner_disabled) - .on_update(update_value(|x: &TextInput| TaggedValue::String(x.value.clone()), node_id, JoinerInput::INDEX)) + .on_update(update_value(|x: &TextInput| TaggedValue::String(x.value.clone()), node_id, JoinerInput)) .on_commit(commit_value) .widget_instance(), ]); @@ -2148,13 +2081,13 @@ pub(crate) fn string_capitalization_properties(node_id: NodeId, context: &mut No NodeGraphMessage::SetInputValue { node_id, input_index: UseJoinerInput::INDEX, - value: TaggedValue::Bool(true), + value: TaggedValue::Bool(true).into(), } .into(), NodeGraphMessage::SetInputValue { node_id, input_index: JoinerInput::INDEX, - value: TaggedValue::String(value.clone()), + value: TaggedValue::String(value.clone()).into(), } .into(), ]), @@ -2171,7 +2104,7 @@ pub(crate) fn rectangle_properties(node_id: NodeId, context: &mut NodeProperties use graphene_std::vector::generator_nodes::rectangle::*; // Corner Radius - let mut corner_radius_row_1 = start_widgets(ParameterWidgetsInfo::new(node_id, CornerRadiusInput::INDEX, true, context)); + let mut corner_radius_row_1 = start_widgets(&ParameterWidgetsInfo::new(node_id, CornerRadiusInput, true, context)); corner_radius_row_1.push(Separator::new(SeparatorStyle::Unrelated).widget_instance()); let mut corner_radius_row_2 = vec![Separator::new(SeparatorStyle::Unrelated).widget_instance()]; @@ -2185,26 +2118,21 @@ pub(crate) fn rectangle_properties(node_id: NodeId, context: &mut NodeProperties return Vec::new(); } }; - let Some(input) = document_node.inputs.get(IndividualCornerRadiiInput::INDEX) else { + let Some(input) = document_node.input(IndividualCornerRadiiInput) else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; if let Some(&TaggedValue::Bool(is_individual)) = input.as_non_exposed_value() { // Values - let Some(input) = document_node.inputs.get(CornerRadiusInput::INDEX) else { + let Some(input) = document_node.input(CornerRadiusInput) else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; - let uniform_val = match input.as_non_exposed_value() { - Some(TaggedValue::F64(x)) => *x, - Some(TaggedValue::F64Array(values)) => values.first().copied().unwrap_or(0.), - _ => 0., - }; - let individual_val = match input.as_non_exposed_value() { - Some(&TaggedValue::F64(x)) => vec![x; 4], - Some(TaggedValue::F64Array(values)) => values.clone(), - _ => vec![0.; 4], + let corner_values = match input.as_non_exposed_value() { + Some(TaggedValue::BoxCorners(values)) => BoxCorners::from(values.clone()).to_corner_values(), + _ => [0.; 4], }; + let uniform_val = corner_values[0]; // Uniform/individual radio input widget let uniform = RadioEntryData::new("Uniform") @@ -2214,19 +2142,18 @@ pub(crate) fn rectangle_properties(node_id: NodeId, context: &mut NodeProperties NodeGraphMessage::SetInputValue { node_id, input_index: IndividualCornerRadiiInput::INDEX, - value: TaggedValue::Bool(false), + value: TaggedValue::Bool(false).into(), } .into(), NodeGraphMessage::SetInputValue { node_id, input_index: CornerRadiusInput::INDEX, - value: TaggedValue::F64(uniform_val), + value: TaggedValue::BoxCorners(vec![uniform_val]).into(), } .into(), ]), }) .on_commit(commit_value); - let individual_val_for_switch = individual_val.clone(); let individual = RadioEntryData::new("Individual") .label("Individual") .on_update(move |_| Message::Batched { @@ -2234,13 +2161,13 @@ pub(crate) fn rectangle_properties(node_id: NodeId, context: &mut NodeProperties NodeGraphMessage::SetInputValue { node_id, input_index: IndividualCornerRadiiInput::INDEX, - value: TaggedValue::Bool(true), + value: TaggedValue::Bool(true).into(), } .into(), NodeGraphMessage::SetInputValue { node_id, input_index: CornerRadiusInput::INDEX, - value: TaggedValue::F64Array(individual_val_for_switch.clone()), + value: TaggedValue::BoxCorners(corner_values.to_vec()).into(), } .into(), ]), @@ -2251,24 +2178,19 @@ pub(crate) fn rectangle_properties(node_id: NodeId, context: &mut NodeProperties // Radius value input widget let input_widget = if is_individual { - let from_string = |string: &str| { - string - .split(&[',', ' ']) - .filter(|x| !x.is_empty()) - .map(str::parse::) - .collect::, _>>() - .ok() - .map(|values| TaggedValue::F64Array(values.into_iter().take(4).collect())) - }; TextInput::default() - .value(individual_val.iter().map(|v| v.to_string()).collect::>().join(", ")) - .on_update(optionally_update_value(move |x: &TextInput| from_string(&x.value), node_id, CornerRadiusInput::INDEX)) + .value(corner_values.iter().map(|v| v.to_string()).collect::>().join(", ")) + .on_update(optionally_update_value( + move |x: &TextInput| Some(TaggedValue::BoxCorners(graphene_std::core_types::misc::parse_f64_list(&x.value))), + node_id, + CornerRadiusInput, + )) .widget_instance() } else { NumberInput::default() .value(Some(uniform_val)) .unit(" px") - .on_update(update_value(move |x: &NumberInput| TaggedValue::F64(x.value.unwrap()), node_id, CornerRadiusInput::INDEX)) + .on_update(update_value(move |x: &NumberInput| TaggedValue::BoxCorners(vec![x.value.unwrap()]), node_id, CornerRadiusInput)) .on_commit(commit_value) .widget_instance() }; @@ -2276,13 +2198,13 @@ pub(crate) fn rectangle_properties(node_id: NodeId, context: &mut NodeProperties } // Size X - let size_x = number_widget(ParameterWidgetsInfo::new(node_id, WidthInput::INDEX, true, context), NumberInput::default()); + let size_x = number_widget(ParameterWidgetsInfo::new(node_id, WidthInput, true, context), NumberInput::default()); // Size Y - let size_y = number_widget(ParameterWidgetsInfo::new(node_id, HeightInput::INDEX, true, context), NumberInput::default()); + let size_y = number_widget(ParameterWidgetsInfo::new(node_id, HeightInput, true, context), NumberInput::default()); // Clamped - let clamped = bool_widget(ParameterWidgetsInfo::new(node_id, ClampedInput::INDEX, true, context), CheckboxInput::default()); + let clamped = bool_widget(ParameterWidgetsInfo::new(node_id, ClampedInput, true, context), CheckboxInput::default()); vec![ LayoutGroup::row(size_x), @@ -2320,7 +2242,7 @@ pub(crate) fn generate_node_properties(node_id: NodeId, context: &mut NodeProper // Hide inputs that are connected to a scope if let Some(NodeInput::Scope(_)) = context .network_interface - .input_from_connector(&InputConnector::node(node_id, input_index), context.selection_network_path) + .input_from_connector(&InputConnector::node_at_index(node_id, input_index), context.selection_network_path) { continue; } @@ -2337,10 +2259,14 @@ pub(crate) fn generate_node_properties(node_id: NodeId, context: &mut NodeProper let mut unit_suffix = None; let input_type = match implementation { DocumentNodeImplementation::ProtoNode(proto_node_identifier) => 'early_return: { + // Clone to end the `network_interface` borrow held via `implementation`, freeing the mutable borrow `input_type` needs below + let proto_node_identifier = proto_node_identifier.clone(); + + let mut default_type = None; if let Some(field) = graphene_std::registry::NODE_METADATA .lock() .unwrap() - .get(proto_node_identifier) + .get(&proto_node_identifier) .and_then(|metadata| metadata.fields.get(input_index)) { number_options = NumberOptions { @@ -2353,12 +2279,14 @@ pub(crate) fn generate_node_properties(node_id: NodeId, context: &mut NodeProper display_decimal_places = field.number_display_decimal_places; unit_suffix = field.unit; step = field.number_step; - if let Some(ref default) = field.default_type { - break 'early_return default.clone(); - } + default_type = field.default_type.clone(); } - let Some(implementations) = &interpreted_executor::node_registry::NODE_REGISTRY.get(proto_node_identifier) else { + if let Some(default) = default_type { + break 'early_return default; + } + + let Some(implementations) = &interpreted_executor::node_registry::NODE_REGISTRY.get(&proto_node_identifier) else { log::error!("Could not get implementation for protonode {proto_node_identifier:?}"); return Vec::new(); }; @@ -2372,7 +2300,7 @@ pub(crate) fn generate_node_properties(node_id: NodeId, context: &mut NodeProper } _ => context .network_interface - .input_type(&InputConnector::node(node_id, input_index), context.selection_network_path) + .input_type(&InputConnector::node_at_index(node_id, input_index), context.selection_network_path) .compiled_nested_type() .cloned() .unwrap_or(concrete!(())), @@ -2434,7 +2362,7 @@ fn root_layer_for_chain_node(node_id: NodeId, context: &mut NodePropertiesContex /// and reusing the same helper the Gradient tool uses, so canvas tilt and layer transforms behave identically. fn gradient_orientation_in_fill_node(node_id: NodeId, gradient_transform: DAffine2, context: &mut NodePropertiesContext) -> Option { let layer = root_layer_for_chain_node(node_id, context)?; - let transform = graph_modification_utils::gradient_space_transform(layer, context.network_interface); + let transform = graph_modification_utils::gradient_to_viewport_transform(layer, context.network_interface); Some(graph_modification_utils::gradient_orientation_rightward(transform * gradient_transform)) } @@ -2446,9 +2374,9 @@ pub(crate) fn fill_properties(node_id: NodeId, context: &mut NodePropertiesConte enum ResolvedFill { Solid(Option), Gradient { - gradient: GradientStops, - gradient_type: GradientType, - spread_method: GradientSpreadMethod, + gradient: Gradient, + gradient_form: GradientForm, + settings: GradientSettings, transform: DAffine2, /// Whether the transform input holds a plain value (so the "Reverse Direction" button may write to it) rather than a wire. transform_is_value: bool, @@ -2456,13 +2384,10 @@ pub(crate) fn fill_properties(node_id: NodeId, context: &mut NodePropertiesConte Other, } - let connector = InputConnector::node(node_id, FillInput::INDEX); - let input_type = context.network_interface.input_type(&connector, context.selection_network_path); - // Pass blank_assist=false because the assist slot is filled below ("Reverse Stops" button when in gradient mode) - let mut widgets_first_row = start_widgets(ParameterWidgetsInfo::new(node_id, FillInput::INDEX, false, context)); + let mut widgets_first_row = start_widgets(&ParameterWidgetsInfo::new(node_id, PaintInput, false, context)); - if get_document_node(node_id, context).is_ok_and(|node| node.inputs.get(FillInput::INDEX).is_some_and(|input| input.is_exposed())) { + if get_document_node(node_id, context).is_ok_and(|node| node.input(PaintInput).is_some_and(|input| input.is_exposed())) { return vec![LayoutGroup::row(widgets_first_row)]; } @@ -2470,61 +2395,57 @@ pub(crate) fn fill_properties(node_id: NodeId, context: &mut NodePropertiesConte // bounding-box default transform needs the layer, and it falls back to a unit box when there isn't one. let layer = root_layer_for_chain_node(node_id, context); - let fill = match input_type.compiled_nested_type() { - Some(ty) if ty == &concrete!(List) => { - if let Ok(document_node) = get_document_node(node_id, context) { - let color = match document_node.inputs[FillInput::INDEX].as_value() { - Some(&TaggedValue::Color(c)) => c, - _ => None, - }; - ResolvedFill::Solid(color) - } else { - ResolvedFill::Other - } - } - Some(ty) if ty == &concrete!(List) => { - // Read this node's own inputs rather than the layer's nearest Fill, which may be a different node when Fills are chained - if let Ok(document_node) = get_document_node(node_id, context) - && let Some(gradient) = graph_modification_utils::read_fill_node_gradient(document_node, || { + let fill = match get_document_node(node_id, context) { + Ok(document_node) => match document_node.input_value(PaintInput) { + Some(TaggedValue::Color(color)) => ResolvedFill::Solid(Some(*color)), + Some(value) if value.is_no_paint() => ResolvedFill::Solid(None), + Some(TaggedValue::GradientRamp(_)) => { + match graph_modification_utils::read_fill_node_gradient(document_node, || { layer.map_or([DVec2::ZERO, DVec2::ONE], |layer| context.network_interface.document_metadata().nonzero_bounding_box(layer)) }) { - ResolvedFill::Gradient { - gradient: gradient.stops, - gradient_type: gradient.gradient_type, - spread_method: gradient.spread_method, - transform: gradient.transform, - transform_is_value: gradient.transform_is_value, + Some(gradient) => ResolvedFill::Gradient { + gradient: gradient.stops, + gradient_form: gradient.gradient_form, + settings: gradient.settings, + transform: gradient.transform, + transform_is_value: gradient.transform_is_value, + }, + None => ResolvedFill::Other, } - } else { - ResolvedFill::Other } - } - _ => ResolvedFill::Other, + _ => ResolvedFill::Other, + }, + Err(_) => ResolvedFill::Other, }; let (backup_color, backup_gradient) = match get_document_node(node_id, context) { Ok(document_node) => { - let backup_color = match document_node.inputs[BackupColorInput::INDEX].as_value() { - Some(&TaggedValue::Color(color)) => color, + let backup_color = match document_node.input_value(BackupColorInput) { + Some(&TaggedValue::Color(color)) => Some(color), _ => None, }; - let backup_stops = match document_node.inputs[BackupGradientInput::INDEX].as_value() { - Some(TaggedValue::Gradient(stops)) => stops.clone(), - _ => GradientStops::default(), + let backup_stops = match document_node.input_value(BackupGradientInput) { + Some(TaggedValue::GradientRamp(ramp)) => ramp.clone(), + _ => GradientRamp::black_to_white(), }; (backup_color, backup_stops) } - Err(_) => (None, GradientStops::default()), + Err(_) => (None, GradientRamp::black_to_white()), }; match &fill { - ResolvedFill::Gradient { gradient: stops, .. } => { + ResolvedFill::Gradient { gradient: stops, settings, .. } => { let stops = stops.clone(); + let settings = *settings; let reverse_button = IconButton::new("Reverse", 24) .tooltip_label("Reverse Stops") .tooltip_description("Reverse the gradient color stops.") - .on_update(update_value(move |_| TaggedValue::Gradient(stops.reversed()), node_id, FillInput::INDEX)) + .on_update(update_value( + move |_| TaggedValue::GradientRamp(GradientRamp::from(stops.reversed(settings.cyclic)).with_settings(settings)), + node_id, + PaintInput, + )) .widget_instance(); widgets_first_row.push(Separator::new(SeparatorStyle::Unrelated).widget_instance()); widgets_first_row.push(reverse_button); @@ -2532,47 +2453,52 @@ pub(crate) fn fill_properties(node_id: NodeId, context: &mut NodePropertiesConte _ => add_blank_assist(&mut widgets_first_row), } - let fill_choice_ui = match &fill { + let widget_value = match &fill { ResolvedFill::Solid(color) => { if let Some(color) = color { - FillChoiceUI::Solid(SRGBA8::from(*color)) + FillChoice::::Solid(SRGBA8::from(*color)) } else { - FillChoiceUI::None + FillChoice::::None } } - ResolvedFill::Gradient { gradient: stops, .. } => FillChoiceUI::Gradient(GradientStopsUI::from(stops)), - ResolvedFill::Other => FillChoiceUI::None, + ResolvedFill::Gradient { gradient: stops, settings, .. } => FillChoice::::Gradient(GradientRamp::from(stops).with_settings(*settings)), + ResolvedFill::Other => FillChoice::::None, }; - let solid_set_messages = move |color: Option| Message::Batched { + let solid_set_messages = move |color: Option| { + let mut messages = vec![ + NodeGraphMessage::SetInputValue { + node_id, + input_index: PaintInput::INDEX, + value: color.map_or_else(TaggedValue::no_paint, TaggedValue::Color).into(), + } + .into(), + ]; + if let Some(color) = color { + messages.push( + NodeGraphMessage::SetInputValue { + node_id, + input_index: BackupColorInput::INDEX, + value: TaggedValue::Color(color).into(), + } + .into(), + ); + } + Message::Batched { messages: messages.into() } + }; + + let gradient_set_messages = move |ramp: GradientRamp| Message::Batched { messages: Box::new([ NodeGraphMessage::SetInputValue { node_id, - input_index: FillInput::INDEX, - value: TaggedValue::Color(color), - } - .into(), - NodeGraphMessage::SetInputValue { - node_id, - input_index: BackupColorInput::INDEX, - value: TaggedValue::Color(color), - } - .into(), - ]), - }; - - let gradient_set_messages = move |gradient: GradientStops| Message::Batched { - messages: Box::new([ - NodeGraphMessage::SetInputValue { - node_id, - input_index: FillInput::INDEX, - value: TaggedValue::Gradient(gradient.clone()), + input_index: PaintInput::INDEX, + value: TaggedValue::GradientRamp(ramp.clone()).into(), } .into(), NodeGraphMessage::SetInputValue { node_id, input_index: BackupGradientInput::INDEX, - value: TaggedValue::Gradient(gradient), + value: TaggedValue::GradientRamp(ramp).into(), } .into(), ]), @@ -2581,17 +2507,14 @@ pub(crate) fn fill_properties(node_id: NodeId, context: &mut NodePropertiesConte widgets_first_row.push(Separator::new(SeparatorStyle::Unrelated).widget_instance()); widgets_first_row.push( ColorInput::default() - .value(fill_choice_ui) + .value(widget_value) .on_update(move |x: &ColorInput| match &x.value { - FillChoiceUI::None => solid_set_messages(None), - FillChoiceUI::Solid(srgba8) => { + FillChoice::::None => solid_set_messages(None), + FillChoice::::Solid(srgba8) => { let color = Some(Color::from(*srgba8)); solid_set_messages(color) } - FillChoiceUI::Gradient(gradient_stops_ui) => { - let gradient = GradientStops::from(gradient_stops_ui); - gradient_set_messages(gradient) - } + FillChoice::::Gradient(ramp) => gradient_set_messages(GradientRamp::from(ramp)), }) .on_commit(commit_value) .widget_instance(), @@ -2606,11 +2529,11 @@ pub(crate) fn fill_properties(node_id: NodeId, context: &mut NodePropertiesConte let entries = vec![ RadioEntryData::new("solid") .label("Solid") - .on_update(update_value(move |_| TaggedValue::Color(backup_color), node_id, FillInput::INDEX)) + .on_update(update_value(move |_| backup_color.map_or_else(TaggedValue::no_paint, TaggedValue::Color), node_id, PaintInput)) .on_commit(commit_value), RadioEntryData::new("gradient") .label("Gradient") - .on_update(update_value(move |_| TaggedValue::Gradient(backup_gradient.clone()), node_id, FillInput::INDEX)) + .on_update(update_value(move |_| TaggedValue::GradientRamp(backup_gradient.clone()), node_id, PaintInput)) .on_commit(commit_value), ]; @@ -2626,37 +2549,15 @@ pub(crate) fn fill_properties(node_id: NodeId, context: &mut NodePropertiesConte widgets.push(fill_type_switch); if let ResolvedFill::Gradient { - gradient_type, - spread_method, + gradient_form, transform, transform_is_value, .. } = fill.clone() { - // Linear/Radial radio: blank assist (the "Reverse Direction" button has been moved down to the spread method row) - let mut row = vec![TextLabel::new("").widget_instance()]; - add_blank_assist(&mut row); - - let entries = [GradientType::Linear, GradientType::Radial] - .iter() - .map(|&grad_type| { - RadioEntryData::new(format!("{:?}", grad_type)) - .label(format!("{:?}", grad_type)) - .on_update(update_value(move |_| TaggedValue::GradientType(grad_type), node_id, GradientTypeInput::INDEX)) - .on_commit(commit_value) - }) - .collect(); - - row.extend_from_slice(&[ - Separator::new(SeparatorStyle::Unrelated).widget_instance(), - RadioInput::new(entries).selected_index(Some(gradient_type as u32)).widget_instance(), - ]); - - widgets.push(LayoutGroup::row(row)); - - // "Reverse Direction" button (assist) plus the Pad/Reflect/Repeat radio. Icon orientation is resolved in viewport + // "Reverse Direction" button (assist) beside the Linear/Radial radio. Icon orientation is resolved in viewport // space so canvas tilt and layer transforms behave the same as in the Gradient tool's control bar. - let mut spread_methods_row = vec![TextLabel::new("").widget_instance()]; + let mut row = vec![TextLabel::new("").widget_instance()]; // The button writes a value into the transform input, so only offer it when the input isn't wired if transform_is_value { @@ -2667,35 +2568,46 @@ pub(crate) fn fill_properties(node_id: NodeId, context: &mut NodePropertiesConte let reverse_direction_button = IconButton::new(if orientation_rightward { "ReverseRadialGradientToRight" } else { "ReverseRadialGradientToLeft" }, 24) .tooltip_label("Reverse Direction") - .tooltip_description(if gradient_type == GradientType::Radial { - "Reverse which end the gradient radiates from." - } else { - "Swap the start and end points of the gradient line." + .tooltip_description(graph_modification_utils::reverse_direction_tooltip_description(gradient_form)) + .on_update(move |_| Message::Batched { + messages: Box::new([ + NodeGraphMessage::SetInputValue { + node_id, + input_index: HasTransformInput::INDEX, + value: TaggedValue::Bool(true).into(), + } + .into(), + NodeGraphMessage::SetInputValue { + node_id, + input_index: TransformInput::INDEX, + value: TaggedValue::DAffine2(new_transform).into(), + } + .into(), + ]), }) - .on_update(update_value(move |_| TaggedValue::OptionalDAffine2(Some(new_transform)), node_id, TransformInput::INDEX)) .widget_instance(); - spread_methods_row.push(Separator::new(SeparatorStyle::Unrelated).widget_instance()); - spread_methods_row.push(reverse_direction_button); + row.push(Separator::new(SeparatorStyle::Unrelated).widget_instance()); + row.push(reverse_direction_button); } else { - add_blank_assist(&mut spread_methods_row); + add_blank_assist(&mut row); } - let spread_method_entries = [GradientSpreadMethod::Pad, GradientSpreadMethod::Reflect, GradientSpreadMethod::Repeat] + let entries = [GradientForm::Linear, GradientForm::Radial] .iter() - .map(|&spread_method| { - RadioEntryData::new(format!("{:?}", spread_method)) - .label(format!("{:?}", spread_method)) - .on_update(update_value(move |_| TaggedValue::GradientSpreadMethod(spread_method), node_id, SpreadMethodInput::INDEX)) + .map(|&gradient_form| { + RadioEntryData::new(format!("{:?}", gradient_form)) + .label(gradient_form.to_string()) + .on_update(update_value(move |_| TaggedValue::GradientForm(gradient_form), node_id, GradientFormInput)) .on_commit(commit_value) }) .collect(); - spread_methods_row.extend_from_slice(&[ + row.extend_from_slice(&[ Separator::new(SeparatorStyle::Unrelated).widget_instance(), - RadioInput::new(spread_method_entries).selected_index(Some(spread_method as u32)).widget_instance(), + RadioInput::new(entries).selected_index(Some(gradient_form as u32)).widget_instance(), ]); - widgets.push(LayoutGroup::row(spread_methods_row)); + widgets.push(LayoutGroup::row(row)); } widgets @@ -2711,41 +2623,36 @@ pub fn stroke_properties(node_id: NodeId, context: &mut NodePropertiesContext) - return Vec::new(); } }; - let join_value = match &document_node.inputs[JoinInput::INDEX].as_value() { + let join_value = match &document_node.input_value(JoinInput) { Some(TaggedValue::StrokeJoin(x)) => x, _ => &StrokeJoin::Miter, }; - let has_dash_lengths = match &document_node.inputs[DashLengthsInput::INDEX].as_value() { - Some(TaggedValue::F64Array(values)) => values.is_empty(), + let has_dash_lengths = match &document_node.input_value(DashPatternInput) { + Some(TaggedValue::DashPattern(lengths)) => lengths.is_empty(), _ => true, }; let miter_limit_disabled = join_value != &StrokeJoin::Miter; let color = color_widget( - ParameterWidgetsInfo::new(node_id, PaintInput::INDEX, true, context), + ParameterWidgetsInfo::new(node_id, PaintInput, true, context), crate::messages::layout::utility_types::widgets::button_widgets::ColorInput::default(), ); - let weight = number_widget(ParameterWidgetsInfo::new(node_id, WeightInput::INDEX, true, context), NumberInput::default().unit(" px").min(0.)); - let align = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, AlignInput::INDEX, true, context)) - .property_row(); - let cap = enum_choice::().for_socket(ParameterWidgetsInfo::new(node_id, CapInput::INDEX, true, context)).property_row(); - let join = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, JoinInput::INDEX, true, context)) - .property_row(); + let weight = number_widget(ParameterWidgetsInfo::new(node_id, WeightInput, true, context), NumberInput::default().unit(" px").min(0.)); + let align = enum_choice::().for_socket(ParameterWidgetsInfo::new(node_id, AlignInput, true, context)).property_row(); + let cap = enum_choice::().for_socket(ParameterWidgetsInfo::new(node_id, CapInput, true, context)).property_row(); + let join = enum_choice::().for_socket(ParameterWidgetsInfo::new(node_id, JoinInput, true, context)).property_row(); let miter_limit = number_widget( - ParameterWidgetsInfo::new(node_id, MiterLimitInput::INDEX, true, context), + ParameterWidgetsInfo::new(node_id, MiterLimitInput, true, context), NumberInput::default().min(0.).disabled(miter_limit_disabled), ); - let paint_order = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, PaintOrderInput::INDEX, true, context)) - .property_row(); + // Our stroke node keeps a paint order input rather than encoding the order by Fill/Stroke node adjacency + let paint_order = enum_choice::().for_socket(ParameterWidgetsInfo::new(node_id, PaintOrderInput, true, context)).property_row(); let disabled_number_input = NumberInput::default().unit(" px").disabled(has_dash_lengths); - let dash_lengths = array_of_number_widget(ParameterWidgetsInfo::new(node_id, DashLengthsInput::INDEX, true, context), TextInput::default().centered(true)); + let dash_lengths = dash_pattern_widget(ParameterWidgetsInfo::new(node_id, DashPatternInput, true, context), TextInput::default().centered(true)); let number_input = disabled_number_input; - let dash_offset = number_widget(ParameterWidgetsInfo::new(node_id, DashOffsetInput::INDEX, true, context), number_input); + let dash_offset = number_widget(ParameterWidgetsInfo::new(node_id, DashOffsetInput, true, context), number_input); vec![ color, @@ -2764,11 +2671,9 @@ pub fn offset_path_properties(node_id: NodeId, context: &mut NodePropertiesConte use graphene_std::vector::offset_path::*; let number_input = NumberInput::default().unit(" px"); - let distance = number_widget(ParameterWidgetsInfo::new(node_id, DistanceInput::INDEX, true, context), number_input); + let distance = number_widget(ParameterWidgetsInfo::new(node_id, DistanceInput, true, context), number_input); - let join = enum_choice::() - .for_socket(ParameterWidgetsInfo::new(node_id, JoinInput::INDEX, true, context)) - .property_row(); + let join = enum_choice::().for_socket(ParameterWidgetsInfo::new(node_id, JoinInput, true, context)).property_row(); let document_node = match get_document_node(node_id, context) { Ok(document_node) => document_node, @@ -2778,13 +2683,13 @@ pub fn offset_path_properties(node_id: NodeId, context: &mut NodePropertiesConte } }; let number_input = NumberInput::default().min(0.).disabled({ - let join_val = match &document_node.inputs[JoinInput::INDEX].as_value() { + let join_value = match &document_node.input_value(JoinInput) { Some(TaggedValue::StrokeJoin(x)) => x, _ => &StrokeJoin::Miter, }; - join_val != &StrokeJoin::Miter + join_value != &StrokeJoin::Miter }); - let miter_limit = number_widget(ParameterWidgetsInfo::new(node_id, MiterLimitInput::INDEX, true, context), number_input); + let miter_limit = number_widget(ParameterWidgetsInfo::new(node_id, MiterLimitInput, true, context), number_input); vec![LayoutGroup::row(distance), join, LayoutGroup::row(miter_limit)] } @@ -2793,7 +2698,7 @@ pub fn math_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> use graphene_std::math_nodes::math::*; let expression = (|| { - let mut widgets = start_widgets(ParameterWidgetsInfo::new(node_id, ExpressionInput::INDEX, true, context)); + let mut widgets = start_widgets(&ParameterWidgetsInfo::new(node_id, ExpressionInput, true, context)); let document_node = match get_document_node(node_id, context) { Ok(document_node) => document_node, @@ -2802,7 +2707,7 @@ pub fn math_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> return Vec::new(); } }; - let Some(input) = document_node.inputs.get(ExpressionInput::INDEX) else { + let Some(input) = document_node.input(ExpressionInput) else { log::warn!("A widget failed to be built because its node's input index is invalid."); return vec![]; }; @@ -2826,7 +2731,7 @@ pub fn math_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> }) }, node_id, - ExpressionInput::INDEX, + ExpressionInput, )) .on_commit(commit_value) .widget_instance(), @@ -2834,7 +2739,7 @@ pub fn math_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> } widgets })(); - let operand_b = number_widget(ParameterWidgetsInfo::new(node_id, OperandBInput::::INDEX, true, context), NumberInput::default()); + let operand_b = number_widget(ParameterWidgetsInfo::new(node_id, OperandBInput, true, context), NumberInput::default()); let operand_a_hint = vec![TextLabel::new("(Operand A is the primary input)").widget_instance()]; vec![ @@ -2860,11 +2765,32 @@ pub struct ParameterWidgetsInfo<'a> { } impl<'a> ParameterWidgetsInfo<'a> { - pub fn new(node_id: NodeId, index: usize, blank_assist: bool, context: &'a mut NodePropertiesContext) -> ParameterWidgetsInfo<'a> { + /// Reference the parameter by its symbol, e.g. `ParameterWidgetsInfo::new(node_id, brightness_contrast::BrightnessInput, true, context)`, or by an erased [`ParameterRef`] chosen at runtime. + pub fn new(node_id: NodeId, parameter: impl Into, blank_assist: bool, context: &'a mut NodePropertiesContext) -> ParameterWidgetsInfo<'a> { + Self::at_index(node_id, parameter.into().input_index, blank_assist, context) + } + + /// The input slot this parameter row edits. + pub fn input(&self) -> Option<&'a NodeInput> { + self.document_node?.inputs.get(self.index) + } + + /// A widget callback that writes the callback-produced value to this parameter. + pub fn update_value(&self, value: impl Fn(&T) -> TaggedValue + 'static + Send + Sync) -> impl Fn(&T) -> Message + 'static + Send + Sync { + update_value_at_index(value, self.node_id, self.index) + } + + /// Like [`Self::update_value`], for callbacks that sometimes produce no value. + pub fn optionally_update_value(&self, value: impl Fn(&T) -> Option + 'static + Send + Sync) -> impl Fn(&T) -> Message + 'static + Send + Sync { + optionally_update_value_at_index(value, self.node_id, self.index) + } + + /// Reference the parameter by a runtime input index, for callers that receive the index dynamically (e.g. widget overrides). + pub fn at_index(node_id: NodeId, index: usize, blank_assist: bool, context: &'a mut NodePropertiesContext) -> ParameterWidgetsInfo<'a> { let (name, description) = context.network_interface.displayed_input_name_and_description(&node_id, index, context.selection_network_path); let input_type = context .network_interface - .input_type_not_invalid(&InputConnector::node(node_id, index), context.selection_network_path) + .input_type_not_invalid(&InputConnector::node_at_index(node_id, index), context.selection_network_path) .displayed_type(); let document_node = context.network_interface.document_node(&node_id, context.selection_network_path); @@ -2945,24 +2871,22 @@ pub mod choice { U: Fn(&E) -> Message + 'static + Send + Sync, C: Fn(&()) -> Message + 'static + Send + Sync, { - let items = E::list() - .iter() + let updater = std::sync::Arc::new(updater_factory()); + let committer = std::sync::Arc::new(committer_factory()); + + let items = MenuListEntry::sections_from_choice_type(move |variant: E| updater(&variant)) + .into_iter() .map(|section| { section - .iter() - .map(|(item, metadata)| { - let updater = updater_factory(); - let committer = committer_factory(); - MenuListEntry::new(metadata.name) - .label(metadata.label) - .tooltip_label(metadata.label) - .tooltip_description(metadata.description.unwrap_or_default()) - .on_update(move |_| updater(item)) - .on_commit(committer) + .into_iter() + .map(|entry| { + let committer = committer.clone(); + entry.on_commit(move |value| committer(value)) }) .collect() }) .collect(); + DropdownInput::new(items).disabled(self.disabled).selected_index(Some(current.as_u32())).widget_instance() } @@ -2971,20 +2895,18 @@ pub mod choice { U: Fn(&E) -> Message + 'static + Send + Sync, C: Fn(&()) -> Message + 'static + Send + Sync, { - let items = E::list() - .iter() - .flat_map(|section| section.iter()) - .map(|(item, var_meta)| { - let updater = updater_factory(); - let committer = committer_factory(); - let entry = RadioEntryData::new(var_meta.name) - .on_update(move |_| updater(item)) - .on_commit(committer) - .tooltip_label(var_meta.label) - .tooltip_description(var_meta.description.unwrap_or_default()); - if let Some(icon) = var_meta.icon { entry.icon(icon) } else { entry.label(var_meta.label) } + // The entry builder clones one callback across all variants, so each factory yields a single shared handle + let updater = std::sync::Arc::new(updater_factory()); + let committer = std::sync::Arc::new(committer_factory()); + + let items = RadioEntryData::list_from_choice_type(move |variant: E| updater(&variant)) + .into_iter() + .map(|entry| { + let committer = committer.clone(); + entry.on_commit(move |value| committer(value)) }) .collect(); + RadioInput::new(items).selected_index(Some(current.as_u32())).disabled(self.disabled).widget_instance() } } @@ -3032,15 +2954,14 @@ pub mod choice { } pub fn property_row(self) -> LayoutGroup { - let ParameterWidgetsInfo { document_node, node_id, index, .. } = self.parameter_info; - let Some(document_node) = document_node else { - log::error!("Could not get document node when building property row for node {node_id:?}"); + if self.parameter_info.document_node.is_none() { + log::error!("Could not get document node when building property row for node {:?}", self.parameter_info.node_id); return LayoutGroup::row(Vec::new()); - }; + } - let mut widgets = super::start_widgets(self.parameter_info); + let mut widgets = super::start_widgets(&self.parameter_info); - let Some(input) = document_node.inputs.get(index) else { + let Some(input) = self.parameter_info.input() else { log::warn!("A widget failed to be built because its node's input index is invalid."); return LayoutGroup::row(vec![]); }; @@ -3049,7 +2970,7 @@ pub mod choice { if let Some(current) = input { let committer = || super::commit_value; - let updater = || super::update_value(move |v: &W::Value| TaggedValue::from(v.clone()), node_id, index); + let updater = || self.parameter_info.update_value(move |v: &W::Value| TaggedValue::from(v.clone())); let widget = self.widget_factory.build(current, updater, committer); widgets.extend_from_slice(&[Separator::new(SeparatorStyle::Unrelated).widget_instance(), widget]); } diff --git a/editor/src/messages/portfolio/document/node_graph/utility_types.rs b/editor/src/messages/portfolio/document/node_graph/utility_types.rs index cf377381fd..102b649274 100644 --- a/editor/src/messages/portfolio/document/node_graph/utility_types.rs +++ b/editor/src/messages/portfolio/document/node_graph/utility_types.rs @@ -105,6 +105,13 @@ pub struct FrontendNode { pub locked: bool, } +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)] +pub enum InputTypeConstraint { + Limited(std::collections::BTreeSet), + All, +} + #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)] pub struct FrontendNodeType { @@ -112,7 +119,7 @@ pub struct FrontendNodeType { pub name: String, pub category: String, #[serde(rename = "inputTypes")] - pub input_types: Vec, + pub input_types: Vec, } #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] diff --git a/editor/src/messages/portfolio/document/overlays/grid_overlays.rs b/editor/src/messages/portfolio/document/overlays/grid_overlays.rs index ede2a26091..cff2a33139 100644 --- a/editor/src/messages/portfolio/document/overlays/grid_overlays.rs +++ b/editor/src/messages/portfolio/document/overlays/grid_overlays.rs @@ -5,7 +5,7 @@ use crate::messages::prelude::*; use glam::DVec2; use graphene_std::color::SRGBA8; use graphene_std::renderer::Quad; -use graphene_std::vector::style::FillChoiceUI; +use graphene_std::vector::style::FillChoice; fn grid_overlay_rectangular(document: &DocumentMessageHandler, overlay_context: &mut OverlayContext, spacing: DVec2) { let origin = document.snapping_state.grid.origin; @@ -274,7 +274,7 @@ pub fn overlay_options(grid: &GridSnapping) -> Vec { Separator::new(SeparatorStyle::Related).widget_instance(), ]); color_widgets.push( - ColorInput::new(FillChoiceUI::Solid(SRGBA8::from_hex_str(&grid.color).unwrap_or(SRGBA8::BLACK))) + ColorInput::new(FillChoice::::Solid(SRGBA8::from_hex_str(&grid.color).unwrap_or(SRGBA8::BLACK))) .tooltip_label("Grid Display Color") .allow_none(false) .on_update(update_val::(grid, |grid, color| { diff --git a/editor/src/messages/portfolio/document/overlays/utility_functions.rs b/editor/src/messages/portfolio/document/overlays/utility_functions.rs index 57315f58d3..59de9f797e 100644 --- a/editor/src/messages/portfolio/document/overlays/utility_functions.rs +++ b/editor/src/messages/portfolio/document/overlays/utility_functions.rs @@ -1,17 +1,16 @@ use super::utility_types::{DrawHandles, OverlayContext}; -use crate::consts::HIDE_HANDLE_DISTANCE; +use crate::consts::{HIDE_HANDLE_DISTANCE, SNAP_POINT_TOLERANCE}; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface; -use crate::messages::portfolio::fonts::FALLBACK_FONT_RESOURCE; +pub use crate::messages::portfolio::document::utility_types::text_metrics::text_width; use crate::messages::tool::common_functionality::shape_editor::{SelectedLayerState, ShapeState}; +use crate::messages::tool::common_functionality::utility_functions::closest_open_path_endpoint; use crate::messages::tool::tool_messages::tool_prelude::DocumentMessageHandler; use glam::{DAffine2, DVec2}; -use graphene_std::subpath::{Bezier, BezierHandles}; -use graphene_std::text::{TextAlign, TextContext, TypesettingConfig}; -use graphene_std::vector::misc::ManipulatorPointId; +use graphene_std::vector::misc::{BezierHandles, ManipulatorPointId, point_to_dvec2, segment_to_handles}; use graphene_std::vector::{PointId, SegmentId, Vector}; +use kurbo::{Affine, ParamCurve, PathSeg}; use std::collections::HashMap; -use std::sync::{LazyLock, Mutex}; #[cfg(target_family = "wasm")] use wasm_bindgen::JsCast; @@ -61,7 +60,7 @@ pub fn selected_segments_for_layer(vector: &Vector, state: &SelectedLayerState) .collect::>(); // Adding segments which are are connected to selected anchors - for (segment_id, _bezier, start, end) in vector.segment_bezier_iter() { + for (segment_id, _, start, end) in vector.segment_iter() { if selected_anchors.contains(&start) || selected_anchors.contains(&end) { selected_segments.push(segment_id); } @@ -69,23 +68,25 @@ pub fn selected_segments_for_layer(vector: &Vector, state: &SelectedLayerState) selected_segments } -fn overlay_bezier_handles(bezier: Bezier, segment_id: SegmentId, transform: DAffine2, is_selected: impl Fn(ManipulatorPointId) -> bool, overlay_context: &mut OverlayContext) { - let bezier = bezier.apply_transformation(|point| transform.transform_point2(point)); +fn overlay_bezier_handles(segment: PathSeg, segment_id: SegmentId, transform: DAffine2, is_selected: impl Fn(ManipulatorPointId) -> bool, overlay_context: &mut OverlayContext) { + let segment = Affine::new(transform.to_cols_array()) * segment; + let segment_start = point_to_dvec2(segment.start()); + let segment_end = point_to_dvec2(segment.end()); let not_under_anchor = |position: DVec2, anchor: DVec2| position.distance_squared(anchor) >= HIDE_HANDLE_DISTANCE * HIDE_HANDLE_DISTANCE; - match bezier.handles { - BezierHandles::Quadratic { handle } if not_under_anchor(handle, bezier.start) && not_under_anchor(handle, bezier.end) => { - overlay_context.line(handle, bezier.start, None, None); - overlay_context.line(handle, bezier.end, None, None); + match segment_to_handles(&segment) { + BezierHandles::Quadratic { handle } if not_under_anchor(handle, segment_start) && not_under_anchor(handle, segment_end) => { + overlay_context.line(handle, segment_start, None, None); + overlay_context.line(handle, segment_end, None, None); overlay_context.manipulator_handle(handle, is_selected(ManipulatorPointId::PrimaryHandle(segment_id)), None); } BezierHandles::Cubic { handle_start, handle_end } => { - if not_under_anchor(handle_start, bezier.start) { - overlay_context.line(handle_start, bezier.start, None, None); + if not_under_anchor(handle_start, segment_start) { + overlay_context.line(handle_start, segment_start, None, None); overlay_context.manipulator_handle(handle_start, is_selected(ManipulatorPointId::PrimaryHandle(segment_id)), None); } - if not_under_anchor(handle_end, bezier.end) { - overlay_context.line(handle_end, bezier.end, None, None); + if not_under_anchor(handle_end, segment_end) { + overlay_context.line(handle_end, segment_end, None, None); overlay_context.manipulator_handle(handle_end, is_selected(ManipulatorPointId::EndHandle(segment_id)), None); } } @@ -94,7 +95,7 @@ fn overlay_bezier_handles(bezier: Bezier, segment_id: SegmentId, transform: DAff } fn overlay_bezier_handle_specific_point( - bezier: Bezier, + segment: PathSeg, segment_id: SegmentId, (start, end): (PointId, PointId), point_to_render: PointId, @@ -102,24 +103,24 @@ fn overlay_bezier_handle_specific_point( is_selected: impl Fn(ManipulatorPointId) -> bool, overlay_context: &mut OverlayContext, ) { - let bezier = bezier.apply_transformation(|point| transform.transform_point2(point)); + let segment = Affine::new(transform.to_cols_array()) * segment; + let segment_start = point_to_dvec2(segment.start()); + let segment_end = point_to_dvec2(segment.end()); let not_under_anchor = |position: DVec2, anchor: DVec2| position.distance_squared(anchor) >= HIDE_HANDLE_DISTANCE * HIDE_HANDLE_DISTANCE; - match bezier.handles { - BezierHandles::Quadratic { handle } => { - if not_under_anchor(handle, bezier.start) && not_under_anchor(handle, bezier.end) { - let end = if start == point_to_render { bezier.start } else { bezier.end }; - overlay_context.line(handle, end, None, None); - overlay_context.manipulator_handle(handle, is_selected(ManipulatorPointId::PrimaryHandle(segment_id)), None); - } + match segment_to_handles(&segment) { + BezierHandles::Quadratic { handle } if not_under_anchor(handle, segment_start) && not_under_anchor(handle, segment_end) => { + let anchor = if start == point_to_render { segment_start } else { segment_end }; + overlay_context.line(handle, anchor, None, None); + overlay_context.manipulator_handle(handle, is_selected(ManipulatorPointId::PrimaryHandle(segment_id)), None); } BezierHandles::Cubic { handle_start, handle_end } => { - if not_under_anchor(handle_start, bezier.start) && (point_to_render == start) { - overlay_context.line(handle_start, bezier.start, None, None); + if not_under_anchor(handle_start, segment_start) && (point_to_render == start) { + overlay_context.line(handle_start, segment_start, None, None); overlay_context.manipulator_handle(handle_start, is_selected(ManipulatorPointId::PrimaryHandle(segment_id)), None); } - if not_under_anchor(handle_end, bezier.end) && (point_to_render == end) { - overlay_context.line(handle_end, bezier.end, None, None); + if not_under_anchor(handle_end, segment_end) && (point_to_render == end) { + overlay_context.line(handle_end, segment_end, None, None); overlay_context.manipulator_handle(handle_end, is_selected(ManipulatorPointId::EndHandle(segment_id)), None); } } @@ -132,7 +133,7 @@ pub fn path_overlays(document: &DocumentMessageHandler, draw_handles: DrawHandle let display_handles = overlay_context.visibility_settings.handles(); let display_anchors = overlay_context.visibility_settings.anchors(); - for layer in document.network_interface.selected_nodes().selected_layers(document.metadata()) { + for layer in document.network_interface.selected_nodes().selected_visible_layers(&document.network_interface) { let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; let transform = document.metadata().transform_to_viewport_if_feeds(layer, &document.network_interface); if display_path { @@ -154,23 +155,23 @@ pub fn path_overlays(document: &DocumentMessageHandler, draw_handles: DrawHandle match draw_handles { DrawHandles::All => { - vector.segment_bezier_iter().for_each(|(segment_id, bezier, _start, _end)| { - overlay_bezier_handles(bezier, segment_id, transform, is_selected, overlay_context); + vector.segment_iter().for_each(|(segment_id, segment, _start, _end)| { + overlay_bezier_handles(segment, segment_id, transform, is_selected, overlay_context); }); } DrawHandles::SelectedAnchors(ref selected_segments) => { let Some(focused_segments) = selected_segments.get(&layer) else { continue }; vector - .segment_bezier_iter() + .segment_iter() .filter(|(segment_id, ..)| focused_segments.contains(segment_id)) - .for_each(|(segment_id, bezier, _start, _end)| { - overlay_bezier_handles(bezier, segment_id, transform, is_selected, overlay_context); + .for_each(|(segment_id, segment, _start, _end)| { + overlay_bezier_handles(segment, segment_id, transform, is_selected, overlay_context); }); - for (segment_id, bezier, start, end) in vector.segment_bezier_iter() { + for (segment_id, segment, start, end) in vector.segment_iter() { if let Some((corresponding_anchor, _)) = opposite_handles_data.iter().find(|(_, adj_segment_id)| adj_segment_id == &segment_id) { - overlay_bezier_handle_specific_point(bezier, segment_id, (start, end), *corresponding_anchor, transform, is_selected, overlay_context); + overlay_bezier_handle_specific_point(segment, segment_id, (start, end), *corresponding_anchor, transform, is_selected, overlay_context); } } } @@ -178,14 +179,14 @@ pub fn path_overlays(document: &DocumentMessageHandler, draw_handles: DrawHandle let Some(segment_endpoints) = segment_endpoints_by_layer.get(&layer) else { continue }; vector - .segment_bezier_iter() + .segment_iter() .filter(|(segment_id, ..)| segment_endpoints.contains_key(segment_id)) - .for_each(|(segment_id, bezier, start, end)| { + .for_each(|(segment_id, segment, start, end)| { if segment_endpoints.get(&segment_id).unwrap().len() == 1 { let point_to_render = segment_endpoints.get(&segment_id).unwrap()[0]; - overlay_bezier_handle_specific_point(bezier, segment_id, (start, end), point_to_render, transform, is_selected, overlay_context); + overlay_bezier_handle_specific_point(segment, segment_id, (start, end), point_to_render, transform, is_selected, overlay_context); } else { - overlay_bezier_handles(bezier, segment_id, transform, is_selected, overlay_context); + overlay_bezier_handles(segment, segment_id, transform, is_selected, overlay_context); } }); } @@ -201,43 +202,41 @@ pub fn path_overlays(document: &DocumentMessageHandler, draw_handles: DrawHandle } } -pub fn path_endpoint_overlays(document: &DocumentMessageHandler, shape_editor: &mut ShapeState, overlay_context: &mut OverlayContext) { +/// Draws an anchor overlay at each endpoint of every open path on the selected visible layers, in the selected style for endpoints that are part of the path editing selection. +/// Given a pointer position, the endpoint a press there would continue from is drawn in the hover style instead. +pub fn open_path_endpoint_overlays(document: &DocumentMessageHandler, shape_editor: &ShapeState, pointer: Option, overlay_context: &mut OverlayContext) { if !overlay_context.visibility_settings.anchors() { return; } - for layer in document.network_interface.selected_nodes().selected_layers(document.metadata()) { - let Some(vector) = document.network_interface.compute_modified_vector(layer) else { - continue; - }; - let transform = document.metadata().transform_to_viewport_if_feeds(layer, &document.network_interface); - let selected = shape_editor.selected_shape_state.get(&layer); - let is_selected = |selected: Option<&SelectedLayerState>, point: ManipulatorPointId| selected.is_some_and(|selected| selected.is_point_selected(point)); + let selected_nodes = document.network_interface.selected_nodes(); + let is_selected = |layer: LayerNodeIdentifier, id: PointId| { + shape_editor + .selected_shape_state + .get(&layer) + .is_some_and(|state| state.is_point_selected(ManipulatorPointId::Anchor(id))) + }; + let hovered = pointer.and_then(|pointer| closest_open_path_endpoint(document, pointer, SNAP_POINT_TOLERANCE, selected_nodes.selected_visible_layers(&document.network_interface))); - for point in vector.anchor_endpoints() { - let Some(position) = vector.point_domain.position_from_id(point) else { continue }; - let position = transform.transform_point2(position); - overlay_context.manipulator_anchor(position, is_selected(selected, ManipulatorPointId::Anchor(point)), None); + for layer in selected_nodes.selected_visible_layers(&document.network_interface) { + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; + let transform = document.metadata().transform_to_viewport_if_feeds(layer, &document.network_interface); + + for id in vector.anchor_endpoints() { + if hovered.is_some_and(|(hovered_layer, hovered_id, _)| hovered_layer == layer && hovered_id == id) { + continue; + } + let Some(position) = vector.point_domain.position_from_id(id) else { continue }; + + overlay_context.manipulator_anchor(transform.transform_point2(position), is_selected(layer, id), None); } } -} -pub static GLOBAL_TEXT_CONTEXT: LazyLock> = LazyLock::new(|| Mutex::new(TextContext::default())); - -pub fn text_width(text: &str, font_size: f64) -> f64 { - let typesetting = TypesettingConfig { - font_size, - line_height_ratio: 1.2, - letter_spacing: 0., - letter_tilt: 0., - max_width: None, - max_height: None, - align: TextAlign::AlignLeft, - }; - - let mut text_context = GLOBAL_TEXT_CONTEXT.lock().expect("Failed to lock global text context"); - let bounds = text_context.bounding_box(text, &FALLBACK_FONT_RESOURCE, typesetting, false); - bounds.x + // Drawn last so its halo sits above any other endpoint at the same spot + if let Some((layer, id, position)) = hovered { + let transform = document.metadata().transform_to_viewport_if_feeds(layer, &document.network_interface); + overlay_context.hover_manipulator_anchor(transform.transform_point2(position), is_selected(layer, id)); + } } pub fn hex_to_rgba_u8(hex: &str) -> [u8; 4] { diff --git a/editor/src/messages/portfolio/document/overlays/utility_types_native.rs b/editor/src/messages/portfolio/document/overlays/utility_types_native.rs index 743953d439..702c9dd83f 100644 --- a/editor/src/messages/portfolio/document/overlays/utility_types_native.rs +++ b/editor/src/messages/portfolio/document/overlays/utility_types_native.rs @@ -3,19 +3,19 @@ use crate::consts::{ COLOR_OVERLAY_YELLOW_DULL, COMPASS_ROSE_ARROW_SIZE, COMPASS_ROSE_HOVER_RING_DIAMETER, COMPASS_ROSE_MAIN_RING_DIAMETER, COMPASS_ROSE_RING_INNER_DIAMETER, DOWEL_PIN_RADIUS, GRADIENT_MIDPOINT_DIAMOND_RADIUS, MANIPULATOR_GROUP_MARKER_SIZE, PIVOT_CROSSHAIR_LENGTH, PIVOT_CROSSHAIR_THICKNESS, PIVOT_DIAMETER, RESIZE_HANDLE_SIZE, SKEW_TRIANGLE_OFFSET, SKEW_TRIANGLE_SIZE, }; -use crate::messages::portfolio::document::overlays::utility_functions::{GLOBAL_TEXT_CONTEXT, hex_to_rgba_u8}; +use crate::messages::portfolio::document::overlays::utility_functions::hex_to_rgba_u8; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::portfolio::fonts::FALLBACK_FONT_RESOURCE; use crate::messages::prelude::Message; use crate::messages::prelude::ViewportMessageHandler; +use crate::messages::tool::common_functionality::shapes::shape_utility::format_rounded; use core::borrow::Borrow; use core::f64::consts::{FRAC_PI_2, PI, TAU}; use glam::{DAffine2, DVec2}; use graphene_std::ATTR_TRANSFORM; use graphene_std::list::List; use graphene_std::math::quad::Quad; -use graphene_std::subpath::{self, Subpath}; -use graphene_std::text::{TextAlign, TypesettingConfig}; +use graphene_std::text::{TextAlign, TextContext, TypesettingConfig}; use graphene_std::vector::click_target::ClickTargetType; use graphene_std::vector::misc::point_to_dvec2; use graphene_std::vector::{PointId, SegmentId, Vector}; @@ -403,14 +403,14 @@ impl OverlayContext { /// Fills the area inside the path. Assumes `color` is in gamma space. /// Used by the Pen tool to show the path being closed. - pub fn fill_path(&mut self, subpaths: impl Iterator>>, transform: DAffine2, color: &str) { - self.internal().fill_path(subpaths, transform, color); + pub fn fill_path(&mut self, bezpath: &BezPath, transform: DAffine2, color: &str) { + self.internal().fill_path(bezpath, transform, color); } /// Fills the area inside the path with a pattern. Assumes `color` is an sRGB hex string. /// Used by the fill tool to show the area to be filled. - pub fn fill_path_pattern(&mut self, subpaths: impl Iterator>>, transform: DAffine2, color: &str) { - self.internal().fill_path_pattern(subpaths, transform, color); + pub fn fill_path_pattern(&mut self, bezpath: &BezPath, transform: DAffine2, color: &str) { + self.internal().fill_path_pattern(bezpath, transform, color); } pub fn text(&self, text: &str, font_color: &str, background_color: Option<&str>, transform: DAffine2, padding: f64, pivot: [Pivot; 2]) { @@ -977,49 +977,25 @@ impl OverlayContextInternal { path.push(bezier.as_path_el()); } - fn push_path(&mut self, subpaths: impl Iterator>>, transform: DAffine2) -> BezPath { + fn push_path(&mut self, bezpath: &BezPath, transform: DAffine2) -> BezPath { let mut path = BezPath::new(); - for subpath in subpaths { - let subpath = subpath.borrow(); - let mut curves = subpath.iter().peekable(); + let snap_start = |context: &Self, point: kurbo::Point| { + let snapped = context.snap_to_physical_pixel(transform.transform_point2(point_to_dvec2(point))); + kurbo::Point::new(snapped.x, snapped.y) + }; + let snap_center = |context: &Self, point: kurbo::Point| { + let snapped = context.snap_to_physical_pixel_center(transform.transform_point2(point_to_dvec2(point))); + kurbo::Point::new(snapped.x, snapped.y) + }; - let Some(first) = curves.peek() else { - continue; - }; - - let start_point = transform.transform_point2(point_to_dvec2(first.start())); - let start_point = self.snap_to_physical_pixel(start_point); - path.move_to(kurbo::Point::new(start_point.x, start_point.y)); - - for curve in curves { - match curve { - PathSeg::Line(line) => { - let a = transform.transform_point2(point_to_dvec2(line.p1)); - let a = self.snap_to_physical_pixel_center(a); - path.line_to(kurbo::Point::new(a.x, a.y)); - } - PathSeg::Quad(quad_bez) => { - let a = transform.transform_point2(point_to_dvec2(quad_bez.p1)); - let b = transform.transform_point2(point_to_dvec2(quad_bez.p2)); - let a = self.snap_to_physical_pixel_center(a); - let b = self.snap_to_physical_pixel_center(b); - path.quad_to(kurbo::Point::new(a.x, a.y), kurbo::Point::new(b.x, b.y)); - } - PathSeg::Cubic(cubic_bez) => { - let a = transform.transform_point2(point_to_dvec2(cubic_bez.p1)); - let b = transform.transform_point2(point_to_dvec2(cubic_bez.p2)); - let c = transform.transform_point2(point_to_dvec2(cubic_bez.p3)); - let a = self.snap_to_physical_pixel_center(a); - let b = self.snap_to_physical_pixel_center(b); - let c = self.snap_to_physical_pixel_center(c); - path.curve_to(kurbo::Point::new(a.x, a.y), kurbo::Point::new(b.x, b.y), kurbo::Point::new(c.x, c.y)); - } - } - } - - if subpath.closed() { - path.close_path(); + for element in bezpath.elements() { + match *element { + kurbo::PathEl::MoveTo(point) => path.move_to(snap_start(self, point)), + kurbo::PathEl::LineTo(point) => path.line_to(snap_center(self, point)), + kurbo::PathEl::QuadTo(a, b) => path.quad_to(snap_center(self, a), snap_center(self, b)), + kurbo::PathEl::CurveTo(a, b, c) => path.curve_to(snap_center(self, a), snap_center(self, b), snap_center(self, c)), + kurbo::PathEl::ClosePath => path.close_path(), } } @@ -1028,20 +1004,19 @@ impl OverlayContextInternal { /// Used by the Select tool to outline a path or a free point when selected or hovered. fn outline(&mut self, target_types: impl Iterator>, transform: DAffine2, color: Option<&str>) { - let mut subpaths: Vec> = vec![]; + let mut combined = BezPath::new(); for target_type in target_types { match target_type.borrow() { ClickTargetType::FreePoint(point) => { self.manipulator_anchor(transform.transform_point2(point.position), false, None); } - ClickTargetType::Subpath(subpath) => subpaths.push(subpath.clone()), - ClickTargetType::CompoundPath(compound) => subpaths.extend(compound.iter().cloned()), + ClickTargetType::Path(bezpath) => combined.extend(bezpath.elements().iter().copied()), } } - if !subpaths.is_empty() { - let path = self.push_path(subpaths.iter(), transform); + if !combined.is_empty() { + let path = self.push_path(&combined, transform); let color = color.unwrap_or(COLOR_OVERLAY_BLUE); self.scene.stroke(&kurbo::Stroke::new(1.), self.get_transform(), Self::parse_color(color), None, &path); @@ -1050,15 +1025,15 @@ impl OverlayContextInternal { /// Fills the area inside the path. Assumes `color` is in gamma space. /// Used by the Pen tool to show the path being closed. - fn fill_path(&mut self, subpaths: impl Iterator>>, transform: DAffine2, color: &str) { - let path = self.push_path(subpaths, transform); + fn fill_path(&mut self, bezpath: &BezPath, transform: DAffine2, color: &str) { + let path = self.push_path(bezpath, transform); self.scene.fill(peniko::Fill::NonZero, self.get_transform(), Self::parse_color(color), None, &path); } /// Fills the area inside the path with a pattern. Assumes `color` is an sRGB hex string. /// Used by the fill tool to show the area to be filled. - fn fill_path_pattern(&mut self, subpaths: impl Iterator>>, transform: DAffine2, color: &str) { + fn fill_path_pattern(&mut self, bezpath: &BezPath, transform: DAffine2, color: &str) { const PATTERN_WIDTH: u32 = 4; const PATTERN_HEIGHT: u32 = 4; @@ -1095,7 +1070,7 @@ impl OverlayContextInternal { }, }; - let path = self.push_path(subpaths, transform); + let path = self.push_path(bezpath, transform); let brush = peniko::Brush::Image(image); self.scene.fill(peniko::Fill::NonZero, self.get_transform(), &brush, None, &path); @@ -1116,17 +1091,17 @@ impl OverlayContextInternal { align: TextAlign::AlignLeft, }; - // Get text dimensions directly from layout - let mut text_context = GLOBAL_TEXT_CONTEXT.lock().expect("Failed to lock global text context"); - let text_size = text_context.bounding_box(text, &FALLBACK_FONT_RESOURCE, typesetting, false); + // Lay out the text once, taking its dimensions and vector paths from the same thread-local context pass + let (text_size, text_list) = TextContext::with_thread_local(|text_context| { + let text_size = text_context.bounding_box(text, &FALLBACK_FONT_RESOURCE, typesetting, false); + let text_list = text_context.to_path(text, &FALLBACK_FONT_RESOURCE, typesetting, false); + (text_size, text_list) + }); let text_width = text_size.x; let text_height = text_size.y; // Create a rect from the size (assuming text starts at origin) let text_bounds = kurbo::Rect::new(0., 0., text_width, text_height); - // Convert text to vector paths for rendering - let text_list = text_context.to_path(text, &FALLBACK_FONT_RESOURCE, typesetting, false); - // Calculate position based on pivot let mut position = DVec2::ZERO; match pivot[0] { @@ -1189,7 +1164,7 @@ impl OverlayContextInternal { let width = match typed_string { Some(ref typed_string) => typed_string, - None => &format!("{:.2}", translation.x).trim_end_matches('0').trim_end_matches('.').to_string(), + None => &format_rounded(translation.x, 2), }; let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); self.text(width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [Pivot::Middle, Pivot::End]); @@ -1200,7 +1175,7 @@ impl OverlayContextInternal { let height = match typed_string { Some(ref typed_string) => typed_string, - None => &format!("{:.2}", translation.y).trim_end_matches('0').trim_end_matches('.').to_string(), + None => &format_rounded(translation.y, 2), }; let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); let height_pivot = if translation.x > -1e-3 { Pivot::Start } else { Pivot::End }; diff --git a/editor/src/messages/portfolio/document/overlays/utility_types_web.rs b/editor/src/messages/portfolio/document/overlays/utility_types_web.rs index 072c5be668..fcc342d05d 100644 --- a/editor/src/messages/portfolio/document/overlays/utility_types_web.rs +++ b/editor/src/messages/portfolio/document/overlays/utility_types_web.rs @@ -7,16 +7,16 @@ use crate::consts::{ }; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::prelude::Message; +use crate::messages::tool::common_functionality::shapes::shape_utility::format_rounded; use crate::messages::viewport::ViewportMessageHandler; use core::borrow::Borrow; use core::f64::consts::{FRAC_PI_2, PI, TAU}; use glam::{DAffine2, DVec2}; use graphene_std::math::quad::Quad; -use graphene_std::subpath::Subpath; use graphene_std::vector::click_target::ClickTargetType; use graphene_std::vector::misc::{dvec2_to_point, point_to_dvec2}; use graphene_std::vector::{PointId, SegmentId, Vector}; -use kurbo::{self, Affine, CubicBez, ParamCurve, PathSeg}; +use kurbo::{self, Affine, BezPath, CubicBez, ParamCurve, PathSeg}; use std::collections::HashMap; use wasm_bindgen::{JsCast, JsValue}; use web_sys::{OffscreenCanvas, OffscreenCanvasRenderingContext2d}; @@ -930,50 +930,33 @@ impl OverlayContext { self.end_dpi_aware_transform(); } - fn push_path(&mut self, subpaths: impl Iterator>>, transform: DAffine2) { + fn push_path(&mut self, bezpath: &BezPath, transform: DAffine2) { self.start_dpi_aware_transform(); self.render_context.begin_path(); - for subpath in subpaths { - let subpath = subpath.borrow(); - let mut curves = subpath.iter().peekable(); - let Some(&first) = curves.peek() else { - continue; - }; + let snap_start = |context: &Self, point: kurbo::Point| context.snap_to_physical_pixel(transform.transform_point2(point_to_dvec2(point))); + let snap_center = |context: &Self, point: kurbo::Point| context.snap_to_physical_pixel_center(transform.transform_point2(point_to_dvec2(point))); - let start_point = transform.transform_point2(point_to_dvec2(first.start())); - let start_point = self.snap_to_physical_pixel(start_point); - self.render_context.move_to(start_point.x, start_point.y); - - for curve in curves { - match curve { - PathSeg::Line(line) => { - let a = transform.transform_point2(point_to_dvec2(line.p1)); - let a = self.snap_to_physical_pixel_center(a); - self.render_context.line_to(a.x, a.y); - } - PathSeg::Quad(quad_bez) => { - let a = transform.transform_point2(point_to_dvec2(quad_bez.p1)); - let b = transform.transform_point2(point_to_dvec2(quad_bez.p2)); - let a = self.snap_to_physical_pixel_center(a); - let b = self.snap_to_physical_pixel_center(b); - self.render_context.quadratic_curve_to(a.x, a.y, b.x, b.y); - } - PathSeg::Cubic(cubic_bez) => { - let a = transform.transform_point2(point_to_dvec2(cubic_bez.p1)); - let b = transform.transform_point2(point_to_dvec2(cubic_bez.p2)); - let c = transform.transform_point2(point_to_dvec2(cubic_bez.p3)); - let a = self.snap_to_physical_pixel_center(a); - let b = self.snap_to_physical_pixel_center(b); - let c = self.snap_to_physical_pixel_center(c); - self.render_context.bezier_curve_to(a.x, a.y, b.x, b.y, c.x, c.y); - } + for element in bezpath.elements() { + match *element { + kurbo::PathEl::MoveTo(point) => { + let point = snap_start(self, point); + self.render_context.move_to(point.x, point.y); } - } - - if subpath.closed() { - self.render_context.close_path(); + kurbo::PathEl::LineTo(point) => { + let point = snap_center(self, point); + self.render_context.line_to(point.x, point.y); + } + kurbo::PathEl::QuadTo(a, b) => { + let (a, b) = (snap_center(self, a), snap_center(self, b)); + self.render_context.quadratic_curve_to(a.x, a.y, b.x, b.y); + } + kurbo::PathEl::CurveTo(a, b, c) => { + let (a, b, c) = (snap_center(self, a), snap_center(self, b), snap_center(self, c)); + self.render_context.bezier_curve_to(a.x, a.y, b.x, b.y, c.x, c.y); + } + kurbo::PathEl::ClosePath => self.render_context.close_path(), } } @@ -982,18 +965,17 @@ impl OverlayContext { /// Used by the Select tool to outline a path or a free point when selected or hovered. pub fn outline(&mut self, target_types: impl Iterator>, transform: DAffine2, color: Option<&str>) { - let mut subpaths: Vec> = vec![]; + let mut combined = BezPath::new(); target_types.for_each(|target_type| match target_type.borrow() { ClickTargetType::FreePoint(point) => { self.manipulator_anchor(transform.transform_point2(point.position), false, None); } - ClickTargetType::Subpath(subpath) => subpaths.push(subpath.clone()), - ClickTargetType::CompoundPath(compound) => subpaths.extend(compound.iter().cloned()), + ClickTargetType::Path(bezpath) => combined.extend(bezpath.elements().iter().copied()), }); - if !subpaths.is_empty() { - self.push_path(subpaths.iter(), transform); + if !combined.is_empty() { + self.push_path(&combined, transform); let color = color.unwrap_or(COLOR_OVERLAY_BLUE); self.render_context.set_stroke_style_str(color); @@ -1004,8 +986,8 @@ impl OverlayContext { /// Fills the area inside the path. Assumes `color` is in gamma space. /// Used by the Pen tool to show the path being closed. - pub fn fill_path(&mut self, subpaths: impl Iterator>>, transform: DAffine2, color: &str) { - self.push_path(subpaths, transform); + pub fn fill_path(&mut self, bezpath: &BezPath, transform: DAffine2, color: &str) { + self.push_path(bezpath, transform); self.render_context.set_fill_style_str(color); self.render_context.fill(); @@ -1013,7 +995,7 @@ impl OverlayContext { /// Fills the area inside the path with a pattern. Assumes `color` is an sRGB hex string. /// Used by the fill tool to show the area to be filled. - pub fn fill_path_pattern(&mut self, subpaths: impl Iterator>>, transform: DAffine2, color: &str) { + pub fn fill_path_pattern(&mut self, bezpath: &BezPath, transform: DAffine2, color: &str) { const PATTERN_WIDTH: usize = 4; const PATTERN_HEIGHT: usize = 4; @@ -1046,7 +1028,7 @@ impl OverlayContext { pattern_context.put_image_data(&image_data, 0, 0).unwrap(); let pattern = self.render_context.create_pattern_with_offscreen_canvas(&pattern_canvas, "repeat").unwrap().unwrap(); - self.push_path(subpaths, transform); + self.push_path(bezpath, transform); self.render_context.set_fill_style_canvas_pattern(&pattern); self.render_context.fill(); @@ -1090,7 +1072,7 @@ impl OverlayContext { let width = match typed_string { Some(ref typed_string) => typed_string, - None => &format!("{:.2}", translation.x).trim_end_matches('0').trim_end_matches('.').to_string(), + None => &format_rounded(translation.x, 2), }; let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); self.text(width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [Pivot::Middle, Pivot::End]); @@ -1101,7 +1083,7 @@ impl OverlayContext { let height = match typed_string { Some(ref typed_string) => typed_string, - None => &format!("{:.2}", translation.y).trim_end_matches('0').trim_end_matches('.').to_string(), + None => &format_rounded(translation.y, 2), }; let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); let height_pivot = if translation.x > -1e-3 { Pivot::Start } else { Pivot::End }; diff --git a/editor/src/messages/portfolio/document/resource/resource_message_handler.rs b/editor/src/messages/portfolio/document/resource/resource_message_handler.rs index 7a45060149..a5df618a69 100644 --- a/editor/src/messages/portfolio/document/resource/resource_message_handler.rs +++ b/editor/src/messages/portfolio/document/resource/resource_message_handler.rs @@ -3,7 +3,7 @@ use crate::messages::portfolio::{document::resource::utility_types::EmbeddedReso use crate::messages::prelude::*; use base64::Engine; use base64::engine::general_purpose::STANDARD as BASE64; -use graph_craft::application_io::resource::{DataSource, LoadResource, Resource, ResourceHash, ResourceId, ResourceRegistry}; +use graph_craft::application_io::resource::{DataSource, LoadResource, Resource, ResourceHash, ResourceId, ResourceRegistry, ResourceStorage}; use graphene_std::text::Font; use std::sync::Arc; use url::Url; @@ -12,6 +12,7 @@ use url::Url; pub struct ResourceMessageContext<'a> { pub document_id: DocumentId, pub fonts: &'a FontsMessageHandler, + pub resource_storage: &'a ResourceStorageMessageHandler, } #[derive(Debug, Clone, PartialEq, Default, serde::Serialize, ExtractField)] @@ -25,7 +26,7 @@ pub struct ResourceMessageHandler { #[message_handler_data] impl MessageHandler> for ResourceMessageHandler { fn process_message(&mut self, message: ResourceMessage, responses: &mut VecDeque, context: ResourceMessageContext) { - let ResourceMessageContext { document_id, fonts } = context; + let ResourceMessageContext { document_id, fonts, resource_storage } = context; match message { ResourceMessage::StoreEmbedded { resource_id, data } => { @@ -48,8 +49,9 @@ impl MessageHandler> for ResourceMes responses.add(ResourceMessage::Resolve { resource_id }); } ResourceMessage::ResolveAll => { - let unresolved_ids: Vec = self.registry.unresolved().map(|info| info.id).collect(); - for id in unresolved_ids { + let storage = resource_storage.resources_mut(); + let ids: Vec = self.registry.ids().filter(|id| !self.registry.hash(id).is_some_and(|hash| storage.contains(&hash))).collect(); + for id in ids { if self.pending_resolves.contains(&id) { continue; } @@ -65,7 +67,7 @@ impl MessageHandler> for ResourceMes log::error!("Resolve for {resource_id}: no registry entry"); return; }; - if info.hash.is_some() { + if info.hash.is_some_and(|hash| resource_storage.resources_mut().contains(hash)) { log::warn!("Resource {resource_id} already resolved"); return; } @@ -297,3 +299,47 @@ impl<'de> serde::Deserialize<'de> for ResourceMessageHandler { deserializer.deserialize_map(EmbeddedResourcesVisitor { human_readable }) } } + +#[cfg(test)] +mod tests { + use super::*; + use graph_craft::application_io::resource::ResourceStorage; + + #[test] + fn resolve_all_refetches_resources_whose_bytes_are_missing() { + let mut handler = ResourceMessageHandler::default(); + let storage = ResourceStorageMessageHandler::default(); + let fonts = FontsMessageHandler::default(); + + let font = |style: &str| DataSource::Font { + family: "Lato".into(), + style: Some(style.into()), + }; + + let cached = ResourceId::from(1); + let cached_hash = storage.resources_mut().store(b"stored font bytes"); + handler.registry.resolve(&cached, cached_hash); + handler.registry.push_source_back(&cached, font("Regular (400)")); + + let evicted = ResourceId::from(2); + let evicted_hash = ResourceHash::from(b"evicted font bytes".as_slice()); + handler.registry.resolve(&evicted, evicted_hash); + handler.registry.push_source_back(&evicted, font("Black (900)")); + + let mut responses = VecDeque::new(); + handler.process_message( + ResourceMessage::ResolveAll, + &mut responses, + ResourceMessageContext { + document_id: DocumentId(0), + fonts: &fonts, + resource_storage: &storage, + }, + ); + + let resolve_requested = |id: ResourceId| responses.contains(&Message::from(ResourceMessage::Resolve { resource_id: id })); + assert!(resolve_requested(evicted), "a resource whose bytes are gone should be resolved again"); + assert!(!resolve_requested(cached), "a resource whose bytes are in storage should be left alone"); + assert_eq!(handler.registry.hash(&evicted), Some(evicted_hash), "the hash keeps naming the content"); + } +} diff --git a/editor/src/messages/portfolio/document/storage_tests/round_trip_tests.rs b/editor/src/messages/portfolio/document/storage_tests/round_trip_tests.rs index 1c5a4853ea..0a7cc9deb9 100644 --- a/editor/src/messages/portfolio/document/storage_tests/round_trip_tests.rs +++ b/editor/src/messages/portfolio/document/storage_tests/round_trip_tests.rs @@ -16,6 +16,7 @@ use crate::messages::portfolio::document::utility_types::misc::GroupFolderType; use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface; use crate::messages::portfolio::document::utility_types::network_interface::storage_metadata::{StorageMetadataView, build_interface_from_storage}; use crate::test_utils::test_prelude::*; +use graphene_std::NodeParameter; use graphene_std::vector::style::RenderMode; /// Every node addressable in `original` resolves identically through the round-tripped interface: @@ -708,3 +709,171 @@ async fn demo_artwork_edit_autosaves_and_round_trips() { // Autosaving the undone state still round-trips cleanly (no drift panic). editor.active_document_mut().commit_storage_snapshot(&byte_store, true); } + +/// The document's single Fill node, as `(network_path, node_id)`. +fn find_fill_node(document: &DocumentMessageHandler) -> (Vec, graph_craft::document::NodeId) { + node_paths(&document.network_interface) + .into_iter() + .find(|(network_path, node_id)| { + let Some(network) = document.network_interface.nested_network(network_path) else { return false }; + network.nodes[node_id].implementation == graph_craft::document::DocumentNodeImplementation::ProtoNode(graphene_std::vector_nodes::fill::IDENTIFIER) + }) + .expect("the document should contain a Fill node") +} + +/// The stored paint value of the document's single Fill node. +fn fill_paint_value(document: &DocumentMessageHandler) -> graph_craft::document::value::TaggedValue { + let (network_path, node_id) = find_fill_node(document); + let network = document.network_interface.nested_network(&network_path).expect("the found network path should resolve"); + let input = network.nodes[&node_id].input(graphene_std::vector::fill::PaintInput).expect("Fill should have a paint input"); + input.as_value().expect("the paint input should hold a value").clone() +} + +#[tokio::test] +async fn none_fill_survives_document_reopen() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + editor.drag_tool(ToolType::Rectangle, 0., 0., 100., 100., ModifierKeys::empty()).await; + + // Pick the red-slash "none" paint, stored the same way as the Fill widget's None choice + let (_, fill_node_id) = find_fill_node(editor.active_document()); + editor + .handle_message(NodeGraphMessage::SetInputValue { + node_id: fill_node_id, + input_index: graphene_std::vector::fill::PaintInput::INDEX, + value: graph_craft::document::value::TaggedValue::no_paint().into(), + }) + .await; + assert!(fill_paint_value(editor.active_document()).is_no_paint(), "the None pick should store as no_paint"); + + // Reopen through the editor's real open path, which runs the document migrations + let serialized = editor.active_document().serialize_document(); + editor + .handle_message(PortfolioMessage::OpenDocumentFile { + document_name: None, + document_path: None, + document_serialized_content: serialized, + }) + .await; + + let reopened_paint = fill_paint_value(editor.active_document()); + assert!(reopened_paint.is_no_paint(), "a none fill should survive reopening, but the stored paint became {reopened_paint:?}"); +} + +#[tokio::test] +async fn legacy_four_input_fill_migrates_to_the_split_transform_shape() { + use graph_craft::document::value::TaggedValue; + + // A minimal master-era document: a 4-input Fill (content, fill: wired, backup color, backup gradient) fed by another node + const LEGACY_DOCUMENT: &str = r#"{"network_interface":{"network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[1,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":null},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"GradientStops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::ops::SampleGradientNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":"Fill","display_name":"","input_properties":[{"input_data":{"input_name":"Vector Data"},"widget_override":null},{"input_data":{"input_name":"Fill"},"widget_override":null},{"input_data":{"input_name":"Backup Color"},"widget_override":null},{"input_data":{"input_name":"Backup Gradient"},"widget_override":null}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":"Sample Gradient","display_name":"","input_properties":[{"input_data":{"input_name":"Primary"},"widget_override":null},{"input_data":{"input_name":"Gradient"},"widget_override":null},{"input_data":{"input_name":"Position"},"widget_override":null}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}},"collapsed":[],"name":"legacy_fill.graphite","commit_hash":"0000000000000000000000000000000000000000","document_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"grid_color":{"red":0.6,"green":0.6,"blue":0.6,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0}"#; + + // Deserializing alone must succeed, so a failure below is attributable to the migrations + DocumentMessageHandler::deserialize_document(LEGACY_DOCUMENT).expect("the legacy document should deserialize"); + + let mut editor = EditorTestUtils::create(); + editor + .handle_message(PortfolioMessage::OpenDocumentFile { + document_name: None, + document_path: None, + document_serialized_content: LEGACY_DOCUMENT.to_string(), + }) + .await; + + let document = editor.active_document(); + let (network_path, node_id) = find_fill_node(document); + let network = document.network_interface.nested_network(&network_path).expect("the found network path should resolve"); + let fill_node = &network.nodes[&node_id]; + + assert_eq!(fill_node.inputs.len(), 7, "the legacy Fill should upgrade to the 7-input shape"); + let paint = fill_node.input(graphene_std::vector::fill::PaintInput); + assert!( + matches!(paint, Some(graph_craft::document::NodeInput::Node { .. })), + "the wired legacy fill should keep its connection, but became {paint:?}" + ); + let has_transform = fill_node.input_value(graphene_std::vector::fill::HasTransformInput); + assert!( + matches!(has_transform, Some(TaggedValue::Bool(_))), + "the has-transform input should hold a bool, but became {has_transform:?}" + ); + let transform = fill_node.input_value(graphene_std::vector::fill::TransformInput); + assert!( + matches!(transform, Some(TaggedValue::DAffine2(_))), + "the transform input should hold a matrix, but became {transform:?}" + ); + + // The Evaluate Gradient parameter held the tuple-form stops, which parse as the ramp value with even positions elided + let evaluate_gradient_node = &network.nodes[&graph_craft::document::NodeId(2)]; + let stops = evaluate_gradient_node.input_value(graphene_std::math_nodes::evaluate_gradient::GradientInput); + let Some(TaggedValue::GradientRamp(ramp)) = stops else { + panic!("the legacy stops parameter should become a gradient ramp value, but became {stops:?}"); + }; + assert_eq!( + ramp.gradient_space, + graphene_std::vector::style::GradientSpace::RgbGamma, + "a legacy document's ramps should deserialize with the explicit gamma interpolation" + ); + let stops = graphene_std::vector::Gradient::from(ramp); + assert_eq!(stops.len(), 2); + assert!(!stops.has_position_attribute(), "even legacy tuple positions should elide rather than materialize"); +} + +#[tokio::test] +async fn eight_input_fill_migrates_the_spread_input_into_the_ramp() { + use graph_craft::document::value::TaggedValue; + use graphene_std::vector::style::GradientSpread; + + // A minimal document from the era when the gradient spread was the Fill node's own sixth input (tagged `GradientSpreadMethod`), here set to Repeat + const EIGHT_INPUT_DOCUMENT: &str = r#"{"network_interface":{"network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[1,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"GradientRamp":{"stops":{"color":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]}}},"exposed":false}},{"Value":{"tagged_value":{"GradientType":"Linear"},"exposed":false}},{"Value":{"tagged_value":{"GradientSpreadMethod":"Repeat"},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"DAffine2":[1.0,0.0,0.0,1.0,0.0,0.0]},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":"Fill","display_name":"","input_properties":[{"input_data":{"input_name":"Content"},"widget_override":null},{"input_data":{"input_name":"Fill"},"widget_override":null},{"input_data":{"input_name":"Backup Color"},"widget_override":null},{"input_data":{"input_name":"Backup Gradient"},"widget_override":null},{"input_data":{"input_name":"Gradient Type"},"widget_override":null},{"input_data":{"input_name":"Spread Method"},"widget_override":null},{"input_data":{"input_name":"Has Transform"},"widget_override":null},{"input_data":{"input_name":"Transform"},"widget_override":null}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}},"collapsed":[],"name":"eight_input_fill.graphite","commit_hash":"0000000000000000000000000000000000000000","document_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"grid_color":{"red":0.6,"green":0.6,"blue":0.6,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0}"#; + + // Deserializing alone must succeed, so a failure below is attributable to the migrations + DocumentMessageHandler::deserialize_document(EIGHT_INPUT_DOCUMENT).expect("the eight-input document should deserialize"); + + let mut editor = EditorTestUtils::create(); + editor + .handle_message(PortfolioMessage::OpenDocumentFile { + document_name: None, + document_path: None, + document_serialized_content: EIGHT_INPUT_DOCUMENT.to_string(), + }) + .await; + + let document = editor.active_document(); + let (network_path, node_id) = find_fill_node(document); + let network = document.network_interface.nested_network(&network_path).expect("the found network path should resolve"); + let fill_node = &network.nodes[&node_id]; + + assert_eq!(fill_node.inputs.len(), 7, "the eight-input Fill should fold down to the 7-input shape"); + + let paint = fill_node.input_value(graphene_std::vector::fill::PaintInput); + let Some(TaggedValue::GradientRamp(ramp)) = paint else { + panic!("the fill input should keep its gradient ramp value, but became {paint:?}"); + }; + assert_eq!(ramp.gradient_spread, GradientSpread::Repeat, "the spread input's value should fold into the fill ramp"); + assert_eq!( + ramp.gradient_space, + graphene_std::vector::style::GradientSpace::RgbGamma, + "a legacy document's ramps should deserialize with the explicit gamma interpolation" + ); + + let backup = fill_node.input_value(graphene_std::vector::fill::BackupGradientInput); + let Some(TaggedValue::GradientRamp(backup_ramp)) = backup else { + panic!("the backup gradient input should keep its gradient ramp value, but became {backup:?}"); + }; + assert_eq!(backup_ramp.gradient_spread, GradientSpread::Repeat, "the spread input's value should fold into the backup ramp"); + assert_eq!( + backup_ramp.gradient_space, + graphene_std::vector::style::GradientSpace::RgbGamma, + "the backup ramp should carry the explicit gamma interpolation too" + ); + + let has_transform = fill_node.input_value(graphene_std::vector::fill::HasTransformInput); + assert!( + matches!(has_transform, Some(TaggedValue::Bool(false))), + "the has-transform input should shift down intact, but became {has_transform:?}" + ); + let transform = fill_node.input_value(graphene_std::vector::fill::TransformInput); + assert!( + matches!(transform, Some(TaggedValue::DAffine2(_))), + "the transform input should shift down intact, but became {transform:?}" + ); +} diff --git a/editor/src/messages/portfolio/document/utility_types/document_metadata.rs b/editor/src/messages/portfolio/document/utility_types/document_metadata.rs index 67bdf7624e..7e74fd96d0 100644 --- a/editor/src/messages/portfolio/document/utility_types/document_metadata.rs +++ b/editor/src/messages/portfolio/document/utility_types/document_metadata.rs @@ -9,10 +9,10 @@ use graph_craft::document::NodeId; use graphene_std::Graphic; use graphene_std::list::List; use graphene_std::math::quad::Quad; -use graphene_std::subpath; use graphene_std::transform::Footprint; +use graphene_std::vector::Vector; use graphene_std::vector::click_target::{ClickTarget, ClickTargetType}; -use graphene_std::vector::{PointId, Vector}; +use kurbo::{Affine, BezPath}; use std::collections::{HashMap, HashSet}; use std::num::NonZeroU64; use std::sync::Arc; @@ -193,11 +193,13 @@ impl DocumentMetadata { self.visual_targets(layer)? .iter() .filter_map(|click_target| match click_target.target_type() { - ClickTargetType::Subpath(subpath) => subpath.loose_bounding_box_with_transform(transform), - ClickTargetType::CompoundPath(subpaths) => subpaths - .iter() - .filter_map(|subpath| subpath.loose_bounding_box_with_transform(transform)) - .reduce(|[a_min, a_max], [b_min, b_max]| [a_min.min(b_min), a_max.max(b_max)]), + ClickTargetType::Path(path) => { + let mut transformed = path.clone(); + transformed.apply_affine(Affine::new(transform.to_cols_array())); + + let control_box = transformed.control_box(); + (!transformed.is_empty()).then(|| [DVec2::new(control_box.min_x(), control_box.min_y()), DVec2::new(control_box.max_x(), control_box.max_y())]) + } ClickTargetType::FreePoint(_) => click_target.bounding_box_with_transform(transform), }) .reduce(Quad::combine_bounds) @@ -233,10 +235,15 @@ impl DocumentMetadata { /// stroke geometry when the layer is a vector with a stroke style. Falls back to the click-target-based /// bounds for non-vector layers (groups, raster, text, color, gradient). pub fn bounding_box_document_with_stroke(&self, layer: LayerNodeIdentifier) -> Option<[DVec2; 2]> { - if let Some(vector) = self.layer_vector_data.get(&layer) - && let Some(bounds) = vector.stroke_inclusive_bounding_box_with_transform(self.transform_to_document(layer)) - { - return Some(bounds); + if let Some(vector) = self.layer_vector_data.get(&layer) { + let stroke = self + .layer_appearance_attributes + .get(&layer) + .and_then(|appearance| appearance.first_coverage_of(graphene_std::Cover::Stroke)) + .map(graphene_std::Coverage::stroke_params); + if let Some(bounds) = vector.stroke_inclusive_bounding_box_with_transform(self.transform_to_document(layer), stroke.as_ref()) { + return Some(bounds); + } } self.bounding_box_document(layer) } @@ -251,11 +258,10 @@ impl DocumentMetadata { self.all_layers().filter_map(|layer| self.bounding_box_viewport(layer)).reduce(Quad::combine_bounds) } - pub fn layer_outline(&self, layer: LayerNodeIdentifier) -> impl Iterator> { - self.visual_targets(layer).unwrap_or(&[]).iter().flat_map(|target| match target.target_type() { - ClickTargetType::Subpath(subpath) => std::slice::from_ref(subpath), - ClickTargetType::CompoundPath(subpaths) => subpaths.as_slice(), - ClickTargetType::FreePoint(_) => &[], + pub fn layer_outline(&self, layer: LayerNodeIdentifier) -> impl Iterator { + self.visual_targets(layer).unwrap_or(&[]).iter().filter_map(|target| match target.target_type() { + ClickTargetType::Path(path) => Some(path), + ClickTargetType::FreePoint(_) => None, }) } diff --git a/editor/src/messages/portfolio/document/utility_types/mod.rs b/editor/src/messages/portfolio/document/utility_types/mod.rs index 1fcf5c60ca..a38ca2c545 100644 --- a/editor/src/messages/portfolio/document/utility_types/mod.rs +++ b/editor/src/messages/portfolio/document/utility_types/mod.rs @@ -3,5 +3,6 @@ pub mod error; pub mod misc; pub mod network_interface; pub mod nodes; +pub mod text_metrics; pub mod transformation; pub mod wires; diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface.rs b/editor/src/messages/portfolio/document/utility_types/network_interface.rs index 7bb5e05bc1..50a11fb034 100644 --- a/editor/src/messages/portfolio/document/utility_types/network_interface.rs +++ b/editor/src/messages/portfolio/document/utility_types/network_interface.rs @@ -1,7 +1,24 @@ +mod caches; +#[cfg(test)] +mod characterization_tests; mod deserialization; +mod hit_tests; +mod layout; mod memo_network; +mod mutations; +mod queries; mod resolved_types; pub mod storage_metadata; +mod structure; +mod template; +mod types; +#[cfg(test)] +mod validation; +mod view; + +pub use template::*; +pub use types::*; +pub use view::{NetworkError, NetworkView}; use super::document_metadata::{DocumentMetadata, LayerNodeIdentifier, NodeRelations}; use super::misc::PTZ; @@ -10,12 +27,11 @@ use crate::consts::{ EXPORTS_TO_RIGHT_EDGE_PIXEL_GAP, EXPORTS_TO_TOP_EDGE_PIXEL_GAP, GRID_SIZE, HALF_GRID_SIZE, IMPORTS_TO_LEFT_EDGE_PIXEL_GAP, IMPORTS_TO_TOP_EDGE_PIXEL_GAP, LAYER_INDENT_OFFSET, NODE_CHAIN_WIDTH, STACK_VERTICAL_GAP, }; -use crate::messages::portfolio::document::graph_operation::utility_types::ModifyInputsContext; use crate::messages::portfolio::document::node_graph::document_node_definitions::{DefinitionIdentifier, resolve_document_node_type}; use crate::messages::portfolio::document::node_graph::utility_types::{Direction, FrontendClickTargets, FrontendGraphDataType, FrontendGraphInput, FrontendGraphOutput}; -use crate::messages::portfolio::document::overlays::utility_functions::text_width; use crate::messages::portfolio::document::utility_types::network_interface::resolved_types::ResolvedDocumentNodeTypes; -use crate::messages::portfolio::document::utility_types::wires::{GraphWireStyle, WirePath, WirePathUpdate, build_vector_wire}; +use crate::messages::portfolio::document::utility_types::text_metrics::text_width; +use crate::messages::portfolio::document::utility_types::wires::{GraphWireStyle, WirePath, WirePathUpdate, build_thick_wire_center_line, build_vector_wire}; use crate::messages::tool::common_functionality::graph_modification_utils; use crate::messages::tool::tool_messages::tool_prelude::NumberInputMode; use deserialization::deserialize_node_persistent_metadata; @@ -24,13 +40,12 @@ use graph_craft::Type; use graph_craft::application_io::resource::ResourceId; use graph_craft::document::value::TaggedValue; use graph_craft::document::{DocumentNode, DocumentNodeImplementation, NodeId, NodeInput, NodeNetwork, OldDocumentNodeImplementation, OldNodeNetwork}; -use graphene_std::Graphic; -use graphene_std::list::List; +use graphene_std::Appearance; +use graphene_std::ContextDependencies; use graphene_std::math::quad::Quad; -use graphene_std::subpath::Subpath; use graphene_std::transform::Footprint; use graphene_std::vector::click_target::{ClickTarget, ClickTargetType, FreePoint}; -use graphene_std::vector::{PointId, Vector, VectorModificationType}; +use graphene_std::vector::{Vector, VectorModificationType}; use kurbo::BezPath; use memo_network::MemoNetwork; use serde_json::{Value, json}; @@ -47,7 +62,7 @@ pub struct NodeNetworkInterface { network: MemoNetwork, /// Stores all editor information for a NodeNetwork. Should automatically kept in sync by the setter methods when changes to the document network are made. network_metadata: NodeNetworkMetadata, - // TODO: Wrap in TransientMetadata Option + // TODO: Wrap in a TransientCache /// Stores the document network's structural topology. Should automatically kept in sync by the setter methods when changes to the document network are made. #[serde(skip)] document_metadata: DocumentMetadata, @@ -96,6942 +111,6 @@ impl NodeNetworkInterface { } } -// Public immutable getters for the network interface -impl NodeNetworkInterface { - /// Gets the network of the root document - pub fn document_network(&self) -> &NodeNetwork { - self.network.network() - } - pub fn document_network_mut(&mut self) -> &mut NodeNetwork { - self.network.network_mut() - } - - /// Gets the nested network based on network_path - pub fn nested_network(&self, network_path: &[NodeId]) -> Option<&NodeNetwork> { - let Some(network) = self.document_network().nested_network(network_path) else { - log::error!("Could not get nested network with path {network_path:?} in NodeNetworkInterface::network"); - return None; - }; - Some(network) - } - - pub fn network_hash(&self) -> u64 { - self.network.current_hash() - } - - /// Get the specified document node in the nested network based on node_id and network_path - pub fn document_node(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&DocumentNode> { - let network = self.nested_network(network_path)?; - let Some(node_metadata) = network.nodes.get(node_id) else { - log::error!("Could not get document node with id {node_id} in network {network_path:?}"); - return None; - }; - Some(node_metadata) - } - - pub fn node_metadata(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&DocumentNodeMetadata> { - let network_metadata = self.network_metadata(network_path)?; - let Some(node_metadata) = network_metadata.persistent_metadata.node_metadata.get(node_id) else { - log::error!("Could not get node metadata for node {node_id} in network {network_path:?}"); - return None; - }; - Some(node_metadata) - } - - pub fn document_network_metadata(&self) -> &NodeNetworkMetadata { - &self.network_metadata - } - - /// The network metadata should always exist for the current network - pub fn network_metadata(&self, network_path: &[NodeId]) -> Option<&NodeNetworkMetadata> { - let Some(network_metadata) = self.network_metadata.nested_metadata(network_path) else { - log::error!("Could not get nested network_metadata with path {network_path:?}"); - return None; - }; - Some(network_metadata) - } - - pub fn document_metadata(&self) -> &DocumentMetadata { - &self.document_metadata - } - - pub fn transaction_status(&self) -> TransactionStatus { - self.transaction_status - } - - pub fn selected_nodes(&self) -> SelectedNodes { - self.selected_nodes_in_nested_network(&[]).unwrap_or_default() - } - - /// Get the selected nodes for the network at the network_path - pub fn selected_nodes_in_nested_network(&self, network_path: &[NodeId]) -> Option { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in selected_nodes"); - return None; - }; - - Some( - network_metadata - .persistent_metadata - .selection_undo_history - .back() - .cloned() - .unwrap_or_default() - .filtered_selected_nodes(|node_id| network_metadata.persistent_metadata.node_metadata.contains_key(node_id)), - ) - } - - /// Get the network which the encapsulating node of the currently viewed network is part of. Will always be None in the document network. - pub fn encapsulating_network_metadata(&self, network_path: &[NodeId]) -> Option<&NodeNetworkMetadata> { - let mut encapsulating_path = network_path.to_vec(); - encapsulating_path.pop()?; - let Some(parent_metadata) = self.network_metadata(&encapsulating_path) else { - log::error!("Could not get parent network in encapsulating_node_metadata"); - return None; - }; - Some(parent_metadata) - } - - /// Get the node which encapsulates the currently viewed network. Will always be None in the document network. - pub fn encapsulating_node(&self, network_path: &[NodeId]) -> Option<&DocumentNode> { - let mut encapsulating_path = network_path.to_vec(); - let encapsulating_node_id = encapsulating_path.pop()?; - let Some(encapsulating_node) = self.document_node(&encapsulating_node_id, &encapsulating_path) else { - log::error!("Could not get encapsulating node in encapsulating_node"); - return None; - }; - Some(encapsulating_node) - } - - /// Get the node metadata for the node which encapsulates the currently viewed network. Will always be None in the document network. - pub fn encapsulating_node_metadata(&self, network_path: &[NodeId]) -> Option<&DocumentNodeMetadata> { - let mut encapsulating_path = network_path.to_vec(); - let encapsulating_node_id = encapsulating_path.pop()?; - let Some(parent_metadata) = self.network_metadata(&encapsulating_path) else { - log::error!("Could not get parent network in encapsulating_node_metadata"); - return None; - }; - let Some(encapsulating_node_metadata) = parent_metadata.persistent_metadata.node_metadata.get(&encapsulating_node_id) else { - log::error!("Could not get encapsulating node metadata in encapsulating_node_metadata"); - return None; - }; - Some(encapsulating_node_metadata) - } - - /// Returns the first downstream layer(inclusive) from a node. If the node is a layer, it will return itself. - pub fn downstream_layer_for_chain_node(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Option { - let mut id = *node_id; - while !self.is_layer(&id, network_path) { - id = self.outward_wires(network_path)?.get(&OutputConnector::node(id, 0))?.first()?.node_id()?; - } - Some(id) - } - - /// Returns all downstream layers (inclusive) from a node. If the node is a layer, it will return itself. - pub fn downstream_layers(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Vec { - let mut stack = vec![*node_id]; - let mut layers = Vec::new(); - while let Some(current_node) = stack.pop() { - if self.is_layer(¤t_node, network_path) { - layers.push(current_node); - } else { - let Some(outward_wires) = self.outward_wires(network_path).and_then(|outward_wires| outward_wires.get(&OutputConnector::node(current_node, 0))) else { - log::error!("Could not get outward wires in downstream_layer"); - return Vec::new(); - }; - stack.extend(outward_wires.iter().filter_map(|input_connector| input_connector.node_id())); - } - } - layers - } - - pub fn chain_width(&self, node_id: &NodeId, network_path: &[NodeId]) -> u32 { - if self.number_of_displayed_inputs(node_id, network_path) > 1 { - let mut last_chain_node_distance = 0_u32; - // Iterate upstream from the layer, and get the number of nodes distance to the last node with Position::Chain - for (index, node_id) in self - .upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalPrimaryOutputFlow) - .skip(1) - .enumerate() - .collect::>() - { - // Check if the node is positioned as a chain - if self.is_chain(&node_id, network_path) { - last_chain_node_distance = (index as u32) + 1; - } else { - return last_chain_node_distance * NODE_CHAIN_WIDTH as u32 + 1; - } - } - - last_chain_node_distance * NODE_CHAIN_WIDTH as u32 + 1 - } else { - // Layer with no inputs has no chain - 0 - } - } - - /// Check if the specified node id is connected to the output - pub fn connected_to_output(&self, target_node_id: &NodeId, network_path: &[NodeId]) -> bool { - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get network in connected_to_output"); - return false; - }; - // If the node is the output then return true - if network - .exports - .iter() - .any(|export| if let NodeInput::Node { node_id, .. } = export { node_id == target_node_id } else { false }) - { - return true; - } - - // Get the outputs - let mut stack = network - .exports - .iter() - .filter_map(|output| if let NodeInput::Node { node_id, .. } = output { network.nodes.get(node_id) } else { None }) - .collect::>(); - let mut already_visited = HashSet::new(); - already_visited.extend( - network - .exports - .iter() - .filter_map(|output| if let NodeInput::Node { node_id, .. } = output { Some(node_id) } else { None }), - ); - - while let Some(node) = stack.pop() { - for input in &node.inputs { - if let &NodeInput::Node { node_id: ref_id, .. } = input { - // Skip if already viewed - if already_visited.contains(&ref_id) { - continue; - } - // If the target node is used as input then return true - if ref_id == *target_node_id { - return true; - } - // Add the referenced node to the stack - let Some(ref_node) = network.nodes.get(&ref_id) else { - continue; - }; - already_visited.insert(ref_id); - stack.push(ref_node); - } - } - } - - false - } - - pub fn number_of_imports(&self, network_path: &[NodeId]) -> usize { - // TODO: Use network.import_types.len() - if let Some(encapsulating_node) = self.encapsulating_node(network_path) { - encapsulating_node.inputs.len() - } else { - 0 - } - } - - pub fn number_of_exports(&self, network_path: &[NodeId]) -> usize { - if let Some(network) = self.nested_network(network_path) { network.exports.len() } else { 0 } - } - - fn number_of_displayed_inputs(&self, node_id: &NodeId, network_path: &[NodeId]) -> usize { - let Some(node) = self.document_node(node_id, network_path) else { - log::error!("Could not get node {node_id} in number_of_displayed_inputs"); - return 0; - }; - node.inputs.iter().filter(|input| input.is_exposed()).count() - } - - pub fn number_of_inputs(&self, node_id: &NodeId, network_path: &[NodeId]) -> usize { - let Some(node) = self.document_node(node_id, network_path) else { - log::error!("Could not get node {node_id} in number_of_inputs"); - return 0; - }; - node.inputs.len() - } - - /// Whether the node has an exposed input at index 0 to accept the horizontal flow from upstream. - /// A node without one (e.g. a generator) can only be the most-upstream node in a chain. - pub fn has_primary_input(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - self.input_from_connector(&InputConnector::node(*node_id, 0), network_path).is_some_and(|input| input.is_exposed()) - } - - pub fn number_of_outputs(&self, node_id: &NodeId, network_path: &[NodeId]) -> usize { - let Some(implementation) = self.implementation(node_id, network_path) else { - log::error!("Could not get node {node_id} in number_of_outputs"); - return 0; - }; - match &implementation { - DocumentNodeImplementation::ProtoNode(_) => 1, - DocumentNodeImplementation::Network(nested_network) => nested_network.exports.len(), - DocumentNodeImplementation::Extract => 1, - } - } - - /// Creates a copy for each node by disconnecting nodes which are not connected to other copied nodes. - /// Returns an iterator of all persistent metadata for a node and their ids - pub fn copy_nodes<'a>(&'a mut self, new_ids: &'a HashMap, network_path: &'a [NodeId]) -> impl Iterator + 'a { - let mut new_nodes = new_ids - .iter() - .filter_map(|(node_id, &new)| { - self.create_node_template(node_id, network_path).and_then(|mut node_template| { - let Some(outward_wires) = self.outward_wires(network_path) else { - log::error!("Could not get outward wires in copy_nodes"); - return None; - }; - // TODO: Get downstream connections from all outputs - let mut downstream_connections = outward_wires.get(&OutputConnector::node(*node_id, 0)).map_or([].iter(), |outputs| outputs.iter()); - let has_selected_node_downstream = downstream_connections.any(|input_connector| input_connector.node_id().is_some_and(|upstream_id| new_ids.keys().any(|key| *key == upstream_id))); - // If the copied node does not have a downstream connection to another copied node, then set the position to absolute - if !has_selected_node_downstream { - let Some(position) = self.position(node_id, network_path) else { - log::error!("Could not get position in create_node_template"); - return None; - }; - match &mut node_template.persistent_node_metadata.node_type_metadata { - NodeTypePersistentMetadata::Layer(layer_metadata) => layer_metadata.position = LayerPosition::Absolute(position), - NodeTypePersistentMetadata::Node(node_metadata) => node_metadata.position = NodePosition::Absolute(position), - }; - } - - // If a chain node does not have a selected downstream layer, then set the position to absolute - let downstream_layer = self.downstream_layer_for_chain_node(node_id, network_path); - if downstream_layer.is_none_or(|downstream_layer| new_ids.keys().all(|key| *key != downstream_layer)) { - let Some(position) = self.position(node_id, network_path) else { - log::error!("Could not get position in create_node_template"); - return None; - }; - node_template.persistent_node_metadata.node_type_metadata = NodeTypePersistentMetadata::Node(NodePersistentMetadata { - position: NodePosition::Absolute(position), - }); - } - - // Shift all absolute nodes 2 to the right and 2 down - // TODO: Remove 2x2 offset and replace with layout system to find space for new node - match &mut node_template.persistent_node_metadata.node_type_metadata { - NodeTypePersistentMetadata::Layer(layer_metadata) => { - if let LayerPosition::Absolute(position) = &mut layer_metadata.position { - *position += IVec2::new(2, 2) - } - } - NodeTypePersistentMetadata::Node(node_metadata) => { - if let NodePosition::Absolute(position) = &mut node_metadata.position { - *position += IVec2::new(2, 2) - } - } - } - - Some((new, *node_id, node_template)) - }) - }) - .collect::>(); - - for old_id in new_nodes.iter().map(|(_, old_id, _)| *old_id).collect::>() { - // Try set all selected nodes upstream of a layer to be chain nodes - if self.is_layer(&old_id, network_path) { - for valid_upstream_chain_node in self.valid_upstream_chain_nodes(&InputConnector::node(old_id, 1), network_path) { - if let Some(node_template) = new_nodes.iter_mut().find_map(|(_, old_id, template)| (*old_id == valid_upstream_chain_node).then_some(template)) { - match &mut node_template.persistent_node_metadata.node_type_metadata { - NodeTypePersistentMetadata::Node(node_metadata) => node_metadata.position = NodePosition::Chain, - NodeTypePersistentMetadata::Layer(_) => log::error!("Node cannot be a layer"), - }; - } - } - } - } - new_nodes.into_iter().map(move |(new, node_id, node)| (new, self.map_ids(node, &node_id, new_ids, network_path))) - } - - /// Create a node template from an existing node. - pub fn create_node_template(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option { - let Some(node) = self.document_node(node_id, network_path) else { - log::error!("Could not get node {node_id} in create_node_template"); - return None; - }; - let Some(node_metadata) = self.node_metadata(node_id, network_path).cloned() else { - log::error!("Could not get node_metadata in create_node_template"); - return None; - }; - - Some(NodeTemplate { - persistent_node_metadata: node_metadata.persistent_metadata, - document_node: node.clone(), - }) - } - - /// Converts all node id inputs to a new id based on a HashMap. - /// - /// If the node is not in the hashmap then a default input is found based on the compiled network, using the node_id passed as a parameter - pub fn map_ids(&mut self, mut node_template: NodeTemplate, node_id: &NodeId, new_ids: &HashMap, network_path: &[NodeId]) -> NodeTemplate { - for (input_index, input) in node_template.document_node.inputs.iter_mut().enumerate() { - if let &mut NodeInput::Node { node_id: id, output_index } = input { - if let Some(&new_id) = new_ids.get(&id) { - *input = NodeInput::Node { node_id: new_id, output_index }; - } else { - // Disconnect node input if it is not connected to another node in new_ids - let tagged_value = self.tagged_value_from_input(&InputConnector::node(*node_id, input_index), network_path); - *input = NodeInput::value(tagged_value, true); - } - } else if let &mut NodeInput::Import { .. } = input { - // Always disconnect network node input - let tagged_value = self.tagged_value_from_input(&InputConnector::node(*node_id, input_index), network_path); - *input = NodeInput::value(tagged_value, true); - } - } - node_template - } - - pub fn input_from_connector(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> Option<&NodeInput> { - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get network in input_from_connector"); - return None; - }; - match input_connector { - InputConnector::Node { node_id, input_index } => { - let Some(node) = network.nodes.get(node_id) else { - log::error!("Could not get node {node_id} in input_from_connector"); - return None; - }; - node.inputs.get(*input_index) - } - InputConnector::Export(export_index) => network.exports.get(*export_index), - } - } - - pub fn position(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Option { - let top_left_position = self - .node_click_targets(node_id, network_path) - .and_then(|click_targets| click_targets.node_click_target.bounding_box()) - .map(|mut bounding_box| { - if !self.is_layer(node_id, network_path) { - bounding_box[0] -= DVec2::new(0., 12.); - } - (bounding_box[0] / 24.).as_ivec2() - }); - top_left_position.map(|position| { - if self.is_layer(node_id, network_path) { - position + IVec2::new(self.chain_width(node_id, network_path) as i32, 0) - } else { - position - } - }) - } - - pub fn collect_used_resources(&self, target: &mut HashSet) { - collect_network_resources(self.document_network(), target); - } - - pub fn frontend_imports(&mut self, network_path: &[NodeId]) -> Vec> { - match network_path.split_last() { - Some((node_id, encapsulating_network_path)) => { - let Some(node) = self.document_node(node_id, encapsulating_network_path) else { - log::error!("Could not get node {node_id} in network {encapsulating_network_path:?}"); - return Vec::new(); - }; - let mut frontend_imports = (0..node.inputs.len()) - .map(|import_index| self.frontend_output_from_connector(&OutputConnector::Import(import_index), network_path)) - .collect::>(); - if frontend_imports.is_empty() { - frontend_imports.push(None); - } - frontend_imports - } - // In the document network display no imports - None => Vec::new(), - } - } - - pub fn frontend_exports(&mut self, network_path: &[NodeId]) -> Vec> { - let Some(network) = self.nested_network(network_path) else { return Vec::new() }; - let mut frontend_exports = ((0..network.exports.len()).map(|export_index| self.frontend_input_from_connector(&InputConnector::Export(export_index), network_path))).collect::>(); - if frontend_exports.is_empty() { - frontend_exports.push(None); - } - frontend_exports - } - - pub fn import_export_position(&mut self, network_path: &[NodeId]) -> Option<(IVec2, IVec2)> { - let Some(all_nodes_bounding_box) = self.all_nodes_bounding_box(network_path).cloned() else { - log::error!("Could not get all nodes bounding box in load_export_ports"); - return None; - }; - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get current network in load_export_ports"); - return None; - }; - - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in load_export_ports"); - return None; - }; - let node_graph_to_viewport = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport; - let target_viewport_top_left = DVec2::new(IMPORTS_TO_LEFT_EDGE_PIXEL_GAP as f64, IMPORTS_TO_TOP_EDGE_PIXEL_GAP as f64); - - let node_graph_pixel_offset_top_left = node_graph_to_viewport.inverse().transform_point2(target_viewport_top_left); - - // A 5x5 grid offset from the top left corner - let node_graph_grid_space_offset_top_left = node_graph_to_viewport.inverse().transform_point2(DVec2::ZERO) + DVec2::new(5. * GRID_SIZE as f64, 4. * GRID_SIZE as f64); - - // The inner bound of the import is the highest/furthest left of the two offsets - let top_left_inner_bound = DVec2::new( - node_graph_pixel_offset_top_left.x.min(node_graph_grid_space_offset_top_left.x), - node_graph_pixel_offset_top_left.y.min(node_graph_grid_space_offset_top_left.y), - ); - - let offset_from_top_left = if network - .exports - .first() - .is_some_and(|export| export.as_node().is_some_and(|export_node| self.is_layer(&export_node, network_path))) - { - DVec2::new(-4. * GRID_SIZE as f64, -2. * GRID_SIZE as f64) - } else { - DVec2::new(-4. * GRID_SIZE as f64, 0.) - }; - - let bounding_box_top_left = DVec2::new((all_nodes_bounding_box[0].x / 24. + 0.5).floor() * 24., (all_nodes_bounding_box[0].y / 24. + 0.5).floor() * 24.) + offset_from_top_left; - let import_top_left = DVec2::new(top_left_inner_bound.x.min(bounding_box_top_left.x), top_left_inner_bound.y.min(bounding_box_top_left.y)); - let rounded_import_top_left = DVec2::new((import_top_left.x / 24.).round() * 24., (import_top_left.y / 24.).round() * 24.); - - let viewport_width = network_metadata.persistent_metadata.navigation_metadata.node_graph_width; - - let target_viewport_top_right = DVec2::new(viewport_width - EXPORTS_TO_RIGHT_EDGE_PIXEL_GAP as f64, EXPORTS_TO_TOP_EDGE_PIXEL_GAP as f64); - - // An offset from the right edge in viewport pixels - let node_graph_pixel_offset_top_right = node_graph_to_viewport.inverse().transform_point2(target_viewport_top_right); - - // A 5x5 grid offset from the right corner - let node_graph_grid_space_offset_top_right = node_graph_to_viewport.inverse().transform_point2(DVec2::new(viewport_width, 0.)) + DVec2::new(-5. * GRID_SIZE as f64, 4. * GRID_SIZE as f64); - - // The inner bound of the export is the highest/furthest right of the two offsets. - // When zoomed out this keeps it a constant grid space away from the edge, but when zoomed in it prevents the exports from getting too far in - let top_right_inner_bound = DVec2::new( - node_graph_pixel_offset_top_right.x.max(node_graph_grid_space_offset_top_right.x), - node_graph_pixel_offset_top_right.y.min(node_graph_grid_space_offset_top_right.y), - ); - - let offset_from_top_right = if network - .exports - .first() - .is_some_and(|export| export.as_node().is_some_and(|export_node| self.is_layer(&export_node, network_path))) - { - DVec2::new(2. * GRID_SIZE as f64, -2. * GRID_SIZE as f64) - } else { - DVec2::new(4. * GRID_SIZE as f64, 0.) - }; - - let mut bounding_box_top_right = DVec2::new((all_nodes_bounding_box[1].x / 24. + 0.5).floor() * 24., (all_nodes_bounding_box[0].y / 24. + 0.5).floor() * 24.); - bounding_box_top_right += offset_from_top_right; - let export_top_right = DVec2::new(top_right_inner_bound.x.max(bounding_box_top_right.x), top_right_inner_bound.y.min(bounding_box_top_right.y)); - let rounded_export_top_right = DVec2::new((export_top_right.x / 24.).round() * 24., (export_top_right.y / 24.).round() * 24.); - - Some((rounded_import_top_left.as_ivec2(), rounded_export_top_right.as_ivec2())) - } - - /// Returns None if there is an error, it is a hidden primary export, or a hidden input - pub fn frontend_input_from_connector(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) -> Option { - // Return None if it is a hidden input - if self.input_from_connector(input_connector, network_path).is_some_and(|input| !input.is_exposed()) { - return None; - } - let input_type = self.input_type(input_connector, network_path); - let data_type = input_type.displayed_type(); - let resolved_type = input_type.resolved_type_node_string(); - - let connected_to = self - .upstream_output_connector(input_connector, network_path) - .map(|output_connector| match output_connector { - OutputConnector::Node { node_id, output_index } => { - let name = self.display_name(&node_id, network_path); - format!("Connected to output #{output_index} of \"{name}\", ID: {node_id}.") - } - OutputConnector::Import(import_index) => format!("Connected to import #{import_index}."), - }) - .unwrap_or("Connected to nothing.".to_string()); - - let (name, description) = match input_connector { - InputConnector::Node { node_id, input_index } => self.displayed_input_name_and_description(node_id, *input_index, network_path), - InputConnector::Export(export_index) => { - // Get export name from parent node metadata input, which must match the number of exports. - // Empty string means to use type, or "Export + index" if type is empty determined - let export_name = if network_path.is_empty() { - "Canvas".to_string() - } else { - self.encapsulating_node_metadata(network_path) - .and_then(|encapsulating_metadata| encapsulating_metadata.persistent_metadata.output_names.get(*export_index).cloned()) - .unwrap_or_default() - }; - - let export_name = if !export_name.is_empty() { - export_name - } else if let Some(export_type_name) = input_type.compiled_nested_type().map(ToString::to_string) { - export_type_name - } else { - format!("Export #{}", export_index) - }; - - (export_name, String::new()) - } - }; - - let valid_types = self.potential_valid_input_types(input_connector, network_path).iter().map(ToString::to_string).collect::>(); - let valid_types = { - // Dedupe while preserving order - let mut found = HashSet::new(); - valid_types.into_iter().filter(|s| found.insert(s.clone())).collect::>() - }; - - Some(FrontendGraphInput { - data_type, - resolved_type, - name, - description, - valid_types, - connected_to, - }) - } - - /// Returns None if there is an error, it is the document network, a hidden primary output or import - pub fn frontend_output_from_connector(&mut self, output_connector: &OutputConnector, network_path: &[NodeId]) -> Option { - let output_type = self.output_type(output_connector, network_path); - let (name, description) = match output_connector { - OutputConnector::Node { node_id, output_index } => { - // Do not display the primary output port for a node if it is a network node with a hidden primary export - if *output_index == 0 && self.hidden_primary_output(node_id, network_path) { - return None; - }; - // Get the output name from the interior network export name - let node_metadata = self.node_metadata(node_id, network_path)?; - let output_name = node_metadata.persistent_metadata.output_names.get(*output_index).cloned().unwrap_or_default(); - - let output_name = if !output_name.is_empty() { output_name } else { output_type.resolved_type_node_string() }; - (output_name, String::new()) - } - OutputConnector::Import(import_index) => { - // Get the import name from the encapsulating node input metadata - let Some((encapsulating_node_id, encapsulating_path)) = network_path.split_last() else { - // Return None if it is an import in the document network - return None; - }; - // Return None if the primary input is hidden and this is the primary import - if *import_index == 0 && self.hidden_primary_import(network_path) { - return None; - }; - let (import_name, description) = self.displayed_input_name_and_description(encapsulating_node_id, *import_index, encapsulating_path); - - let import_name = if !import_name.is_empty() { - import_name - } else if let Some(import_type_name) = output_type.compiled_nested_type().map(ToString::to_string) { - import_type_name - } else { - format!("Import #{}", import_index) - }; - - (import_name, description) - } - }; - let data_type = output_type.displayed_type(); - let resolved_type = output_type.resolved_type_node_string(); - let mut connected_to = self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(output_connector)) - .cloned() - .unwrap_or_default() - .iter() - .map(|input| match input { - &InputConnector::Node { node_id, input_index } => { - let name = self.display_name(&node_id, network_path); - format!("Connected to input #{input_index} of \"{name}\", ID: {node_id}.") - } - InputConnector::Export(export_index) => format!("Connected to export #{export_index}."), - }) - .collect::>(); - - if connected_to.is_empty() { - connected_to.push("Connected to nothing.".to_string()); - } - - Some(FrontendGraphOutput { - data_type, - resolved_type, - name, - description, - connected_to, - }) - } - - pub fn height_from_click_target(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Option { - let mut node_height: Option = self - .node_click_targets(node_id, network_path) - .and_then(|click_targets: &DocumentNodeClickTargets| click_targets.node_click_target.bounding_box()) - .map(|bounding_box| ((bounding_box[1].y - bounding_box[0].y) / 24.) as u32); - if !self.is_layer(node_id, network_path) { - node_height = node_height.map(|height| height + 1); - } - node_height - } - - // All chain nodes and branches from the chain which are sole dependents of the layer - pub fn upstream_nodes_below_layer(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> HashSet { - // Every upstream node below layer must be a sole dependent - let mut upstream_nodes_below_layer = HashSet::new(); - - let mut potential_upstream_nodes = HashSet::new(); - for chain_node in self - .upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalFlow) - .skip(1) - .take_while(|node_id| self.is_chain(node_id, network_path)) - .collect::>() - { - upstream_nodes_below_layer.insert(chain_node); - let Some(chain_node) = self.document_node(&chain_node, network_path) else { - log::error!("Could not get node {node_id} in upstream_nodes_below_layer"); - continue; - }; - potential_upstream_nodes.extend(chain_node.inputs.iter().filter(|input| input.is_exposed()).skip(1).filter_map(|node_input| node_input.as_node())) - } - - // Get the node feeding into the left input of the chain - let mut current_node_id = *node_id; - loop { - let Some(current_node) = self.document_node(¤t_node_id, network_path) else { - log::error!("Could not get node {node_id} in upstream_nodes_below_layer"); - break; - }; - if let Some(primary_node_id) = current_node - .inputs - .iter() - .filter(|input| input.is_exposed()) - .nth(if self.is_layer(¤t_node_id, network_path) { 1 } else { 0 }) - .and_then(|left_input| left_input.as_node()) - { - if self.is_chain(&primary_node_id, network_path) { - current_node_id = primary_node_id; - } else { - potential_upstream_nodes.insert(primary_node_id); - break; - } - } else { - break; - } - } - - for potential_upstream_node in potential_upstream_nodes { - // The upstream chain cannot be added if there is some node upstream from an input that is not a sole dependent - let mut upstream_chain_can_be_added = true; - // Collect a vec of nodes that are sole dependents while iterating - let mut sole_dependents = HashSet::new(); - - for upstream_node_from_input in self - .upstream_flow_back_from_nodes(vec![potential_upstream_node], network_path, FlowType::UpstreamFlow) - .collect::>() - { - let number_of_outputs = self.number_of_outputs(&upstream_node_from_input, network_path); - - // A node is a sole dependent if all outputs are sole dependents, and there are no dead ends - let mut all_outputs_are_sole_dependents = true; - let mut dead_ends = 0; - - for output_index in 0..number_of_outputs { - let downstream_connections = { - let Some(outward_wires) = self.outward_wires(network_path) else { - log::error!("Could not get outward wires in upstream_nodes_below_layer"); - continue; - }; - outward_wires.get(&OutputConnector::node(upstream_node_from_input, output_index)).cloned() - }; - let Some(downstream_connections) = downstream_connections else { - log::error!("Could not get outward wires in upstream_nodes_below_layer"); - continue; - }; - let mut current_output_is_sole_dependent = true; - let mut stack = downstream_connections; - while let Some(current_downstream_connection) = stack.pop() { - // Iterate downstream. If a sole dependent or chain_node_id is reached, then stop the iteration. If the exports is eventually reached, then it is not a sole dependent - match ¤t_downstream_connection { - InputConnector::Node { - node_id: downstream_node_id, - input_index, - } => { - // Stop iterating once the downstream node is the left input to the chain or a sole dependent - if !(sole_dependents.contains(downstream_node_id) || downstream_node_id == node_id && *input_index == 1) { - // Continue iterating downstream for the downstream node - let number_of_outputs = self.number_of_outputs(downstream_node_id, network_path); - let Some(outward_wires) = self.outward_wires(network_path) else { - log::error!("Could not get outward wires in upstream_nodes_below_layer"); - continue; - }; - let mut has_downstream_connections = false; - for output_index in 0..number_of_outputs { - let Some(downstream_connections) = outward_wires.get(&OutputConnector::node(*downstream_node_id, output_index)) else { - log::error!("Could not get outward wires in upstream_nodes_below_layer"); - continue; - }; - if !downstream_connections.is_empty() { - has_downstream_connections = true; - } - stack.extend(downstream_connections.clone()); - } - if !has_downstream_connections { - dead_ends += 1; - } - } - } - InputConnector::Export(_) => current_output_is_sole_dependent = false, - } - } - if !current_output_is_sole_dependent || dead_ends != 0 { - all_outputs_are_sole_dependents = false; - break; - } - } - if all_outputs_are_sole_dependents && dead_ends == 0 { - sole_dependents.insert(upstream_node_from_input); - } else { - upstream_chain_can_be_added = false; - break; - } - } - - if upstream_chain_can_be_added { - upstream_nodes_below_layer.extend(sole_dependents) - } - } - upstream_nodes_below_layer - } - - pub fn previewing(&self, network_path: &[NodeId]) -> Previewing { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in previewing"); - return Previewing::No; - }; - network_metadata.persistent_metadata.previewing - } - - /// Returns the root node (the node that the solid line is connect to), or None if no nodes are connected to the output - pub fn root_node(&self, network_path: &[NodeId]) -> Option { - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get network in root_node"); - return None; - }; - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in root_node"); - return None; - }; - match &network_metadata.persistent_metadata.previewing { - Previewing::Yes { root_node_to_restore } => *root_node_to_restore, - Previewing::No => network.exports.first().and_then(|export| { - if let NodeInput::Node { node_id, output_index, .. } = export { - Some(RootNode { - node_id: *node_id, - output_index: *output_index, - }) - } else { - None - } - }), - } - } - - pub fn reference(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option { - let Some(document_node) = self.document_node(node_id, network_path) else { - log::error!("Could not get document_node for node in reference: {node_id:?}"); - return None; - }; - match &document_node.implementation { - DocumentNodeImplementation::Network(_) => { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get reference for node in reference: {node_id:?}"); - return None; - }; - node_metadata - .persistent_metadata - .network_metadata - .as_ref() - .expect("Network metadata must exist for network node in reference") - .persistent_metadata - .reference - .clone() - .map(DefinitionIdentifier::Network) - } - DocumentNodeImplementation::ProtoNode(protonode_id) => Some(DefinitionIdentifier::ProtoNode(protonode_id.clone())), - _ => None, - } - } - - pub fn implementation(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&DocumentNodeImplementation> { - let Some(node) = self.document_node(node_id, network_path) else { - log::error!("Could not get implementation"); - return None; - }; - Some(&node.implementation) - } - - pub fn input_data(&self, node_id: &NodeId, index: usize, key: &str, network_path: &[NodeId]) -> Option<&Value> { - let metadata = self - .node_metadata(node_id, network_path) - .and_then(|node_metadata| node_metadata.persistent_metadata.input_metadata.get(index))?; - metadata.persistent_metadata.input_data.get(key) - } - pub fn persistent_input_metadata(&self, node_id: &NodeId, index: usize, network_path: &[NodeId]) -> Option<&InputPersistentMetadata> { - let metadata = self - .node_metadata(node_id, network_path) - .and_then(|node_metadata| node_metadata.persistent_metadata.input_metadata.get(index))?; - Some(&metadata.persistent_metadata) - } - - fn transient_input_metadata(&self, node_id: &NodeId, index: usize, network_path: &[NodeId]) -> Option<&InputTransientMetadata> { - let metadata = self - .node_metadata(node_id, network_path) - .and_then(|node_metadata| node_metadata.persistent_metadata.input_metadata.get(index))?; - Some(&metadata.transient_metadata) - } - - pub fn set_input_override(&mut self, node_id: &NodeId, index: usize, widget_override: Option, network_path: &[NodeId]) { - let Some(metadata) = self - .node_metadata_mut(node_id, network_path) - .and_then(|node_metadata| node_metadata.persistent_metadata.input_metadata.get_mut(index)) - else { - log::error!("Could not get input metadata for {node_id} index {index} in set_input_override"); - return; - }; - metadata.persistent_metadata.widget_override = widget_override; - } - - /// Returns the input name to display in the properties panel. If the name is empty then the type is used. - pub fn displayed_input_name_and_description(&mut self, node_id: &NodeId, input_index: usize, network_path: &[NodeId]) -> (String, String) { - let Some(input_metadata) = self.persistent_input_metadata(node_id, input_index, network_path) else { - log::warn!("input metadata not found in displayed_input_name_and_description"); - return (String::new(), String::new()); - }; - let description = input_metadata.input_description.to_string(); - let name = if input_metadata.input_name.is_empty() { - self.input_type(&InputConnector::node(*node_id, input_index), network_path).resolved_type_node_string() - } else { - input_metadata.input_name.to_string() - }; - (name, description) - } - - /// Returns the display name of the node. If the display name is empty, it will return "Untitled Node" or "Untitled Layer" depending on the node type. - pub fn display_name(&self, node_id: &NodeId, network_path: &[NodeId]) -> String { - let is_layer = self.is_layer(node_id, network_path); - - let display_name = if let Some(node_metadata) = self.node_metadata(node_id, network_path) { - node_metadata.persistent_metadata.display_name.clone() - } else { - log::error!("Could not get node_metadata in display_name"); - String::new() - }; - - if display_name.is_empty() { - if is_layer { - "Untitled Layer".to_string() - } else { - // TODO: Have this displayed in italics in the UI - self.implementation_name(node_id, network_path) - } - } else { - display_name - } - } - - /// The uneditable name in the Properties panel which represents the function name of the node implementation. - pub fn implementation_name(&self, node_id: &NodeId, network_path: &[NodeId]) -> String { - self.reference(node_id, network_path) - .map(|identifier| identifier.implementation_name_from_identifier()) - .unwrap_or("Custom Node".to_string()) - } - - pub fn is_locked(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get persistent node metadata in is_locked for node {node_id}"); - return false; - }; - node_metadata.persistent_metadata.locked - } - - pub fn is_pinned(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get persistent node metadata in is_pinned for node {node_id}"); - return false; - }; - node_metadata.persistent_metadata.pinned - } - - /// The given network's pinned nodes in display order: pinning appends, dragging rearranges, and any not yet recorded go last. - pub fn ordered_pinned_nodes(&self, network_path: &[NodeId]) -> Vec { - let Some(network) = self.nested_network(network_path) else { return Vec::new() }; - - let order = self - .network_metadata(network_path) - .map(|network_metadata| network_metadata.persistent_metadata.pinned_node_order.clone()) - .unwrap_or_default(); - - // Follow the saved order, keeping only nodes that still exist and are still pinned - let mut pinned_nodes = order - .iter() - .copied() - .filter(|node_id| network.nodes.contains_key(node_id) && self.is_pinned(node_id, network_path)) - .collect::>(); - - // Append any pinned nodes missing from the saved order at the end - let mut unordered = network - .nodes - .keys() - .copied() - .filter(|node_id| self.is_pinned(node_id, network_path) && !order.contains(node_id)) - .collect::>(); - unordered.sort(); - pinned_nodes.extend(unordered); - - pinned_nodes - } - - pub fn is_visible(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - let Some(node) = self.document_node(node_id, network_path) else { - log::error!("Could not get node in is_visible"); - return false; - }; - node.visible - } - - pub fn is_layer(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get nested node_metadata in is_layer"); - return false; - }; - node_metadata.persistent_metadata.is_layer() - } - - pub fn primary_output_connected_to_layer(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - let Some(outward_wires) = self.outward_wires(network_path) else { - log::error!("Could not get outward_wires in primary_output_connected_to_layer"); - return false; - }; - let Some(downstream_connectors) = outward_wires.get(&OutputConnector::node(*node_id, 0)) else { - log::error!("Could not get downstream_connectors in primary_output_connected_to_layer"); - return false; - }; - - let downstream_nodes = downstream_connectors - .iter() - .filter_map(|connector| connector.node_id().filter(|_| connector.input_index() == 0)) - .collect::>(); - downstream_nodes.iter().any(|node_id| self.is_layer(node_id, network_path)) - } - - pub fn primary_input_connected_to_layer(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - self.input_from_connector(&InputConnector::node(*node_id, 0), network_path) - .and_then(|input| input.as_node()) - .is_some_and(|node_id| self.is_layer(&node_id, network_path)) - } - - pub fn hidden_primary_export(&self, network_path: &[NodeId]) -> bool { - let Some((node_id, network_path)) = network_path.split_last() else { - // The document network does not have a hidden primary export - return false; - }; - self.hidden_primary_output(node_id, network_path) - } - - pub fn hidden_primary_output(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - match self.implementation(node_id, network_path) { - Some(DocumentNodeImplementation::Network(network)) => network.exports.first().is_none_or(|input| !input.is_exposed()), - _ => false, - } - } - - pub fn hidden_primary_import(&self, network_path: &[NodeId]) -> bool { - let Some((encapsulating_node_id, encapsulating_path)) = network_path.split_last() else { - return false; - }; - self.input_from_connector(&InputConnector::node(*encapsulating_node_id, 0), encapsulating_path) - .is_some_and(|input| !input.is_exposed()) - } - - pub fn is_absolute(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get node_metadata in is_absolute"); - return false; - }; - match &node_metadata.persistent_metadata.node_type_metadata { - NodeTypePersistentMetadata::Layer(layer_metadata) => matches!(layer_metadata.position, LayerPosition::Absolute(_)), - NodeTypePersistentMetadata::Node(node_metadata) => matches!(node_metadata.position, NodePosition::Absolute(_)), - } - } - - pub fn is_chain(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get node_metadata in is_chain"); - return false; - }; - match &node_metadata.persistent_metadata.node_type_metadata { - NodeTypePersistentMetadata::Node(node_metadata) => matches!(node_metadata.position, NodePosition::Chain), - _ => false, - } - } - - pub fn is_stack(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get node_metadata in is_stack"); - return false; - }; - match &node_metadata.persistent_metadata.node_type_metadata { - NodeTypePersistentMetadata::Layer(layer_metadata) => matches!(layer_metadata.position, LayerPosition::Stack(_)), - _ => false, - } - } - - pub fn is_artboard(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - self.reference(node_id, network_path) - .is_some_and(|reference| reference == DefinitionIdentifier::Network("Artboard".into()) && self.connected_to_output(node_id, &[])) - } - - pub fn all_artboards(&self) -> HashSet { - self.document_network_metadata() - .persistent_metadata - .node_metadata - .iter() - .filter_map(|(node_id, node_metadata)| { - if node_metadata.persistent_metadata.network_metadata.as_ref().is_some_and(|network_metadata| { - network_metadata - .persistent_metadata - .reference - .as_ref() - .is_some_and(|reference| reference == "Artboard" && self.connected_to_output(node_id, &[]) && self.is_layer(node_id, &[])) - }) { - Some(LayerNodeIdentifier::new(*node_id, self)) - } else { - None - } - }) - .collect() - } - - /// Folders sorted from most nested to least nested - pub fn folders_sorted_by_most_nested(&self, network_path: &[NodeId]) -> Vec { - if !network_path.is_empty() { - log::error!("Currently can only get deepest common ancestor in the document network"); - return Vec::new(); - } - let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { - log::error!("Could not get selected nodes in deepest_common_ancestor"); - return Vec::new(); - }; - let mut folders: Vec<_> = selected_nodes - .selected_layers(self.document_metadata()) - .filter(|layer| layer.has_children(self.document_metadata())) - .collect(); - folders.sort_by_cached_key(|a| std::cmp::Reverse(a.ancestors(self.document_metadata()).count())); - folders - } - - /// Calculates the document bounds in document space - pub fn document_bounds_document_space(&self, include_artboards: bool) -> Option<[DVec2; 2]> { - self.document_metadata - .all_layers() - .filter(|layer| include_artboards || !self.is_artboard(&layer.to_node(), &[])) - .filter_map(|layer| { - if !self.is_artboard(&layer.to_node(), &[]) - && let Some(artboard_node_identifier) = layer - .ancestors(self.document_metadata()) - .find(|ancestor| *ancestor != LayerNodeIdentifier::ROOT_PARENT && self.is_artboard(&ancestor.to_node(), &[])) - { - let artboard = self.document_node(&artboard_node_identifier.to_node(), &[]); - let clip_input = artboard.unwrap().inputs.get(5).unwrap(); - if let NodeInput::Value { tagged_value, .. } = clip_input - && tagged_value.clone().deref() == &TaggedValue::Bool(true) - { - return Some(Quad::clip( - self.document_metadata.bounding_box_document(layer).unwrap_or_default(), - self.document_metadata.bounding_box_document(artboard_node_identifier).unwrap_or_default(), - )); - } - } - self.document_metadata.bounding_box_document(layer) - }) - // Skip any layer bounds containing NaN to avoid poisoning the combined result - .filter(|[min, max]| min.is_finite() && max.is_finite()) - .reduce(Quad::combine_bounds) - } - - pub fn document_bounds_viewport_space(&self, include_artboards: bool) -> Option<[DVec2; 2]> { - let [min, max] = self.document_bounds_document_space(include_artboards)?; - let quad = Quad::from_box([min, max]); - let transformed = self.document_metadata.document_to_viewport * quad; - Some(transformed.bounding_box()) - } - - /// Calculates the document bounds in document space, expanding vector layer bounds to include the rendered - /// stroke width. Used for export so the output canvas captures strokes that overflow the path geometry. - pub fn document_bounds_document_space_with_stroke(&self, include_artboards: bool) -> Option<[DVec2; 2]> { - self.document_metadata - .all_layers() - .filter(|layer| include_artboards || !self.is_artboard(&layer.to_node(), &[])) - .filter_map(|layer| { - if !self.is_artboard(&layer.to_node(), &[]) - && let Some(artboard_node_identifier) = layer - .ancestors(self.document_metadata()) - .find(|ancestor| *ancestor != LayerNodeIdentifier::ROOT_PARENT && self.is_artboard(&ancestor.to_node(), &[])) - && let Some(artboard) = self.document_node(&artboard_node_identifier.to_node(), &[]) - && let Some(clip_input) = artboard.inputs.get(5) - && let NodeInput::Value { tagged_value, .. } = clip_input - && tagged_value.clone().deref() == &TaggedValue::Bool(true) - { - return Some(Quad::clip( - self.document_metadata.bounding_box_document_with_stroke(layer).unwrap_or_default(), - self.document_metadata.bounding_box_document(artboard_node_identifier).unwrap_or_default(), - )); - } - self.document_metadata.bounding_box_document_with_stroke(layer) - }) - // Skip any layer bounds containing NaN to avoid poisoning the combined result - .filter(|[min, max]| min.is_finite() && max.is_finite()) - .reduce(Quad::combine_bounds) - } - - /// Calculates the selected layer bounds in document space - pub fn selected_bounds_document_space(&self, include_artboards: bool, network_path: &[NodeId]) -> Option<[DVec2; 2]> { - let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { - log::error!("Could not get selected nodes in shallowest_unique_layers"); - return None; - }; - selected_nodes - .selected_layers(&self.document_metadata) - .filter(|&layer| include_artboards || !self.is_artboard(&layer.to_node(), &[])) - .filter_map(|layer| self.document_metadata.bounding_box_document(layer)) - .reduce(Quad::combine_bounds) - } - - /// Calculates the selected layer bounds in document space, expanding vector layer bounds to include the - /// rendered stroke width. Used for export so the output canvas captures strokes that overflow the path geometry. - pub fn selected_bounds_document_space_with_stroke(&self, include_artboards: bool, network_path: &[NodeId]) -> Option<[DVec2; 2]> { - let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { - log::error!("Could not get selected nodes in selected_bounds_document_space_with_stroke"); - return None; - }; - selected_nodes - .selected_layers(&self.document_metadata) - .filter(|&layer| include_artboards || !self.is_artboard(&layer.to_node(), &[])) - .filter_map(|layer| self.document_metadata.bounding_box_document_with_stroke(layer)) - .reduce(Quad::combine_bounds) - } - - /// Layers excluding ones that are children of other layers in the list. - // TODO: Cache this - pub fn shallowest_unique_layers(&self, network_path: &[NodeId]) -> impl Iterator + use<> { - let mut sorted_layers = if let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) { - selected_nodes - .selected_layers(self.document_metadata()) - .map(|layer| { - let mut layer_path = layer.ancestors(&self.document_metadata).collect::>(); - layer_path.reverse(); - layer_path - }) - .collect::>() - } else { - log::error!("Could not get selected nodes in shallowest_unique_layers"); - Vec::new() - }; - - // Sorting here creates groups of similar UUID paths - sorted_layers.sort(); - sorted_layers.dedup_by(|a, b| a.starts_with(b)); - sorted_layers.into_iter().map(|mut path| { - let layer = path.pop().expect("Path should not be empty"); - assert!( - layer != LayerNodeIdentifier::ROOT_PARENT, - "The root parent cannot be selected, so it cannot be a shallowest selected layer" - ); - layer - }) - } - - pub fn shallowest_unique_layers_sorted(&self, network_path: &[NodeId]) -> Vec { - let all_layers_to_group = self.shallowest_unique_layers(network_path).collect::>(); - // Ensure nodes are grouped in the correct order - let mut all_layers_to_group_sorted = Vec::new(); - for descendant in LayerNodeIdentifier::ROOT_PARENT.descendants(self.document_metadata()) { - if all_layers_to_group.contains(&descendant) { - all_layers_to_group_sorted.push(descendant); - }; - } - all_layers_to_group_sorted - } - - /// Ancestor that is shared by all layers and that is deepest (more nested). Default may be the root. Skips selected non-folder, non-artboard layers - pub fn deepest_common_ancestor(&self, selected_nodes: &SelectedNodes, network_path: &[NodeId], include_self: bool) -> Option { - if !network_path.is_empty() { - log::error!("Currently can only get deepest common ancestor in the document network"); - return None; - } - selected_nodes - .selected_layers(&self.document_metadata) - .map(|layer| { - let mut layer_path = layer.ancestors(&self.document_metadata).collect::>(); - layer_path.reverse(); - if !include_self || !self.is_artboard(&layer.to_node(), network_path) { - layer_path.pop(); - } - - layer_path - }) - .reduce(|mut a, b| { - a.truncate(a.iter().zip(b.iter()).position(|(&a, &b)| a != b).unwrap_or_else(|| a.len().min(b.len()))); - a - }) - .and_then(|layer| layer.last().copied()) - } - - /// Gives an iterator to all nodes connected to the given nodes by all inputs (primary or primary + secondary depending on `only_follow_primary` choice), traversing backwards upstream starting from the given node's inputs. - pub fn upstream_flow_back_from_nodes<'a>(&'a self, mut node_ids: Vec, network_path: &'a [NodeId], mut flow_type: FlowType) -> impl Iterator + 'a { - let (Some(network), Some(network_metadata)) = (self.nested_network(network_path), self.network_metadata(network_path)) else { - log::error!("Could not get network or network_metadata in upstream_flow_back_from_nodes"); - return FlowIter { - stack: Vec::new(), - network: self.document_network(), - network_metadata: &self.network_metadata, - flow_type: FlowType::UpstreamFlow, - }; - }; - if matches!(flow_type, FlowType::LayerChildrenUpstreamFlow) { - node_ids = node_ids - .iter() - .filter_map(move |node_id| { - if self.is_layer(node_id, network_path) { - network.nodes.get(node_id).and_then(|node| node.inputs.get(1)).and_then(|input| input.as_node()) - } else { - Some(*node_id) - } - }) - .collect::>(); - flow_type = FlowType::UpstreamFlow; - }; - FlowIter { - stack: node_ids, - network, - network_metadata, - flow_type, - } - } - - pub fn upstream_output_connector(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> Option { - let input = self.input_from_connector(input_connector, network_path); - input.and_then(|input| match input { - NodeInput::Node { node_id, output_index, .. } => Some(OutputConnector::node(*node_id, *output_index)), - NodeInput::Import { import_index, .. } => Some(OutputConnector::Import(*import_index)), - _ => None, - }) - } - - /// In the network `X -> Y -> Z`, `is_node_upstream_of_another_by_primary_flow(Z, X)` returns true. - pub fn is_node_upstream_of_another_by_horizontal_flow(&self, node: NodeId, network_path: &[NodeId], potentially_upstream_node: NodeId) -> bool { - self.upstream_flow_back_from_nodes(vec![node], network_path, FlowType::HorizontalFlow) - .any(|id| id == potentially_upstream_node) - } - - pub fn from_old_network(old_network: OldNodeNetwork) -> Self { - let mut node_network = NodeNetwork::default(); - let mut network_metadata = NodeNetworkMetadata::default(); - let mut stack = vec![(Vec::new(), old_network)]; - while let Some((network_path, old_network)) = stack.pop() { - let Some(nested_network) = node_network.nested_network_mut(&network_path) else { - log::error!("Could not get nested network in from_old_network"); - continue; - }; - nested_network.exports = old_network.exports; - nested_network.scope_injections = old_network.scope_injections.into_iter().collect(); - let Some(nested_network_metadata) = network_metadata.nested_metadata_mut(&network_path) else { - log::error!("Could not get nested network in from_old_network"); - continue; - }; - nested_network_metadata.persistent_metadata.previewing = Previewing::No; - for (node_id, old_node) in old_network.nodes { - let mut node = DocumentNode::default(); - let mut node_metadata = DocumentNodeMetadata::default(); - - node.inputs = old_node.inputs; - node.call_argument = old_node.manual_composition.unwrap(); - node.visible = old_node.visible; - node.skip_deduplication = old_node.skip_deduplication; - node.original_location = old_node.original_location; - node_metadata.persistent_metadata.display_name = old_node.alias; - node_metadata.persistent_metadata.locked = old_node.locked; - node_metadata.persistent_metadata.node_type_metadata = if old_node.is_layer { - NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { - position: LayerPosition::Absolute(old_node.metadata.position), - owned_nodes: TransientMetadata::Unloaded, - }) - } else { - NodeTypePersistentMetadata::Node(NodePersistentMetadata { - position: NodePosition::Absolute(old_node.metadata.position), - }) - }; - - match old_node.implementation { - OldDocumentNodeImplementation::ProtoNode(protonode) => { - node.implementation = DocumentNodeImplementation::ProtoNode(protonode); - } - OldDocumentNodeImplementation::Network(old_network) => { - node.implementation = DocumentNodeImplementation::Network(NodeNetwork::default()); - node_metadata.persistent_metadata.network_metadata = Some(NodeNetworkMetadata::default()); - let mut nested_path = network_path.clone(); - nested_path.push(node_id); - stack.push((nested_path, old_network)); - } - OldDocumentNodeImplementation::Extract => { - node.implementation = DocumentNodeImplementation::Extract; - } - } - - nested_network.nodes.insert(node_id, node); - nested_network_metadata.persistent_metadata.node_metadata.insert(node_id, node_metadata); - } - } - Self { - network: MemoNetwork::new(node_network), - network_metadata, - document_metadata: DocumentMetadata::default(), - resolved_types: ResolvedDocumentNodeTypes::default(), - transaction_status: TransactionStatus::Finished, - } - } -} - -// Private mutable getters for use within the network interface -impl NodeNetworkInterface { - fn network_mut(&mut self, network_path: &[NodeId]) -> Option<&mut NodeNetwork> { - self.document_network_mut().nested_network_mut(network_path) - } - - fn network_metadata_mut(&mut self, network_path: &[NodeId]) -> Option<&mut NodeNetworkMetadata> { - self.network_metadata.nested_metadata_mut(network_path) - } - - fn node_metadata_mut(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&mut DocumentNodeMetadata> { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata"); - return None; - }; - let Some(node_metadata) = network_metadata.persistent_metadata.node_metadata.get_mut(node_id) else { - log::error!("Could not get nested node_metadata for node {node_id} in network {network_path:?}"); - return None; - }; - Some(node_metadata) - } - - /// Mutably get the network which the encapsulating node of the currently viewed network is part of. Will always be None in the document network. - fn encapsulating_network_metadata_mut(&mut self, network_path: &[NodeId]) -> Option<&mut NodeNetworkMetadata> { - let mut encapsulating_path = network_path.to_vec(); - encapsulating_path.pop()?; - let Some(parent_metadata) = self.network_metadata_mut(&encapsulating_path) else { - log::error!("Could not get parent network in encapsulating_node_metadata"); - return None; - }; - Some(parent_metadata) - } - - // /// Mutably get the node which encapsulates the currently viewed network. Will always be None in the document network. - // fn encapsulating_node_mut(&mut self, network_path: &[NodeId]) -> Option<&mut DocumentNode> { - // let mut encapsulating_path = network_path.to_vec(); - // let encapsulating_node_id = encapsulating_path.pop()?; - // let Some(parent_network) = self.network_mut(&encapsulating_path) else { - // log::error!("Could not get parent network in encapsulating_node_mut"); - // return None; - // }; - // let Some(encapsulating_node) = parent_network.nodes.mut(&encapsulating_node_id) else { - // log::error!("Could not get encapsulating node in encapsulating_node_mut"); - // return None; - // }; - // Some(encapsulating_node) - // } - - /// Get the node metadata for the node which encapsulates the currently viewed network. Will always be None in the document network. - fn encapsulating_node_metadata_mut(&mut self, network_path: &[NodeId]) -> Option<&mut DocumentNodeMetadata> { - let mut encapsulating_path = network_path.to_vec(); - let encapsulating_node_id = encapsulating_path.pop()?; - let Some(parent_metadata) = self.network_metadata_mut(&encapsulating_path) else { - log::error!("Could not get parent network in encapsulating_node_metadata"); - return None; - }; - let Some(encapsulating_node_metadata) = parent_metadata.persistent_metadata.node_metadata.get_mut(&encapsulating_node_id) else { - log::error!("Could not get encapsulating node metadata in encapsulating_node_metadata"); - return None; - }; - Some(encapsulating_node_metadata) - } -} - -// Public mutable getters for data that involves transient network metadata -// Mutable methods never recalculate the transient metadata, they only unload it. Loading metadata should only be done by the getter. -impl NodeNetworkInterface { - pub fn start_transaction(&mut self) { - self.transaction_status = TransactionStatus::Started; - } - - pub fn transaction_modified(&mut self) { - if self.transaction_status == TransactionStatus::Started { - self.transaction_status = TransactionStatus::Modified; - } - } - - pub fn finish_transaction(&mut self) { - self.transaction_status = TransactionStatus::Finished; - } - - /// Mutably get the selected nodes for the network at the network_path. Every time they are mutated, the transient metadata for the top of the stack gets unloaded. - pub fn selected_nodes_mut(&mut self, network_path: &[NodeId]) -> Option<&mut SelectedNodes> { - let (last_selection_state, prev_state, is_selection_empty) = { - let network_metadata = self.network_metadata(network_path)?; - let history = &network_metadata.persistent_metadata.selection_undo_history; - let current = history.back().cloned().unwrap_or_default(); - let previous = history.iter().rev().nth(1).cloned(); - let empty = current.selected_layers_except_artboards(self).next().is_none(); - (current, previous, empty) - }; - self.unload_stack_dependents(network_path); - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in selected_nodes"); - return None; - }; - - // Initialize default value if selection_undo_history is empty - if network_metadata.persistent_metadata.selection_undo_history.is_empty() { - network_metadata.persistent_metadata.selection_undo_history.push_back(SelectedNodes::default()); - } - - // Update history only if selection is non-empty/does not contain only artboards - if !is_selection_empty && prev_state.as_ref() != Some(&last_selection_state) { - network_metadata.persistent_metadata.selection_undo_history.push_back(last_selection_state); - network_metadata.persistent_metadata.selection_redo_history.clear(); - - if network_metadata.persistent_metadata.selection_undo_history.len() > crate::consts::MAX_UNDO_HISTORY_LEN { - network_metadata.persistent_metadata.selection_undo_history.pop_front(); - } - } - - network_metadata.persistent_metadata.selection_undo_history.back_mut() - } - - pub fn selection_step_back(&mut self, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in selection_step_back"); - return; - }; - - if let Some(selection_state) = network_metadata.persistent_metadata.selection_undo_history.pop_back() { - network_metadata.persistent_metadata.selection_redo_history.push_front(selection_state); - } - } - - pub fn selection_step_forward(&mut self, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in selection_step_forward"); - return; - }; - - if let Some(selection_state) = network_metadata.persistent_metadata.selection_redo_history.pop_front() { - network_metadata.persistent_metadata.selection_undo_history.push_back(selection_state); - } - } - - fn stack_dependents(&mut self, network_path: &[NodeId]) -> Option<&HashMap> { - self.try_load_stack_dependents(network_path); - self.try_get_stack_dependents(network_path) - } - - fn try_load_stack_dependents(&mut self, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in stack_dependents"); - return; - }; - - if !network_metadata.transient_metadata.stack_dependents.is_loaded() { - self.load_stack_dependents(network_path); - } - } - - fn try_get_stack_dependents(&self, network_path: &[NodeId]) -> Option<&HashMap> { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in try_get_stack_dependents"); - return None; - }; - let TransientMetadata::Loaded(stack_dependents) = &network_metadata.transient_metadata.stack_dependents else { - log::error!("could not load stack_dependents"); - return None; - }; - Some(stack_dependents) - } - - // This function always has to be in sync with the selected nodes. - fn load_stack_dependents(&mut self, network_path: &[NodeId]) { - let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { - log::error!("Could not get selected nodes in load_stack_dependents"); - return; - }; - - let mut selected_layers = selected_nodes.selected_nodes().filter(|node_id| self.is_layer(node_id, network_path)).cloned().collect::>(); - - // Deselect all layers that are upstream of other selected layers - let mut removed_layers = Vec::new(); - for layer in selected_layers.clone() { - if removed_layers.contains(&layer) { - continue; - } - for upstream_node in self.upstream_flow_back_from_nodes(vec![layer], network_path, FlowType::UpstreamFlow).skip(1) { - if selected_layers.remove(&upstream_node) { - removed_layers.push(upstream_node) - } - } - } - - // Get a unique list of the top of each stack for each layer - let mut stack_tops = HashSet::new(); - - for layer in &selected_layers { - let mut current_node = *layer; - loop { - if self.is_layer(¤t_node, network_path) && self.is_absolute(¤t_node, network_path) { - stack_tops.insert(current_node); - break; - }; - let Some(outward_wires) = self.outward_wires(network_path) else { - log::error!("Cannot load outward wires in load_stack_dependents"); - return; - }; - let Some(layer_outward_wires) = outward_wires.get(&OutputConnector::node(current_node, 0)) else { - log::error!("Could not get outward_wires for layer {current_node}"); - break; - }; - match layer_outward_wires.first() { - Some(downstream_input) => { - let Some(downstream_node) = downstream_input.node_id() else { - log::error!("Node connected to export should be absolute"); - break; - }; - current_node = downstream_node - } - None => break, - } - } - } - - let mut stack_dependents = HashMap::new(); - let mut owned_sole_dependents = HashSet::new(); - // Loop through all layers below the stack_tops, and set sole dependents upstream from that layer to be owned by that layer. Ensure LayerOwner is kept in sync. - for stack_top in &stack_tops { - for upstream_stack_layer in self - .upstream_flow_back_from_nodes(vec![*stack_top], network_path, FlowType::PrimaryFlow) - .take_while(|upstream_node| self.is_layer(upstream_node, network_path)) - .collect::>() - { - for upstream_layer in self.upstream_flow_back_from_nodes(vec![upstream_stack_layer], network_path, FlowType::UpstreamFlow).collect::>() { - if !self.is_layer(&upstream_layer, network_path) { - continue; - } - let mut new_owned_nodes = HashSet::new(); - for layer_sole_dependent in &self.upstream_nodes_below_layer(&upstream_layer, network_path) { - stack_dependents.insert(*layer_sole_dependent, LayerOwner::Layer(upstream_layer)); - owned_sole_dependents.insert(*layer_sole_dependent); - new_owned_nodes.insert(*layer_sole_dependent); - } - let Some(layer_node) = self.node_metadata_mut(&upstream_layer, network_path) else { - log::error!("Could not get layer node in load_stack_dependents"); - continue; - }; - let NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { owned_nodes, .. }) = &mut layer_node.persistent_metadata.node_type_metadata else { - log::error!("upstream layer should be a layer"); - return; - }; - *owned_nodes = TransientMetadata::Loaded(new_owned_nodes); - } - } - } - - // Set any sole dependents of the stack top that are not dependents of a layer in the stack to LayerOwner::None. These nodes will be pushed as blocks when a layer is shifted. - for stack_top in &stack_tops { - let mut sole_dependents = HashSet::new(); - let mut not_sole_dependents = HashSet::new(); - sole_dependents.insert(*stack_top); - for upstream_node in self.upstream_flow_back_from_nodes(vec![*stack_top], network_path, FlowType::UpstreamFlow).collect::>() { - let mut stack = vec![upstream_node]; - let mut is_sole_dependent = true; - while let Some(current_node) = stack.pop() { - if not_sole_dependents.contains(¤t_node) { - is_sole_dependent = false; - break; - } - if !sole_dependents.contains(¤t_node) { - let mut has_outward_wire = false; - for output_index in 0..self.number_of_outputs(¤t_node, network_path) { - let Some(outward_wires) = self.outward_wires(network_path) else { - log::error!("Cannot load outward wires in load_stack_dependents"); - continue; - }; - let Some(outward_wires) = outward_wires.get(&OutputConnector::node(current_node, output_index)) else { - log::error!("Cannot load outward wires in load_stack_dependents"); - continue; - }; - for downstream_input in outward_wires { - has_outward_wire = true; - match downstream_input { - InputConnector::Node { node_id, .. } => stack.push(*node_id), - InputConnector::Export(_) => is_sole_dependent = false, - } - } - } - if !has_outward_wire { - is_sole_dependent = false; - } - } - if !is_sole_dependent { - break; - } - } - - if is_sole_dependent { - sole_dependents.insert(upstream_node); - } else { - not_sole_dependents.insert(upstream_node); - } - } - - for sole_dependent in sole_dependents { - if !owned_sole_dependents.contains(&sole_dependent) { - stack_dependents.insert(sole_dependent, LayerOwner::None(0)); - } - } - } - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get current network in load_export_ports"); - return; - }; - - network_metadata.transient_metadata.stack_dependents = TransientMetadata::Loaded(stack_dependents); - } - - pub fn unload_stack_dependents(&mut self, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in unload_stack_dependents"); - return; - }; - network_metadata.transient_metadata.stack_dependents.unload(); - } - - /// Resets all the offsets for nodes with no LayerOwner when the drag ends - pub fn unload_stack_dependents_y_offset(&mut self, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in unload_stack_dependents_y_offset"); - return; - }; - - if let TransientMetadata::Loaded(stack_dependents) = &mut network_metadata.transient_metadata.stack_dependents { - for layer_owner in stack_dependents.values_mut() { - if let LayerOwner::None(offset) = layer_owner { - *offset = 0; - } - } - } - } - - pub fn import_export_ports(&mut self, network_path: &[NodeId]) -> Option<&Ports> { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in export_ports"); - return None; - }; - if !network_metadata.transient_metadata.import_export_ports.is_loaded() { - self.load_import_export_ports(network_path); - } - - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in export_ports"); - return None; - }; - let TransientMetadata::Loaded(ports) = &network_metadata.transient_metadata.import_export_ports else { - log::error!("could not load import ports"); - return None; - }; - Some(ports) - } - - pub fn load_import_export_ports(&mut self, network_path: &[NodeId]) { - let Some(import_export_position) = self.import_export_position(network_path) else { - log::error!("Could not get import_export_position"); - return; - }; - let Some(network) = self.nested_network(network_path) else { return }; - let mut import_export_ports = Ports::new(); - - if !network_path.is_empty() { - let import_start_index = if self.hidden_primary_import(network_path) { 1 } else { 0 }; - for import_index in import_start_index..self.number_of_imports(network_path) { - import_export_ports.insert_output_port_at_center(import_index, import_export_position.0.as_dvec2() + DVec2::new(0., import_index as f64 * 24.)); - } - } - - let export_start_index = if self.hidden_primary_export(network_path) { 1 } else { 0 }; - for export_index in export_start_index..network.exports.len() { - import_export_ports.insert_input_port_at_center(export_index, import_export_position.1.as_dvec2() + DVec2::new(0., export_index as f64 * 24.)); - } - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get current network in load_export_ports"); - return; - }; - - network_metadata.transient_metadata.import_export_ports = TransientMetadata::Loaded(import_export_ports); - } - - fn unload_import_export_ports(&mut self, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in unload_export_ports"); - return; - }; - network_metadata.transient_metadata.import_export_ports.unload(); - - // Always unload all wires connected to them as well - let number_of_imports = self.number_of_imports(network_path); - let Some(outward_wires) = self.outward_wires(network_path) else { - log::error!("Could not get outward wires in remove_import"); - return; - }; - let mut input_connectors = Vec::new(); - for import_index in 0..number_of_imports { - let Some(outward_wires_for_import) = outward_wires.get(&OutputConnector::Import(import_index)).cloned() else { - log::error!("Could not get outward wires for import in remove_import"); - return; - }; - input_connectors.extend(outward_wires_for_import); - } - let Some(network) = self.nested_network(network_path) else { - return; - }; - for export_index in 0..network.exports.len() { - input_connectors.push(InputConnector::Export(export_index)); - } - for input in &input_connectors { - self.unload_wire(input, network_path); - } - } - - pub fn modify_import_export(&mut self, network_path: &[NodeId]) -> Option<&ModifyImportExportClickTarget> { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in modify_import_export"); - return None; - }; - if !network_metadata.transient_metadata.modify_import_export.is_loaded() { - self.load_modify_import_export(network_path); - } - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in modify_import_export"); - return None; - }; - let TransientMetadata::Loaded(click_targets) = &network_metadata.transient_metadata.modify_import_export else { - log::error!("could not load modify import export ports"); - return None; - }; - Some(click_targets) - } - - pub fn load_modify_import_export(&mut self, network_path: &[NodeId]) { - let mut reorder_imports_exports = Ports::new(); - let mut remove_imports_exports = Ports::new(); - - if !network_path.is_empty() { - let Some(import_exports) = self.import_export_ports(network_path) else { - log::error!("Could not get import_export_ports in load_modify_import_export"); - return; - }; - - for (import_index, import_click_target) in import_exports.output_ports() { - let Some(import_bounding_box) = import_click_target.bounding_box() else { - log::error!("Could not get export bounding box in load_modify_import_export"); - continue; - }; - let reorder_import_center = (import_bounding_box[0] + import_bounding_box[1]) / 2. + DVec2::new(-12., 0.); - - if *import_index == 0 { - let remove_import_center = reorder_import_center + DVec2::new(-4., 0.); - let remove_import = ClickTarget::new_with_subpath(Subpath::new_rectangle(remove_import_center - DVec2::new(8., 8.), remove_import_center + DVec2::new(8., 8.)), 0.); - remove_imports_exports.insert_custom_output_port(*import_index, remove_import); - } else { - let remove_import_center = reorder_import_center + DVec2::new(-12., 0.); - let reorder_import = ClickTarget::new_with_subpath(Subpath::new_rectangle(reorder_import_center - DVec2::new(3., 4.), reorder_import_center + DVec2::new(3., 4.)), 0.); - let remove_import = ClickTarget::new_with_subpath(Subpath::new_rectangle(remove_import_center - DVec2::new(8., 8.), remove_import_center + DVec2::new(8., 8.)), 0.); - reorder_imports_exports.insert_custom_output_port(*import_index, reorder_import); - remove_imports_exports.insert_custom_output_port(*import_index, remove_import); - } - } - - for (export_index, export_click_target) in import_exports.input_ports() { - let Some(export_bounding_box) = export_click_target.bounding_box() else { - log::error!("Could not get export bounding box in load_modify_import_export"); - continue; - }; - let reorder_export_center = (export_bounding_box[0] + export_bounding_box[1]) / 2. + DVec2::new(12., 0.); - - if *export_index == 0 { - let remove_export_center = reorder_export_center + DVec2::new(4., 0.); - let remove_export = ClickTarget::new_with_subpath(Subpath::new_rectangle(remove_export_center - DVec2::new(8., 8.), remove_export_center + DVec2::new(8., 8.)), 0.); - remove_imports_exports.insert_custom_input_port(*export_index, remove_export); - } else { - let remove_export_center = reorder_export_center + DVec2::new(12., 0.); - let reorder_export = ClickTarget::new_with_subpath(Subpath::new_rectangle(reorder_export_center - DVec2::new(3., 4.), reorder_export_center + DVec2::new(3., 4.)), 0.); - let remove_export = ClickTarget::new_with_subpath(Subpath::new_rectangle(remove_export_center - DVec2::new(8., 8.), remove_export_center + DVec2::new(8., 8.)), 0.); - reorder_imports_exports.insert_custom_input_port(*export_index, reorder_export); - remove_imports_exports.insert_custom_input_port(*export_index, remove_export); - } - } - } - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get current network in load_modify_import_export"); - return; - }; - - network_metadata.transient_metadata.modify_import_export = TransientMetadata::Loaded(ModifyImportExportClickTarget { - remove_imports_exports, - reorder_imports_exports, - }); - } - - fn unload_modify_import_export(&mut self, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in unload_export_ports"); - return; - }; - network_metadata.transient_metadata.modify_import_export.unload(); - } - - fn owned_nodes(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&HashSet> { - let layer_node = self.node_metadata(node_id, network_path)?; - let NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { owned_nodes, .. }) = &layer_node.persistent_metadata.node_type_metadata else { - return None; - }; - let TransientMetadata::Loaded(owned_nodes) = owned_nodes else { - return None; - }; - Some(owned_nodes) - } - - pub fn all_nodes_bounding_box(&mut self, network_path: &[NodeId]) -> Option<&[DVec2; 2]> { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in all_nodes_bounding_box"); - return None; - }; - - if !network_metadata.transient_metadata.all_nodes_bounding_box.is_loaded() { - self.load_all_nodes_bounding_box(network_path); - } - - let network_metadata = self.network_metadata(network_path)?; - - let TransientMetadata::Loaded(bounding_box) = &network_metadata.transient_metadata.all_nodes_bounding_box else { - log::error!("could not load all nodes bounding box"); - return None; - }; - - Some(bounding_box) - } - - pub fn load_all_nodes_bounding_box(&mut self, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in load_all_nodes_bounding_box"); - return; - }; - let nodes = network_metadata.persistent_metadata.node_metadata.keys().copied().collect::>(); - - let all_nodes_bounding_box = nodes - .iter() - .filter_map(|node_id| { - self.node_click_targets(node_id, network_path) - .and_then(|transient_node_metadata| transient_node_metadata.node_click_target.bounding_box()) - }) - .reduce(Quad::combine_bounds) - .unwrap_or([DVec2::new(0., 0.), DVec2::new(0., 0.)]); - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { return }; - network_metadata.transient_metadata.all_nodes_bounding_box = TransientMetadata::Loaded(all_nodes_bounding_box); - } - - pub fn unload_all_nodes_bounding_box(&mut self, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in unload_all_nodes_bounding_box"); - return; - }; - network_metadata.transient_metadata.all_nodes_bounding_box.unload(); - self.unload_import_export_ports(network_path); - } - - pub fn outward_wires(&mut self, network_path: &[NodeId]) -> Option<&HashMap>> { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in outward_wires"); - return None; - }; - - if !network_metadata.transient_metadata.outward_wires.is_loaded() { - self.load_outward_wires(network_path); - } - - let network_metadata = self.network_metadata(network_path)?; - - let TransientMetadata::Loaded(outward_wires) = &network_metadata.transient_metadata.outward_wires else { - log::error!("could not load outward wires"); - return None; - }; - - Some(outward_wires) - } - - fn load_outward_wires(&mut self, network_path: &[NodeId]) { - let mut outward_wires = HashMap::new(); - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get nested network in load_outward_wires"); - return; - }; - // Initialize all output connectors for nodes - for (node_id, _) in network.nodes.iter() { - let number_of_outputs = self.number_of_outputs(node_id, network_path); - for output_index in 0..number_of_outputs { - outward_wires.insert(OutputConnector::node(*node_id, output_index), Vec::new()); - } - } - // Initialize output connectors for the import node - for import_index in 0..self.number_of_imports(network_path) { - outward_wires.insert(OutputConnector::Import(import_index), Vec::new()); - } - // Collect wires between all nodes and the Imports - for (current_node_id, node) in network.nodes.iter() { - for (input_index, input) in node.inputs.iter().enumerate() { - if let NodeInput::Node { node_id, output_index, .. } = input { - // If this errors then there is an input to a node that does not exist - let outward_wires_entry = outward_wires.get_mut(&OutputConnector::node(*node_id, *output_index)).unwrap_or_else(|| { - panic!( - "Output connector {:?} should be initialized for each node output from a node", - OutputConnector::node(*node_id, *output_index) - ) - }); - outward_wires_entry.push(InputConnector::node(*current_node_id, input_index)); - } else if let NodeInput::Import { import_index, .. } = input { - let outward_wires_entry = outward_wires - .get_mut(&OutputConnector::Import(*import_index)) - .unwrap_or_else(|| panic!("Output connector {:?} should be initialized for each import from a node", OutputConnector::Import(*import_index))); - outward_wires_entry.push(InputConnector::node(*current_node_id, input_index)); - } - } - } - for (export_index, export) in network.exports.iter().enumerate() { - if let NodeInput::Node { node_id, output_index, .. } = export { - let outward_wires_entry = outward_wires.get_mut(&OutputConnector::node(*node_id, *output_index)).unwrap_or_else(|| { - panic!( - "Output connector {:?} should be initialized for each node input from exports", - OutputConnector::node(*node_id, *output_index) - ) - }); - outward_wires_entry.push(InputConnector::Export(export_index)); - } else if let NodeInput::Import { import_index, .. } = export { - let outward_wires_entry = outward_wires - .get_mut(&OutputConnector::Import(*import_index)) - .unwrap_or_else(|| panic!("Output connector {:?} should be initialized between imports and exports", OutputConnector::Import(*import_index))); - outward_wires_entry.push(InputConnector::Export(export_index)); - } - } - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { return }; - - network_metadata.transient_metadata.outward_wires = TransientMetadata::Loaded(outward_wires); - } - - fn unload_outward_wires(&mut self, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in unload_outward_wires"); - return; - }; - network_metadata.transient_metadata.outward_wires.unload(); - } - - /// Incrementally updates the outward_wires cache when a single input connector changes, - /// avoiding a full rebuild. If the cache is not loaded, this is a no-op (it will be fully - /// rebuilt on the next read via `outward_wires()`). - fn update_outward_wires(&mut self, network_path: &[NodeId], input_connector: &InputConnector, old_input: &NodeInput, new_input: &NodeInput) { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - return; - }; - let TransientMetadata::Loaded(outward_wires) = &mut network_metadata.transient_metadata.outward_wires else { - return; - }; - - // Remove the input_connector from the old output's downstream list - if let Some(old_output) = OutputConnector::from_input(old_input) - && let Some(connections) = outward_wires.get_mut(&old_output) - { - connections.retain(|c| c != input_connector); - } - - // Add the input_connector to the new output's downstream list - if let Some(new_output) = OutputConnector::from_input(new_input) { - outward_wires.entry(new_output).or_default().push(*input_connector); - } - } - - pub fn layer_width(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Option { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get nested node_metadata in layer_width"); - return None; - }; - if !node_metadata.persistent_metadata.is_layer() { - log::error!("Cannot get layer width for non layer node {node_id} in network {network_path:?}"); - return None; - } - - let layer_width_loaded = if let NodeTypeTransientMetadata::Layer(layer_metadata) = &node_metadata.transient_metadata.node_type_metadata { - layer_metadata.layer_width.is_loaded() - } else { - false - }; - if !layer_width_loaded { - self.load_layer_width(node_id, network_path); - } - - let node_metadata = self.node_metadata(node_id, network_path)?; - let NodeTypeTransientMetadata::Layer(layer_metadata) = &node_metadata.transient_metadata.node_type_metadata else { - log::error!("Transient metadata should be layer metadata when getting layer width"); - return None; - }; - let TransientMetadata::Loaded(layer_width) = layer_metadata.layer_width else { - log::error!("Transient metadata was not loaded when getting layer width"); - return None; - }; - - Some(layer_width) - } - - pub fn load_layer_width(&mut self, node_id: &NodeId, network_path: &[NodeId]) { - const GAP_WIDTH: f64 = 8.; - const FONT_SIZE: f64 = 14.; - let left_thumbnail_padding = GRID_SIZE as f64 / 2.; - let thumbnail_width = 3. * GRID_SIZE as f64; - let layer_text = self.display_name(node_id, network_path); - - let text_width = text_width(&layer_text, FONT_SIZE); - - let grip_padding = 4.; - let grip_width = 8.; - let lock_icon_width = if self.is_locked(node_id, network_path) { GRID_SIZE as f64 } else { 0. }; - let icon_overhang_width = GRID_SIZE as f64 / 2.; - - let layer_width_pixels = left_thumbnail_padding + thumbnail_width + GAP_WIDTH + text_width + grip_padding + grip_width + lock_icon_width + icon_overhang_width; - let layer_width = ((layer_width_pixels / 24.).ceil() as u32).max(8); - - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get nested node_metadata in load_layer_width"); - return; - }; - - // Ensure layer width is not loaded for a non layer node - if node_metadata.persistent_metadata.is_layer() { - if let NodeTypeTransientMetadata::Layer(layer_metadata) = &mut node_metadata.transient_metadata.node_type_metadata { - layer_metadata.layer_width = TransientMetadata::Loaded(layer_width); - } else { - // Set the entire transient node type metadata to be a layer, in case it was previously a node - node_metadata.transient_metadata.node_type_metadata = NodeTypeTransientMetadata::Layer(LayerTransientMetadata { - layer_width: TransientMetadata::Loaded(layer_width), - }); - } - } else { - log::warn!("Tried loading layer width for non layer node"); - } - } - - /// Unloads layer width if the node is a layer - pub fn try_unload_layer_width(&mut self, node_id: &NodeId, network_path: &[NodeId]) { - let is_layer = self.is_layer(node_id, network_path); - - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - return; - }; - - // If the node is a layer, then the width and click targets need to be recalculated - if is_layer && let NodeTypeTransientMetadata::Layer(layer_metadata) = &mut node_metadata.transient_metadata.node_type_metadata { - layer_metadata.layer_width.unload(); - } - } - - pub fn get_input_center(&mut self, input: &InputConnector, network_path: &[NodeId]) -> Option { - let (ports, index) = match input { - InputConnector::Node { node_id, input_index } => { - let node_click_target = self.node_click_targets(node_id, network_path)?; - (&node_click_target.port_click_targets, input_index) - } - InputConnector::Export(export_index) => { - let ports = self.import_export_ports(network_path)?; - (ports, export_index) - } - }; - ports - .input_ports - .iter() - .find_map(|(input_index, click_target)| if index == input_index { click_target.bounding_box_center() } else { None }) - } - - pub fn get_output_center(&mut self, output: &OutputConnector, network_path: &[NodeId]) -> Option { - let (ports, index) = match output { - OutputConnector::Node { node_id, output_index } => { - let node_click_target = self.node_click_targets(node_id, network_path)?; - (&node_click_target.port_click_targets, output_index) - } - OutputConnector::Import(import_index) => { - let ports = self.import_export_ports(network_path)?; - (ports, import_index) - } - }; - ports - .output_ports - .iter() - .find_map(|(input_index, click_target)| if index == input_index { click_target.bounding_box_center() } else { None }) - } - - pub fn newly_loaded_input_wire(&mut self, input: &InputConnector, graph_wire_style: GraphWireStyle, network_path: &[NodeId]) -> Option { - if !self.wire_is_loaded(input, network_path) { - self.load_wire(input, graph_wire_style, network_path); - } else { - return None; - } - - let wire = match input { - InputConnector::Node { node_id, input_index } => { - let input_metadata = self.transient_input_metadata(node_id, *input_index, network_path)?; - let TransientMetadata::Loaded(wire) = &input_metadata.wire else { - log::error!("Could not load wire for input: {input:?}"); - return None; - }; - wire.clone() - } - InputConnector::Export(export_index) => { - let network_metadata = self.network_metadata(network_path)?; - let Some(TransientMetadata::Loaded(wire)) = network_metadata.transient_metadata.wires.get(*export_index) else { - log::error!("Could not load wire for input: {input:?}"); - return None; - }; - wire.clone() - } - }; - Some(wire) - } - - pub fn wire_is_loaded(&mut self, input: &InputConnector, network_path: &[NodeId]) -> bool { - match input { - InputConnector::Node { node_id, input_index } => { - let Some(input_metadata) = self.transient_input_metadata(node_id, *input_index, network_path) else { - log::error!("Input metadata should always exist for input"); - return false; - }; - input_metadata.wire.is_loaded() - } - InputConnector::Export(export_index) => { - let Some(network_metadata) = self.network_metadata(network_path) else { - return false; - }; - match network_metadata.transient_metadata.wires.get(*export_index) { - Some(wire) => wire.is_loaded(), - None => false, - } - } - } - } - - fn load_wire(&mut self, input: &InputConnector, graph_wire_style: GraphWireStyle, network_path: &[NodeId]) { - let dashed = match self.previewing(network_path) { - Previewing::Yes { .. } => match input { - InputConnector::Node { .. } => false, - InputConnector::Export(export_index) => *export_index == 0, - }, - Previewing::No => false, - }; - let Some(wire) = self.wire_path_from_input(input, graph_wire_style, dashed, network_path) else { - log::error!("Could not load wire path from input"); - return; - }; - match input { - InputConnector::Node { node_id, input_index } => { - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { return }; - let Some(input_metadata) = node_metadata.persistent_metadata.input_metadata.get_mut(*input_index) else { - // log::warn!("Node metadata must exist on node: {input:?}"); - return; - }; - let wire_update = WirePathUpdate { - id: *node_id, - input_index: *input_index, - wire_path_update: Some(wire), - }; - input_metadata.transient_metadata.wire = TransientMetadata::Loaded(wire_update); - } - InputConnector::Export(export_index) => { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { return }; - if *export_index >= network_metadata.transient_metadata.wires.len() { - network_metadata.transient_metadata.wires.resize(export_index + 1, TransientMetadata::Unloaded); - } - let Some(input_metadata) = network_metadata.transient_metadata.wires.get_mut(*export_index) else { - return; - }; - let wire_update = WirePathUpdate { - id: NodeId(u64::MAX), - input_index: *export_index, - wire_path_update: Some(wire), - }; - *input_metadata = TransientMetadata::Loaded(wire_update); - } - } - } - - pub fn all_input_connectors(&self, network_path: &[NodeId]) -> Vec { - let mut input_connectors = Vec::new(); - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get nested network in all_input_connectors"); - return Vec::new(); - }; - for export_index in 0..network.exports.len() { - input_connectors.push(InputConnector::Export(export_index)); - } - for (node_id, node) in &network.nodes { - for input_index in 0..node.inputs.len() { - input_connectors.push(InputConnector::node(*node_id, input_index)); - } - } - input_connectors - } - - pub fn node_graph_input_connectors(&self, network_path: &[NodeId]) -> Vec { - self.all_input_connectors(network_path) - .into_iter() - .filter(|input| self.input_from_connector(input, network_path).is_some_and(|input| input.is_exposed())) - .collect() - } - - /// Maps to the frontend representation of a wire start. Includes disconnected value wire inputs. - pub fn node_graph_wire_inputs(&self, network_path: &[NodeId]) -> Vec<(NodeId, usize)> { - self.node_graph_input_connectors(network_path) - .iter() - .map(|input| match input { - InputConnector::Node { node_id, input_index } => (*node_id, *input_index), - InputConnector::Export(export_index) => (NodeId(u64::MAX), *export_index), - }) - .chain(std::iter::once((NodeId(u64::MAX), u32::MAX as usize))) - .collect() - } - - fn unload_wires_for_node(&mut self, node_id: &NodeId, network_path: &[NodeId]) { - let number_of_outputs = self.number_of_outputs(node_id, network_path); - let Some(outward_wires) = self.outward_wires(network_path) else { - log::error!("Could not get outward wires in reorder_export"); - return; - }; - let mut input_connectors = Vec::new(); - for output_index in 0..number_of_outputs { - let Some(inputs) = outward_wires.get(&OutputConnector::node(*node_id, output_index)) else { - continue; - }; - input_connectors.extend(inputs.clone()) - } - for input_index in 0..self.number_of_inputs(node_id, network_path) { - input_connectors.push(InputConnector::node(*node_id, input_index)); - } - for input in input_connectors { - self.unload_wire(&input, network_path); - } - } - - pub fn unload_wire(&mut self, input: &InputConnector, network_path: &[NodeId]) { - match input { - InputConnector::Node { node_id, input_index } => { - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - return; - }; - let Some(input_metadata) = node_metadata.persistent_metadata.input_metadata.get_mut(*input_index) else { - // log::warn!("Node metadata must exist on node: {input:?}"); - return; - }; - input_metadata.transient_metadata.wire = TransientMetadata::Unloaded; - } - InputConnector::Export(export_index) => { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - return; - }; - if *export_index >= network_metadata.transient_metadata.wires.len() { - network_metadata.transient_metadata.wires.resize(export_index + 1, TransientMetadata::Unloaded); - } - let Some(input_metadata) = network_metadata.transient_metadata.wires.get_mut(*export_index) else { - return; - }; - *input_metadata = TransientMetadata::Unloaded; - } - } - } - - /// When previewing, there may be a second path to the root node. - pub fn wire_to_root(&mut self, graph_wire_style: GraphWireStyle, network_path: &[NodeId]) -> Option { - let input = InputConnector::Export(0); - let current_export = self.upstream_output_connector(&input, network_path)?; - - let root_node = match self.previewing(network_path) { - Previewing::Yes { root_node_to_restore } => root_node_to_restore, - Previewing::No => None, - }?; - - if Some(root_node.node_id) == current_export.node_id() { - return None; - } - let Some(input_position) = self.get_input_center(&input, network_path) else { - log::error!("Could not get input position for wire end in root node: {input:?}"); - return None; - }; - let upstream_output = OutputConnector::node(root_node.node_id, root_node.output_index); - let Some(output_position) = self.get_output_center(&upstream_output, network_path) else { - log::error!("Could not get output position for wire start in root node: {upstream_output:?}"); - return None; - }; - let vertical_end = input.node_id().is_some_and(|node_id| self.is_layer(&node_id, network_path) && input.input_index() == 0); - let vertical_start: bool = upstream_output.node_id().is_some_and(|node_id| self.is_layer(&node_id, network_path)); - let thick = vertical_end && vertical_start; - let vector_wire = build_vector_wire(output_position, input_position, vertical_start, vertical_end, graph_wire_style); - - let path_string = vector_wire.to_svg(); - let data_type = self.input_type(&input, network_path).displayed_type(); - let wire_path_update = Some(WirePath { - path_string, - data_type, - thick, - dashed: false, - }); - - Some(WirePathUpdate { - id: NodeId(u64::MAX), - input_index: u32::MAX as usize, - wire_path_update, - }) - } - - /// Returns the vector subpath and a boolean of whether the wire should be thick. - pub fn vector_wire_from_input(&mut self, input: &InputConnector, wire_style: GraphWireStyle, network_path: &[NodeId]) -> Option<(BezPath, bool)> { - let Some(input_position) = self.get_input_center(input, network_path) else { - log::error!("Could not get dom rect for wire end: {input:?}"); - return None; - }; - // An upstream output could not be found, so the wire does not exist, but it should still be loaded as as empty vector - let Some(upstream_output) = self.upstream_output_connector(input, network_path) else { - return Some((BezPath::new(), false)); - }; - let Some(output_position) = self.get_output_center(&upstream_output, network_path) else { - log::error!("Could not get output port for wire start: {:?}", upstream_output); - return None; - }; - let vertical_end = input.node_id().is_some_and(|node_id| self.is_layer(&node_id, network_path) && input.input_index() == 0); - let vertical_start = upstream_output.node_id().is_some_and(|node_id| self.is_layer(&node_id, network_path)); - let thick = vertical_end && vertical_start; - Some((build_vector_wire(output_position, input_position, vertical_start, vertical_end, wire_style), thick)) - } - - pub fn wire_path_from_input(&mut self, input: &InputConnector, graph_wire_style: GraphWireStyle, dashed: bool, network_path: &[NodeId]) -> Option { - let (vector_wire, thick) = self.vector_wire_from_input(input, graph_wire_style, network_path)?; - let path_string = vector_wire.to_svg(); - let data_type = self - .upstream_output_connector(input, network_path) - .map(|output| self.output_type(&output, network_path).displayed_type()) - .unwrap_or(FrontendGraphDataType::General); - Some(WirePath { - path_string, - data_type, - thick, - dashed, - }) - } - - pub fn node_click_targets(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&DocumentNodeClickTargets> { - self.try_load_node_click_targets(node_id, network_path); - self.try_get_node_click_targets(node_id, network_path) - } - - fn try_load_node_click_targets(&mut self, node_id: &NodeId, network_path: &[NodeId]) { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get nested node_metadata in node_click_targets"); - return; - }; - if !node_metadata.transient_metadata.click_targets.is_loaded() { - self.load_node_click_targets(node_id, network_path) - }; - } - - fn try_get_node_click_targets(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&DocumentNodeClickTargets> { - let node_metadata = self.node_metadata(node_id, network_path)?; - let TransientMetadata::Loaded(click_target) = &node_metadata.transient_metadata.click_targets else { - log::error!("Could not load node type metadata when getting click targets"); - return None; - }; - Some(click_target) - } - - pub fn load_node_click_targets(&mut self, node_id: &NodeId, network_path: &[NodeId]) { - let Some(node_position) = self.position_from_downstream_node(node_id, network_path) else { - log::error!("Could not get node position in load_node_click_targets for node {node_id}"); - return; - }; - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get nested node_metadata in load_node_click_targets"); - return; - }; - let Some(document_node) = self.document_node(node_id, network_path) else { - log::error!("Could not get document node in load_node_click_targets"); - return; - }; - - let node_top_left = node_position.as_dvec2() * GRID_SIZE as f64; - let mut port_click_targets = Ports::new(); - let document_node_click_targets = if !node_metadata.persistent_metadata.is_layer() { - // Create input/output click targets - let mut input_row_count = 0; - for (input_index, input) in document_node.inputs.iter().enumerate() { - if input.is_exposed() { - port_click_targets.insert_node_input(input_index, input_row_count, node_top_left); - } - // Primary input row is always displayed, even if the input is not exposed - if input_index == 0 || input.is_exposed() { - input_row_count += 1; - } - } - - let number_of_outputs = match &document_node.implementation { - DocumentNodeImplementation::Network(network) => network.exports.len(), - _ => 1, - }; - // If the node has a hidden primary output, do not display the first output - let start_index = if self.hidden_primary_output(node_id, network_path) { 1 } else { 0 }; - for output_index in start_index..number_of_outputs { - port_click_targets.insert_node_output(output_index, node_top_left); - } - - let height = input_row_count.max(number_of_outputs).max(1) as u32 * GRID_SIZE; - let width = 5 * GRID_SIZE; - // Offset down by half a grid so the click target sits below the top connector strip. - let node_click_target_top_left = node_top_left + DVec2::new(0., HALF_GRID_SIZE as f64); - let node_click_target_bottom_right = node_click_target_top_left + DVec2::new(width as f64, height as f64); - - let radius = 3.; - let subpath = Subpath::new_rounded_rectangle(node_click_target_top_left, node_click_target_bottom_right, [radius; 4]); - let node_click_target = ClickTarget::new_with_subpath(subpath, 0.); - - DocumentNodeClickTargets { - node_click_target, - port_click_targets, - node_type_metadata: NodeTypeClickTargets::Node, - } - } else { - // Layer inputs - port_click_targets.insert_layer_input(0, node_top_left); - if document_node.inputs.iter().filter(|input| input.is_exposed()).count() > 1 { - port_click_targets.insert_layer_input(1, node_top_left); - } - port_click_targets.insert_layer_output(node_top_left); - - let layer_width_cells = self.layer_width(node_id, network_path).unwrap_or_else(|| { - log::error!("Could not get layer width in load_node_click_targets"); - 0 - }); - let width = layer_width_cells * GRID_SIZE; - let height = 2 * GRID_SIZE; - let locked = self.is_locked(node_id, network_path); - - // The layer is `2 * GRID_SIZE` tall, so its vertical center sits one grid unit below `node_top_left.y`. - // Visibility/lock buttons fill a 1-grid-cell square (so half-extents of HALF_GRID_SIZE each side of center). - const LAYER_VERTICAL_CENTER: f64 = GRID_SIZE as f64; - const ICON_HALF_EXTENT: f64 = HALF_GRID_SIZE as f64; - - // Update visibility button click target - let visibility_offset = node_top_left + DVec2::new(width as f64, LAYER_VERTICAL_CENTER); - let subpath = Subpath::new_rounded_rectangle( - DVec2::new(-ICON_HALF_EXTENT, -ICON_HALF_EXTENT) + visibility_offset, - DVec2::new(ICON_HALF_EXTENT, ICON_HALF_EXTENT) + visibility_offset, - [3.; 4], - ); - let visibility_click_target = ClickTarget::new_with_subpath(subpath, 0.); - - // Update lock button click target, positioned one grid unit to the left of the visibility button (only when locked) - let lock_click_target = if locked { - let lock_offset = node_top_left + DVec2::new(width as f64 - GRID_SIZE as f64, LAYER_VERTICAL_CENTER); - let subpath = Subpath::new_rounded_rectangle( - DVec2::new(-ICON_HALF_EXTENT, -ICON_HALF_EXTENT) + lock_offset, - DVec2::new(ICON_HALF_EXTENT, ICON_HALF_EXTENT) + lock_offset, - [3.; 4], - ); - Some(ClickTarget::new_with_subpath(subpath, 0.)) - } else { - None - }; - - // Update grip button click target, which is positioned to the left of the leftmost icon. - // The grip is 8px wide but spans the full layer-vertical-center band. - const GRIP_WIDTH: f64 = 8.; - let icons_width = if locked { GRID_SIZE as f64 } else { 0. }; - let grip_offset_right_edge = node_top_left + DVec2::new(width as f64 - ICON_HALF_EXTENT - icons_width, LAYER_VERTICAL_CENTER); - let subpath = Subpath::new_rounded_rectangle( - DVec2::new(-GRIP_WIDTH, -ICON_HALF_EXTENT) + grip_offset_right_edge, - DVec2::new(0., ICON_HALF_EXTENT) + grip_offset_right_edge, - [0.; 4], - ); - let grip_click_target = ClickTarget::new_with_subpath(subpath, 0.); - - // Update display-name text click target, used to detect double-click rename. Sized to the text bounds - // (not the surrounding `.details` area) so the rest of the layer still drills into the subgraph on double-click. - - /// `.layer` margin-left (= 12), for chain layers the negative margin-left and positive padding-left cancel out, keeping content at this same offset - const LAYER_LEFT_MARGIN: f64 = HALF_GRID_SIZE as f64; - /// `.thumbnail` (70px) + its 1px side margins (= 72) - const THUMBNAIL_BLOCK_WIDTH: f64 = 3. * GRID_SIZE as f64; - /// `.details` margin-left - const DETAILS_LEFT_MARGIN: f64 = 8.; - const NAME_LEFT_OFFSET: f64 = LAYER_LEFT_MARGIN + THUMBNAIL_BLOCK_WIDTH + DETAILS_LEFT_MARGIN; - /// Distance from layer's right edge to visibility's left edge (= 12) - const VISIBILITY_INSET_FROM_LAYER_RIGHT: f64 = HALF_GRID_SIZE as f64; - const FONT_SIZE: f64 = 14.; - - let display_name = self.display_name(node_id, network_path); - let name_click_target = if display_name.is_empty() { - None - } else { - let name_left = node_top_left.x + NAME_LEFT_OFFSET; - let icons_reserve = VISIBILITY_INSET_FROM_LAYER_RIGHT + icons_width + GRIP_WIDTH; - let name_right_max = node_top_left.x + width as f64 - icons_reserve; - let text_w = crate::messages::portfolio::document::overlays::utility_functions::text_width(&display_name, FONT_SIZE); - let name_right = (name_left + text_w).min(name_right_max); - if name_right > name_left { - // The 1-grid-tall name strip is centered vertically in the 2-grid-tall layer. - let name_top = node_top_left.y + HALF_GRID_SIZE as f64; - let name_bottom = node_top_left.y + GRID_SIZE as f64 + HALF_GRID_SIZE as f64; - let subpath = Subpath::new_rounded_rectangle(DVec2::new(name_left, name_top), DVec2::new(name_right, name_bottom), [3.; 4]); - Some(ClickTarget::new_with_subpath(subpath, 0.)) - } else { - None - } - }; - - // Create layer click target, which is contains the layer and the chain background - let chain_width_grid_spaces = self.chain_width(node_id, network_path); - - let node_bottom_right = node_top_left + DVec2::new(width as f64, height as f64); - let chain_top_left = node_top_left - DVec2::new((chain_width_grid_spaces * GRID_SIZE) as f64, 0.); - const CORNER_RADIUS: f64 = 10.; - let subpath = Subpath::new_rounded_rectangle(chain_top_left, node_bottom_right, [CORNER_RADIUS; 4]); - let node_click_target = ClickTarget::new_with_subpath(subpath, 0.); - - DocumentNodeClickTargets { - node_click_target, - port_click_targets, - node_type_metadata: NodeTypeClickTargets::Layer(LayerClickTargets { - visibility_click_target, - lock_click_target, - grip_click_target, - name_click_target, - }), - } - }; - - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get nested node_metadata in load_node_click_targets"); - return; - }; - node_metadata.transient_metadata.click_targets = TransientMetadata::Loaded(document_node_click_targets); - } - - pub fn node_bounding_box(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Option<[DVec2; 2]> { - self.node_click_targets(node_id, network_path) - .and_then(|transient_node_metadata| transient_node_metadata.node_click_target.bounding_box()) - } - - pub fn try_get_node_bounding_box(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<[DVec2; 2]> { - self.try_get_node_click_targets(node_id, network_path) - .and_then(|transient_node_metadata| transient_node_metadata.node_click_target.bounding_box()) - } - - pub fn try_load_all_node_click_targets(&mut self, network_path: &[NodeId]) { - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get network in load_all_node_click_targets"); - return; - }; - for node_id in network.nodes.keys().cloned().collect::>() { - self.try_load_node_click_targets(&node_id, network_path); - } - } - - /// Get the top left position in node graph coordinates for a node by recursively iterating downstream through cached positions, which means the iteration can be broken once a known position is reached. - pub fn position_from_downstream_node(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Option { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get nested node_metadata in position_from_downstream_node"); - return None; - }; - match &node_metadata.persistent_metadata.node_type_metadata { - NodeTypePersistentMetadata::Layer(layer_metadata) => { - match layer_metadata.position { - LayerPosition::Absolute(position) => Some(position), - LayerPosition::Stack(y_offset) => { - let Some(downstream_node_connectors) = self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(*node_id, 0))) - .cloned() - else { - log::error!("Could not get downstream node in position_from_downstream_node"); - return None; - }; - let downstream_connector = downstream_node_connectors - .iter() - .find_map(|input_connector| input_connector.node_id().map(|node_id| (node_id, input_connector.input_index()))); - - let Some((downstream_node_id, _)) = downstream_connector else { - log::error!("Could not get downstream node input connector for node {node_id}"); - return None; - }; - // Get the height of the node to ensure nodes do not overlap - let Some(downstream_node_height) = self.height_from_click_target(&downstream_node_id, network_path) else { - log::error!("Could not get click target height in position_from_downstream_node"); - return None; - }; - self.position(&downstream_node_id, network_path) - .map(|position| position + IVec2::new(0, 1 + downstream_node_height as i32 + y_offset as i32)) - } - } - } - NodeTypePersistentMetadata::Node(node_metadata) => { - match node_metadata.position { - NodePosition::Absolute(position) => Some(position), - NodePosition::Chain => { - // Iterate through primary flow to find the first Layer - let mut current_node_id = *node_id; - let mut node_distance_from_layer = 1; - loop { - // TODO: Use root node to restore if previewing - let Some(downstream_node_connectors) = self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(current_node_id, 0))) - .cloned() - else { - log::error!("Could not get downstream node for node {node_id} with Position::Chain"); - return None; - }; - let Some(downstream_node_id) = downstream_node_connectors.iter().find_map(|input_connector| { - if let InputConnector::Node { node_id, input_index } = input_connector { - let downstream_input_index = if self.is_layer(node_id, network_path) { 1 } else { 0 }; - if *input_index == downstream_input_index { Some(node_id) } else { None } - } else { - None - } - }) else { - log::error!("Could not get downstream node input connector with input index 1 for node with Position::Chain"); - return None; - }; - let Some(downstream_node_metadata) = self.network_metadata(network_path)?.persistent_metadata.node_metadata.get(downstream_node_id) else { - log::error!("Downstream node metadata not found in node_metadata for node with Position::Chain"); - return None; - }; - if downstream_node_metadata.persistent_metadata.is_layer() { - // Get the position of the layer - let layer_position = self.position(downstream_node_id, network_path)?; - return Some(layer_position + IVec2::new(-node_distance_from_layer * NODE_CHAIN_WIDTH, 0)); - } - node_distance_from_layer += 1; - current_node_id = *downstream_node_id; - } - } - } - } - } - } - - pub fn unload_node_click_targets(&mut self, node_id: &NodeId, network_path: &[NodeId]) { - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get nested node_metadata in unload_node_click_target"); - return; - }; - node_metadata.transient_metadata.click_targets.unload(); - self.unload_wires_for_node(node_id, network_path); - } - - pub fn unload_upstream_node_click_targets(&mut self, node_ids: Vec, network_path: &[NodeId]) { - let upstream_nodes = self.upstream_flow_back_from_nodes(node_ids, network_path, FlowType::UpstreamFlow).collect::>(); - - for upstream_id in &upstream_nodes { - self.unload_node_click_targets(upstream_id, network_path); - } - } - - pub fn unload_all_nodes_click_targets(&mut self, network_path: &[NodeId]) { - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get nested network in unload_all_nodes_click_targets"); - return; - }; - let upstream_nodes = network.nodes.keys().cloned().collect::>(); - - for upstream_id in &upstream_nodes { - self.unload_node_click_targets(upstream_id, network_path); - } - } -} - -// Helper functions for mutable getters -impl NodeNetworkInterface { - pub fn upstream_chain_nodes(&self, network_path: &[NodeId]) -> Vec { - let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { - log::error!("Could not get selected nodes in upstream_chain_nodes"); - return Vec::new(); - }; - let mut all_selected_nodes = selected_nodes.selected_nodes().cloned().collect::>(); - for selected_node_id in selected_nodes.selected_nodes() { - if self.is_layer(selected_node_id, network_path) { - let unique_upstream_chain = self - .upstream_flow_back_from_nodes(vec![*selected_node_id], network_path, FlowType::HorizontalFlow) - .skip(1) - .take_while(|node_id| self.is_chain(node_id, network_path)) - .filter(|upstream_node| all_selected_nodes.iter().all(|new_selected_node| new_selected_node != upstream_node)) - .collect::>(); - all_selected_nodes.extend(unique_upstream_chain); - } - } - all_selected_nodes - } - - pub fn collect_frontend_click_targets(&mut self, network_path: &[NodeId]) -> FrontendClickTargets { - let mut all_node_click_targets = Vec::new(); - let mut connector_click_targets = Vec::new(); - let mut icon_click_targets = Vec::new(); - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in collect_frontend_click_targets"); - return FrontendClickTargets::default(); - }; - let nodes = network_metadata.persistent_metadata.node_metadata.keys().copied().collect::>(); - if let Some(import_export_click_targets) = self.import_export_ports(network_path).cloned() { - for port in import_export_click_targets.click_targets() { - if let ClickTargetType::Subpath(subpath) = port.target_type() { - connector_click_targets.push(subpath.to_bezpath().to_svg()); - } - } - } - nodes.into_iter().for_each(|node_id| { - if let Some(node_click_targets) = self.node_click_targets(&node_id, network_path) { - let mut node_path = String::new(); - - if let ClickTargetType::Subpath(subpath) = node_click_targets.node_click_target.target_type() { - node_path.push_str(subpath.to_bezpath().to_svg().as_str()) - } - all_node_click_targets.push((node_id, node_path)); - for port in node_click_targets.port_click_targets.click_targets() { - if let ClickTargetType::Subpath(subpath) = port.target_type() { - connector_click_targets.push(subpath.to_bezpath().to_svg()); - } - } - if let NodeTypeClickTargets::Layer(layer_metadata) = &node_click_targets.node_type_metadata { - // Visibility button (eye icon) - if let ClickTargetType::Subpath(subpath) = layer_metadata.visibility_click_target.target_type() { - icon_click_targets.push(subpath.to_bezpath().to_svg()); - } - // Lock button (padlock icon), only when the layer is locked - if let Some(lock_click_target) = &layer_metadata.lock_click_target - && let ClickTargetType::Subpath(subpath) = lock_click_target.target_type() - { - icon_click_targets.push(subpath.to_bezpath().to_svg()); - } - // Drag grip (dotted symbol) - if let ClickTargetType::Subpath(subpath) = layer_metadata.grip_click_target.target_type() { - icon_click_targets.push(subpath.to_bezpath().to_svg()); - } - } - } - }); - let mut layer_click_targets = Vec::new(); - let mut node_click_targets = Vec::new(); - all_node_click_targets.into_iter().for_each(|(node_id, path)| { - if self.is_layer(&node_id, network_path) { - layer_click_targets.push(path); - } else { - node_click_targets.push(path); - } - }); - - let bounds = self.all_nodes_bounding_box(network_path).cloned().unwrap_or([DVec2::ZERO, DVec2::ZERO]); - let rect = Subpath::::new_rectangle(bounds[0], bounds[1]); - let all_nodes_bounding_box = rect.to_bezpath().to_svg(); - - let mut modify_import_export = Vec::new(); - if let Some(modify_import_export_click_targets) = self.modify_import_export(network_path) { - for click_target in modify_import_export_click_targets - .remove_imports_exports - .click_targets() - .chain(modify_import_export_click_targets.reorder_imports_exports.click_targets()) - { - if let ClickTargetType::Subpath(subpath) = click_target.target_type() { - modify_import_export.push(subpath.to_bezpath().to_svg()); - } - } - } - FrontendClickTargets { - node_click_targets, - layer_click_targets, - connector_click_targets, - icon_click_targets, - all_nodes_bounding_box, - modify_import_export, - } - } - - pub fn set_document_to_viewport_transform(&mut self, transform: DAffine2) { - self.document_metadata.document_to_viewport = transform; - } - - pub fn is_eligible_to_be_layer(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - let Some(node) = self.document_node(node_id, network_path) else { - log::error!("Could not get node {node_id} in is_eligible_to_be_layer"); - return false; - }; - let input_count = node.inputs.iter().take(2).filter(|input| input.is_exposed()).count(); - let parameters_hidden = node.inputs.iter().skip(2).all(|input| !input.is_exposed()); - let output_count = self.number_of_outputs(node_id, network_path); - - !self.hidden_primary_output(node_id, network_path) && output_count == 1 && (input_count <= 2) && parameters_hidden - } - - pub fn node_graph_ptz(&self, network_path: &[NodeId]) -> Option<&PTZ> { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in node_graph_ptz_mut"); - return None; - }; - Some(&network_metadata.persistent_metadata.navigation_metadata.node_graph_ptz) - } - - pub fn node_graph_ptz_mut(&mut self, network_path: &[NodeId]) -> Option<&mut PTZ> { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in node_graph_ptz_mut"); - return None; - }; - Some(&mut network_metadata.persistent_metadata.navigation_metadata.node_graph_ptz) - } - - // TODO: Optimize getting click target intersections from click by using a spacial data structure like a quadtree instead of linear search - /// Click target getter methods - pub fn node_from_click(&mut self, click: DVec2, network_path: &[NodeId]) -> Option { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in node_from_click"); - return None; - }; - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get nested network in node_from_click"); - return None; - }; - - let point = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.inverse().transform_point2(click); - let nodes = network.nodes.keys().copied().collect::>(); - let clicked_nodes = nodes - .iter() - .filter(|node_id| { - self.node_click_targets(node_id, network_path) - .is_some_and(|transient_node_metadata| transient_node_metadata.node_click_target.intersect_point_no_stroke(point)) - }) - .cloned() - .collect::>(); - // Since nodes are placed on top of layer chains, find the first non layer node that was clicked, and if there way no non layer nodes clicked, then find the first layer node that was clicked - clicked_nodes - .iter() - .find_map(|node_id| { - let Some(node_metadata) = self.network_metadata(network_path)?.persistent_metadata.node_metadata.get(node_id) else { - log::error!("Could not get node_metadata for node {node_id}"); - return None; - }; - if !node_metadata.persistent_metadata.is_layer() { Some(*node_id) } else { None } - }) - .or_else(|| clicked_nodes.into_iter().next()) - } - - pub fn layer_click_target_from_click(&mut self, click: DVec2, click_target_type: LayerClickTargetTypes, network_path: &[NodeId]) -> Option { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in visibility_from_click"); - return None; - }; - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get nested network in visibility_from_click"); - return None; - }; - - let point = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.inverse().transform_point2(click); - let node_ids: Vec<_> = network.nodes.keys().copied().collect(); - - node_ids - .iter() - .filter_map(|node_id| { - self.node_click_targets(node_id, network_path).and_then(|transient_node_metadata| { - if let NodeTypeClickTargets::Layer(layer) = &transient_node_metadata.node_type_metadata { - match click_target_type { - LayerClickTargetTypes::Visibility => layer.visibility_click_target.intersect_point_no_stroke(point).then_some(*node_id), - LayerClickTargetTypes::Lock => layer.lock_click_target.as_ref().and_then(|target| target.intersect_point_no_stroke(point).then_some(*node_id)), - LayerClickTargetTypes::Grip => layer.grip_click_target.intersect_point_no_stroke(point).then_some(*node_id), - LayerClickTargetTypes::Name => layer.name_click_target.as_ref().and_then(|target| target.intersect_point_no_stroke(point).then_some(*node_id)), - } - } else { - None - } - }) - }) - .next() - } - - pub fn input_connector_from_click(&mut self, click: DVec2, network_path: &[NodeId]) -> Option { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in input_connector_from_click"); - return None; - }; - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get nested network in input_connector_from_click"); - return None; - }; - - let point = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.inverse().transform_point2(click); - network - .nodes - .keys() - .copied() - .collect::>() - .iter() - .filter_map(|node_id| { - self.node_click_targets(node_id, network_path).and_then(|transient_node_metadata| { - transient_node_metadata - .port_click_targets - .clicked_input_port_from_point(point) - .map(|port| InputConnector::node(*node_id, port)) - }) - }) - .next() - .or_else(|| { - self.import_export_ports(network_path) - .and_then(|import_export_ports| import_export_ports.clicked_input_port_from_point(point).map(InputConnector::Export)) - }) - } - - pub fn output_connector_from_click(&mut self, click: DVec2, network_path: &[NodeId]) -> Option { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in output_connector_from_click"); - return None; - }; - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get nested network in output_connector_from_click"); - return None; - }; - - let point = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.inverse().transform_point2(click); - let nodes = network.nodes.keys().copied().collect::>(); - nodes - .iter() - .filter_map(|node_id| { - self.node_click_targets(node_id, network_path).and_then(|transient_node_metadata| { - transient_node_metadata - .port_click_targets - .clicked_output_port_from_point(point) - .map(|output_index| OutputConnector::node(*node_id, output_index)) - }) - }) - .next() - .or_else(|| { - self.import_export_ports(network_path) - .and_then(|import_export_ports| import_export_ports.clicked_output_port_from_point(point).map(OutputConnector::Import)) - }) - } - - pub fn input_position(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) -> Option { - match input_connector { - InputConnector::Node { node_id, input_index } => self - .node_click_targets(node_id, network_path) - .and_then(|transient_node_metadata| transient_node_metadata.port_click_targets.input_port_position(*input_index)), - InputConnector::Export(export_index) => self - .import_export_ports(network_path) - .and_then(|import_export_ports| import_export_ports.input_port_position(*export_index)), - } - } - - pub fn output_position(&mut self, output_connector: &OutputConnector, network_path: &[NodeId]) -> Option { - match output_connector { - OutputConnector::Node { node_id, output_index } => self - .node_click_targets(node_id, network_path) - .and_then(|transient_node_metadata| transient_node_metadata.port_click_targets.output_port_position(*output_index)), - OutputConnector::Import(import_index) => self - .import_export_ports(network_path) - .and_then(|import_export_ports| import_export_ports.output_port_position(*import_index)), - } - } - - /// Get the combined bounding box of the click targets of the selected nodes in the node graph in viewport space - pub fn selected_nodes_bounding_box_viewport(&mut self, network_path: &[NodeId]) -> Option<[DVec2; 2]> { - // Always get the bounding box for nodes in the currently viewed network - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in selected_nodes_bounding_box_viewport"); - return None; - }; - let node_graph_to_viewport = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport; - self.selected_nodes_bounding_box(network_path) - .map(|[a, b]| [node_graph_to_viewport.transform_point2(a), node_graph_to_viewport.transform_point2(b)]) - } - - pub fn selected_layers_artwork_bounding_box_viewport(&self) -> Option<[DVec2; 2]> { - self.selected_nodes() - .0 - .iter() - .filter(|node| self.is_layer(node, &[])) - .filter_map(|layer| self.document_metadata.bounding_box_viewport(LayerNodeIdentifier::new(*layer, self))) - .reduce(Quad::combine_bounds) - } - - pub fn selected_unlocked_layers_bounding_box_viewport(&self) -> Option<[DVec2; 2]> { - self.selected_nodes() - .0 - .iter() - .filter(|node| self.is_layer(node, &[]) && !self.is_locked(node, &[])) - .filter_map(|layer| self.document_metadata.bounding_box_viewport(LayerNodeIdentifier::new(*layer, self))) - .reduce(Quad::combine_bounds) - } - - /// Get the combined bounding box of the click targets of the selected nodes in the node graph in layer space - pub fn selected_nodes_bounding_box(&mut self, network_path: &[NodeId]) -> Option<[DVec2; 2]> { - let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { - log::error!("Could not get selected nodes in selected_nodes_bounding_box_viewport"); - return None; - }; - selected_nodes - .selected_nodes() - .cloned() - .collect::>() - .iter() - .filter_map(|node_id| { - self.node_click_targets(node_id, network_path) - .and_then(|transient_node_metadata| transient_node_metadata.node_click_target.bounding_box()) - }) - .reduce(graphene_std::renderer::Quad::combine_bounds) - } - - /// Gets the bounding box in viewport coordinates for each node in the node graph - pub fn graph_bounds_viewport_space(&mut self, network_path: &[NodeId]) -> Option<[DVec2; 2]> { - let bounds = *self.all_nodes_bounding_box(network_path)?; - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in graph_bounds_viewport_space"); - return None; - }; - - let bounding_box_subpath = Subpath::::new_rectangle(bounds[0], bounds[1]); - bounding_box_subpath.bounding_box_with_transform(network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport) - } - - pub fn collect_layer_widths(&mut self, network_path: &[NodeId]) -> (HashMap, HashMap, HashMap) { - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in collect_layer_widths"); - return (HashMap::new(), HashMap::new(), HashMap::new()); - }; - let nodes = network_metadata - .persistent_metadata - .node_metadata - .keys() - .filter_map(|node_id| if self.is_layer(node_id, network_path) { Some(*node_id) } else { None }) - .collect::>(); - let layer_widths = nodes - .iter() - .filter_map(|node_id| self.layer_width(node_id, network_path).map(|layer_width| (*node_id, layer_width))) - .collect::>(); - let chain_widths = nodes.iter().map(|node_id| (*node_id, self.chain_width(node_id, network_path))).collect::>(); - let has_left_input_wire = nodes - .iter() - .map(|node_id| { - ( - *node_id, - !self - .upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalFlow) - .skip(1) - .all(|node_id| self.is_chain(&node_id, network_path)), - ) - }) - .collect::>(); - - (layer_widths, chain_widths, has_left_input_wire) - } - - pub fn compute_modified_vector(&self, layer: LayerNodeIdentifier) -> Option { - let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, self); - - if let Some(path_node) = graph_layer.upstream_visible_node_id_from_name_in_layer(&DefinitionIdentifier::Network("Path".into())) - && let Some(vector) = self.document_metadata.vector_modify.get(&path_node) - { - let mut modified = vector.clone(); - - let path_node = self.document_network().nodes.get(&path_node); - let modification_input = path_node.and_then(|node: &DocumentNode| node.inputs.get(1)).and_then(|input| input.as_value()); - if let Some(TaggedValue::VectorModification(modification)) = modification_input { - modification.apply(&mut modified); - } - return Some(modified); - } - - self.document_metadata.layer_vector_data.get(&layer).map(|arc| arc.as_ref().clone()) - } - - /// The vector geometry an upstream Path node would surface for editing. - /// This is the result of `compute_modified_vector`, but only if a visible 'Path' node is actually upstream. - /// Useful for tool overlays and snap target collection usages that want to match the Path tool's view - /// (e.g. the pre-solidified centerline for a Solidify Stroke layer) and otherwise do nothing. - pub fn upstream_path_node_vector(&self, layer: LayerNodeIdentifier) -> Option { - let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, self); - graph_layer.upstream_visible_node_id_from_name_in_layer(&DefinitionIdentifier::Network("Path".into()))?; - self.compute_modified_vector(layer) - } - - /// Outline targets for the Select tool's hover/selection overlay, mirroring the Path tool's view. - /// Returns `Some` when an upstream Path node exists so the outline matches what the Path tool edits - /// (e.g. the pre-solidified centerline for a Solidify Stroke layer); returns `None` otherwise so the - /// caller can fall back to the layer's recorded `outlines`/`click_targets`. - pub fn path_aware_outline_targets(&self, layer: LayerNodeIdentifier) -> Option> { - let vector = self.upstream_path_node_vector(layer)?; - - let mut targets = Vec::new(); - let subpaths: Vec> = vector.stroke_bezier_paths().collect(); - if !subpaths.is_empty() { - targets.push(ClickTargetType::CompoundPath(subpaths)); - } - - for &point_id in vector.point_domain.ids() { - if !vector.any_connected(point_id) { - let position = vector.point_domain.position_from_id(point_id).unwrap_or_default(); - targets.push(ClickTargetType::FreePoint(FreePoint::new(point_id, position))); - } - } - - Some(targets) - } - - /// Loads the structure of layer nodes from a node graph. - pub fn load_structure(&mut self) { - self.document_metadata.structure = HashMap::from_iter([(LayerNodeIdentifier::ROOT_PARENT, NodeRelations::default())]); - - // Only load structure if there is a root node - let Some(root_node) = self.root_node(&[]) else { return }; - - let Some(first_root_layer) = self - .upstream_flow_back_from_nodes(vec![root_node.node_id], &[], FlowType::PrimaryFlow) - .find_map(|node_id| if self.is_layer(&node_id, &[]) { Some(LayerNodeIdentifier::new(node_id, self)) } else { None }) - else { - return; - }; - // Should refer to output node - let mut awaiting_horizontal_flow = vec![(first_root_layer.to_node(), first_root_layer)]; - let mut awaiting_primary_flow = vec![]; - - while let Some((horizontal_root_node_id, mut parent_layer_node)) = awaiting_horizontal_flow.pop() { - let horizontal_flow_iter = self.upstream_flow_back_from_nodes(vec![horizontal_root_node_id], &[], FlowType::HorizontalFlow); - let mut children = Vec::new(); - - // Special handling for the root layer, since it should not be skipped - if horizontal_root_node_id == first_root_layer.to_node() { - for current_node_id in horizontal_flow_iter { - if self.is_layer(¤t_node_id, &[]) { - let current_layer_node = LayerNodeIdentifier::new(current_node_id, self); - if !self.document_metadata.structure.contains_key(¤t_layer_node) { - if current_node_id == first_root_layer.to_node() { - awaiting_primary_flow.push((current_node_id, LayerNodeIdentifier::ROOT_PARENT)); - children.push((LayerNodeIdentifier::ROOT_PARENT, current_layer_node)); - } else { - awaiting_primary_flow.push((current_node_id, parent_layer_node)); - children.push((parent_layer_node, current_layer_node)); - } - parent_layer_node = current_layer_node; - } - } - } - } else { - // Skip the horizontal_root_node_id node - for current_node_id in horizontal_flow_iter.skip(1) { - if self.is_layer(¤t_node_id, &[]) { - let current_layer_node = LayerNodeIdentifier::new(current_node_id, self); - if !self.document_metadata.structure.contains_key(¤t_layer_node) { - awaiting_primary_flow.push((current_node_id, parent_layer_node)); - children.push((parent_layer_node, current_layer_node)); - parent_layer_node = current_layer_node; - } - } - } - } - - for (parent, child) in children { - parent.push_child(&mut self.document_metadata, child); - } - - while let Some((primary_root_node_id, parent_layer_node)) = awaiting_primary_flow.pop() { - let primary_flow_iter = self.upstream_flow_back_from_nodes(vec![primary_root_node_id], &[], FlowType::PrimaryFlow); - // Skip the primary_root_node_id node - let mut children = Vec::new(); - for current_node_id in primary_flow_iter.skip(1) { - if self.is_layer(¤t_node_id, &[]) { - // Create a new layer for the top of each stack, and add it as a child to the previous parent - let current_layer_node = LayerNodeIdentifier::new(current_node_id, self); - if !self.document_metadata.structure.contains_key(¤t_layer_node) { - children.push(current_layer_node); - - // The layer nodes for the horizontal flow is itself - awaiting_horizontal_flow.push((current_node_id, current_layer_node)); - } - } - } - for child in children { - parent_layer_node.push_child(&mut self.document_metadata, child); - } - } - } - - let nodes: HashSet = self.document_network().nodes.keys().cloned().collect::>(); - - self.document_metadata.upstream_footprints.retain(|node, _| nodes.contains(node)); - self.document_metadata.local_transforms.retain(|node, _| nodes.contains(node)); - self.document_metadata.vector_modify.retain(|node, _| nodes.contains(node)); - self.document_metadata.click_targets.retain(|layer, _| self.document_metadata.structure.contains_key(layer)); - self.document_metadata.outlines.retain(|layer, _| self.document_metadata.structure.contains_key(layer)); - self.document_metadata.text_frames.retain(|layer, _| self.document_metadata.structure.contains_key(layer)); - } - - /// Update the cached transforms of the layers - pub fn update_transforms(&mut self, upstream_footprints: HashMap, local_transforms: HashMap) { - self.document_metadata.upstream_footprints = upstream_footprints; - self.document_metadata.local_transforms = local_transforms; - } - - /// Update the cached first item's source id of the layers - pub fn update_first_element_source_id(&mut self, new: HashMap>) { - self.document_metadata.first_element_source_ids = new; - } - - /// Update the cached click targets of the layers - pub fn update_click_targets(&mut self, new_click_targets: HashMap>>) { - self.document_metadata.click_targets = new_click_targets; - } - - /// Update the cached source-geometry outline targets of the layers - pub fn update_outlines(&mut self, new_outlines: HashMap>>) { - self.document_metadata.outlines = new_outlines; - } - - /// Update the cached per-layer 'Text' node text frames in row-local space (as `DAffine2` - /// mapping the unit square onto the frame). - pub fn update_text_frames(&mut self, new_text_frames: HashMap) { - self.document_metadata.text_frames = new_text_frames; - } - - /// Update the cached clip targets of the layers - pub fn update_clip_targets(&mut self, new_clip_targets: HashSet) { - self.document_metadata.clip_targets = new_clip_targets; - } - - /// Update the vector modify of the layers - pub fn update_vector_modify(&mut self, new_vector_modify: HashMap) { - self.document_metadata.vector_modify = new_vector_modify; - } - - /// Update the layer vector data (for layers without Path nodes) - pub fn update_vector_data(&mut self, new_layer_vector_data: HashMap>) { - self.document_metadata.layer_vector_data = new_layer_vector_data; - } - - /// Update the per-layer `ATTR_FILL` snapshot. - pub fn update_fill_attributes(&mut self, new_layer_fill_attributes: HashMap>>>) { - self.document_metadata.layer_fill_attributes = new_layer_fill_attributes; - } - - /// Update the per-layer `ATTR_STROKE` snapshot. - pub fn update_stroke_attributes(&mut self, new_layer_stroke_attributes: HashMap>>>) { - self.document_metadata.layer_stroke_attributes = new_layer_stroke_attributes; - } -} - -// Public mutable methods -impl NodeNetworkInterface { - /// Walk every network at every nesting level, invoking `visit` with each network's path and a mutable - /// reference to its metadata. Only nodes that contain a nested network are recursed into. - fn for_each_network_metadata_mut(&mut self, mut visit: impl FnMut(&[NodeId], &mut NodeNetworkMetadata)) { - let mut stack = vec![vec![]]; - while let Some(path) = stack.pop() { - let Some(self_network_metadata) = self.network_metadata_mut(&path) else { - continue; - }; - - visit(&path, self_network_metadata); - - // Only nodes that contain a nested network have metadata to recurse into, so skip leaf nodes. - stack.extend( - self_network_metadata - .persistent_metadata - .node_metadata - .iter() - .filter(|(_, node_metadata)| node_metadata.persistent_metadata.network_metadata.is_some()) - .map(|(node_id, _)| { - let mut current_path: Vec = path.clone(); - current_path.push(*node_id); - current_path - }), - ); - } - } - - pub fn copy_all_navigation_metadata(&mut self, other_interface: &NodeNetworkInterface) { - self.for_each_network_metadata_mut(|path, self_network_metadata| { - if let Some(other_network_metadata) = other_interface.network_metadata(path) { - self_network_metadata.persistent_metadata.navigation_metadata = other_network_metadata.persistent_metadata.navigation_metadata.clone(); - } - }); - } - - /// Copy all transient view and selection state from `other_interface` onto `self` at every nesting level: - /// navigation metadata (pan/zoom), selection undo/redo history, and the document-to-viewport camera. Lets - /// an interface rebuilt from storage keep the user's current view rather than reset it. `resolved_types` - /// is a separate runtime cache the caller handles. - pub fn copy_all_transient_view_state(&mut self, other_interface: &NodeNetworkInterface) { - self.for_each_network_metadata_mut(|path, self_network_metadata| { - if let Some(other_network_metadata) = other_interface.network_metadata(path) { - let self_persistent = &mut self_network_metadata.persistent_metadata; - let other_persistent = &other_network_metadata.persistent_metadata; - self_persistent.navigation_metadata = other_persistent.navigation_metadata.clone(); - - // The live preview root may name a node that the rebuilt-from-storage network no longer contains - // (e.g. after a storage undo), so only carry it over when the root still exists; otherwise drop it. - self_persistent.previewing = match other_persistent.previewing { - Previewing::Yes { - root_node_to_restore: Some(root_node), - } if !self_persistent.node_metadata.contains_key(&root_node.node_id) => Previewing::No, - previewing => previewing, - }; - - self_persistent.selection_undo_history = other_persistent.selection_undo_history.clone(); - self_persistent.selection_redo_history = other_persistent.selection_redo_history.clone(); - } - }); - - self.document_metadata.document_to_viewport = other_interface.document_metadata.document_to_viewport; - } - - pub fn set_transform(&mut self, transform: DAffine2, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network in set_transform"); - return; - }; - network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport = transform; - self.unload_import_export_ports(network_path); - self.unload_modify_import_export(network_path); - } - - // This should be run whenever the pan ends, a zoom occurs, or the network is opened - pub fn set_node_graph_width(&mut self, node_graph_width: f64, network_path: &[NodeId]) { - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network in set_transform"); - return; - }; - network_metadata.persistent_metadata.navigation_metadata.node_graph_width = node_graph_width; - self.unload_import_export_ports(network_path); - self.unload_modify_import_export(network_path); - } - - pub fn vector_modify(&mut self, node_id: &NodeId, modification_type: VectorModificationType) { - let Some(node) = self.network_mut(&[]).unwrap().nodes.get_mut(node_id) else { - log::error!("Could not get node in vector_modification"); - return; - }; - { - let mut value = node.inputs.get_mut(1).and_then(|input| input.as_value_mut()); - let Some(TaggedValue::VectorModification(modification)) = value.as_deref_mut() else { - panic!("Path node does not have modification input"); - }; - - modification.modify(&modification_type); - } - self.transaction_modified(); - } - - /// Inserts a new export at insert index. If the insert index is -1 it is inserted at the end. The output_name is used by the encapsulating node. - pub fn add_export(&mut self, default_value: TaggedValue, insert_index: isize, output_name: &str, network_path: &[NodeId]) { - let Some(network) = self.network_mut(network_path) else { - log::error!("Could not get nested network in add_export"); - return; - }; - - let input = NodeInput::value(default_value, true); - if insert_index == -1 { - network.exports.push(input); - } else { - network.exports.insert(insert_index as usize, input); - } - - self.transaction_modified(); - - let mut encapsulating_path = network_path.to_vec(); - // Set the parent node (if it exists) to be a non layer if it is no longer eligible to be a layer - if let Some(parent_id) = encapsulating_path.pop() - && !self.is_eligible_to_be_layer(&parent_id, &encapsulating_path) - && self.is_layer(&parent_id, &encapsulating_path) - { - self.set_to_node_or_layer(&parent_id, &encapsulating_path, false); - }; - - // There will not be an encapsulating node if the network is the document network - if let Some(encapsulating_node_metadata) = self.encapsulating_node_metadata_mut(network_path) { - if insert_index == -1 { - encapsulating_node_metadata.persistent_metadata.output_names.push(output_name.to_string()); - } else { - encapsulating_node_metadata.persistent_metadata.output_names.insert(insert_index as usize, output_name.to_string()); - } - // Clear the reference to the nodes definition - if let Some(network_metadata) = encapsulating_node_metadata.persistent_metadata.network_metadata.as_mut() { - network_metadata.persistent_metadata.reference = None - } - }; - - // Update the export ports and outward wires for the current network - self.unload_import_export_ports(network_path); - self.unload_modify_import_export(network_path); - self.unload_outward_wires(network_path); - - // Update the outward wires and bounding box for all nodes in the encapsulating network - if let Some(encapsulating_network_metadata) = self.encapsulating_network_metadata_mut(network_path) { - encapsulating_network_metadata.transient_metadata.outward_wires.unload(); - encapsulating_network_metadata.transient_metadata.all_nodes_bounding_box.unload(); - } - - // Update the click targets for the encapsulating node, if it exists. There is no encapsulating node if the network is the document network - let mut path = network_path.to_vec(); - if let Some(encapsulating_node) = path.pop() { - self.unload_node_click_targets(&encapsulating_node, &path); - } - - // If the export is inserted as the first input or second input, and the parent network is the document_network, then it may have affected the document metadata structure - if network_path.len() == 1 && (insert_index == 0 || insert_index == 1) { - self.load_structure(); - } - } - - /// Inserts a new input at insert index. If the insert index is -1 it is inserted at the end. The output_name is used by the encapsulating node. - pub fn add_import(&mut self, default_value: TaggedValue, exposed: bool, insert_index: isize, input_name: &str, input_description: &str, network_path: &[NodeId]) { - let mut encapsulating_network_path = network_path.to_vec(); - let Some(node_id) = encapsulating_network_path.pop() else { - log::error!("Cannot add import for document network"); - return; - }; - - let Some(network) = self.network_mut(&encapsulating_network_path) else { - log::error!("Could not get nested network in insert_input"); - return; - }; - let Some(node) = network.nodes.get_mut(&node_id) else { - log::error!("Could not get node in insert_input"); - return; - }; - - let input = NodeInput::value(default_value, exposed); - if insert_index == -1 { - node.inputs.push(input); - } else { - node.inputs.insert(insert_index as usize, input); - } - - self.transaction_modified(); - - // Set the node to be a non layer if it is no longer eligible to be a layer - if !self.is_eligible_to_be_layer(&node_id, &encapsulating_network_path) && self.is_layer(&node_id, &encapsulating_network_path) { - self.set_to_node_or_layer(&node_id, &encapsulating_network_path, false); - } - - let Some(node_metadata) = self.node_metadata_mut(&node_id, &encapsulating_network_path) else { - log::error!("Could not get node_metadata in insert_input"); - return; - }; - let new_input = (input_name, input_description).into(); - if insert_index == -1 { - node_metadata.persistent_metadata.input_metadata.push(new_input); - } else { - node_metadata.persistent_metadata.input_metadata.insert(insert_index as usize, new_input); - } - - // Clear the reference to the nodes definition - if let Some(network_metadata) = node_metadata.persistent_metadata.network_metadata.as_mut() { - network_metadata.persistent_metadata.reference = None - } - - // Update the metadata for the encapsulating node - self.unload_node_click_targets(&node_id, &encapsulating_network_path); - self.unload_all_nodes_bounding_box(&encapsulating_network_path); - if encapsulating_network_path.is_empty() && (insert_index == 0 || insert_index == 1) { - self.load_structure(); - } - - // Unload the metadata for the nested network - self.unload_outward_wires(network_path); - self.unload_import_export_ports(network_path); - self.unload_modify_import_export(network_path); - } - - // First disconnects the export, then removes it - pub fn remove_export(&mut self, export_index: usize, network_path: &[NodeId]) { - let mut encapsulating_network_path = network_path.to_vec(); - let Some(parent_id) = encapsulating_network_path.pop() else { - log::error!("Cannot remove export for document network"); - return; - }; - - // Disconnect the removed export, and handle connections to the node which had its output removed - self.disconnect_input(&InputConnector::Export(export_index), network_path); - let number_of_outputs = self.number_of_outputs(&parent_id, &encapsulating_network_path); - for shifted_export in export_index..number_of_outputs { - let Some(encapsulating_outward_wires) = self.outward_wires(&encapsulating_network_path) else { - log::error!("Could not get outward wires in remove_export"); - return; - }; - let Some(downstream_connections_for_shifted_export) = encapsulating_outward_wires.get(&OutputConnector::node(parent_id, shifted_export)).cloned() else { - log::error!("Could not get downstream connections for shifted export in remove_export"); - return; - }; - for downstream_connection in downstream_connections_for_shifted_export { - self.disconnect_input(&downstream_connection, &encapsulating_network_path); - if shifted_export != export_index { - self.create_wire(&OutputConnector::node(parent_id, shifted_export - 1), &downstream_connection, &encapsulating_network_path); - } - } - } - - let Some(network) = self.network_mut(network_path) else { - log::error!("Could not get nested network in add_export"); - return; - }; - network.exports.remove(export_index); - - self.transaction_modified(); - - let Some(encapsulating_node_metadata) = self.node_metadata_mut(&parent_id, &encapsulating_network_path) else { - log::error!("Could not get encapsulating node metadata in remove_export"); - return; - }; - encapsulating_node_metadata.persistent_metadata.output_names.remove(export_index); - if let Some(network_metadata) = encapsulating_node_metadata.persistent_metadata.network_metadata.as_mut() { - network_metadata.persistent_metadata.reference = None; - } - - // Update the metadata for the encapsulating node - self.unload_outward_wires(&encapsulating_network_path); - self.unload_node_click_targets(&parent_id, &encapsulating_network_path); - self.unload_all_nodes_bounding_box(&encapsulating_network_path); - if !self.is_eligible_to_be_layer(&parent_id, &encapsulating_network_path) && self.is_layer(&parent_id, &encapsulating_network_path) { - self.set_to_node_or_layer(&parent_id, &encapsulating_network_path, false); - } - if encapsulating_network_path.is_empty() { - self.load_structure(); - } - - // Unload the metadata for the nested network - self.unload_outward_wires(network_path); - self.unload_import_export_ports(network_path); - self.unload_modify_import_export(network_path); - } - - // First disconnects the import, then removes it - pub fn remove_import(&mut self, import_index: usize, network_path: &[NodeId]) { - let Some((parent_id, encapsulating_network_path)) = network_path.split_last() else { - log::error!("Cannot remove export for document network"); - return; - }; - - let number_of_inputs = self.number_of_inputs(parent_id, encapsulating_network_path); - let Some(outward_wires) = self.outward_wires(network_path) else { - log::error!("Could not get outward wires in remove_import"); - return; - }; - let Some(outward_wires_for_import) = outward_wires.get(&OutputConnector::Import(import_index)).cloned() else { - log::error!("Could not get outward wires for import in remove_import"); - return; - }; - let mut new_import_mapping = Vec::new(); - for i in (import_index + 1)..number_of_inputs { - let Some(outward_wires_for_import) = outward_wires.get(&OutputConnector::Import(i)).cloned() else { - log::error!("Could not get outward wires for import in remove_import"); - return; - }; - for upstream_input_wire in outward_wires_for_import { - new_import_mapping.push((OutputConnector::Import(i - 1), upstream_input_wire)); - } - } - - // Disconnect all upstream connections - for outward_wire in outward_wires_for_import { - self.disconnect_input(&outward_wire, network_path); - } - // Shift inputs connected to to imports at a higher index down one - for (output_connector, input_wire) in new_import_mapping { - self.create_wire(&output_connector, &input_wire, network_path); - } - - let Some(network) = self.network_mut(encapsulating_network_path) else { - log::error!("Could not get parent node in remove_import"); - return; - }; - let Some(node) = network.nodes.get_mut(parent_id) else { - log::error!("Could not get node in remove_import"); - return; - }; - - node.inputs.remove(import_index); - - self.transaction_modified(); - - // There will not be an encapsulating node if the network is the document network - let Some(encapsulating_node_metadata) = self.node_metadata_mut(parent_id, encapsulating_network_path) else { - log::error!("Could not get encapsulating node metadata in remove_export"); - return; - }; - encapsulating_node_metadata.persistent_metadata.input_metadata.remove(import_index); - if let Some(network_metadata) = encapsulating_node_metadata.persistent_metadata.network_metadata.as_mut() { - network_metadata.persistent_metadata.reference = None; - } - - // Update the metadata for the encapsulating node - self.unload_outward_wires(encapsulating_network_path); - self.unload_node_click_targets(parent_id, encapsulating_network_path); - self.unload_all_nodes_bounding_box(encapsulating_network_path); - if !self.is_eligible_to_be_layer(parent_id, encapsulating_network_path) && self.is_layer(parent_id, encapsulating_network_path) { - self.set_to_node_or_layer(parent_id, encapsulating_network_path, false); - } - if encapsulating_network_path.is_empty() { - self.load_structure(); - } - - // Unload the metadata for the nested network - self.unload_outward_wires(network_path); - self.unload_import_export_ports(network_path); - self.unload_modify_import_export(network_path); - } - - /// The end index is before the export is removed, so moving to the end is the length of the current exports - pub fn reorder_export(&mut self, start_index: usize, mut end_index: usize, network_path: &[NodeId]) { - let mut encapsulating_network_path = network_path.to_vec(); - let Some(parent_id) = encapsulating_network_path.pop() else { - log::error!("Could not reorder export for document network"); - return; - }; - - let Some(network) = self.network_mut(network_path) else { - log::error!("Could not get nested network in reorder_export"); - return; - }; - if end_index > start_index { - end_index -= 1; - } - let export = network.exports.remove(start_index); - network.exports.insert(end_index, export); - - self.transaction_modified(); - - let Some(encapsulating_node_metadata) = self.node_metadata_mut(&parent_id, &encapsulating_network_path) else { - log::error!("Could not get encapsulating network_metadata in reorder_export"); - return; - }; - - let name = encapsulating_node_metadata.persistent_metadata.output_names.remove(start_index); - encapsulating_node_metadata.persistent_metadata.output_names.insert(end_index, name); - if let Some(network_metadata) = encapsulating_node_metadata.persistent_metadata.network_metadata.as_mut() { - network_metadata.persistent_metadata.reference = None; - } - - // Update the metadata for the encapsulating network - self.unload_outward_wires(&encapsulating_network_path); - self.unload_stack_dependents(&encapsulating_network_path); - - // Node input at the start index is now at the end index - let Some(move_to_end_index) = self - .outward_wires(&encapsulating_network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(parent_id, start_index))) - .cloned() - else { - log::error!("Could not get outward wires in reorder_export"); - return; - }; - // Node inputs above the start index should be shifted down one - let last_output_index = self.number_of_outputs(&parent_id, &encapsulating_network_path) - 1; - for shift_output_down in (start_index + 1)..=last_output_index { - let Some(outward_wires) = self - .outward_wires(&encapsulating_network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(parent_id, shift_output_down))) - .cloned() - else { - log::error!("Could not get outward wires in reorder_export"); - return; - }; - for downstream_connection in &outward_wires { - self.disconnect_input(downstream_connection, &encapsulating_network_path); - self.create_wire(&OutputConnector::node(parent_id, shift_output_down - 1), downstream_connection, &encapsulating_network_path); - } - } - // Node inputs at or above the end index should be shifted up one - for shift_output_up in (end_index..last_output_index).rev() { - let Some(outward_wires) = self - .outward_wires(&encapsulating_network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(parent_id, shift_output_up))) - .cloned() - else { - log::error!("Could not get outward wires in reorder_export"); - return; - }; - for downstream_connection in &outward_wires { - self.disconnect_input(downstream_connection, &encapsulating_network_path); - self.create_wire(&OutputConnector::node(parent_id, shift_output_up + 1), downstream_connection, &encapsulating_network_path); - } - } - - // Move the connections to the moved export after all other ones have been shifted - for downstream_connection in &move_to_end_index { - self.disconnect_input(downstream_connection, &encapsulating_network_path); - self.create_wire(&OutputConnector::node(parent_id, end_index), downstream_connection, &encapsulating_network_path); - } - - // Update the metadata for the current network - self.unload_outward_wires(network_path); - self.unload_import_export_ports(network_path); - self.unload_modify_import_export(network_path); - self.unload_stack_dependents(network_path); - } - - /// The end index is before the import is removed, so moving to the end is the length of the current imports - pub fn reorder_import(&mut self, start_index: usize, mut end_index: usize, network_path: &[NodeId]) { - let mut encapsulating_network_path = network_path.to_vec(); - let Some(parent_id) = encapsulating_network_path.pop() else { - log::error!("Could not reorder import for document network"); - return; - }; - - let Some(encapsulating_network) = self.network_mut(&encapsulating_network_path) else { - log::error!("Could not get nested network in reorder_import"); - return; - }; - let Some(encapsulating_node) = encapsulating_network.nodes.get_mut(&parent_id) else { - log::error!("Could not get encapsulating node in reorder_import"); - return; - }; - - if end_index > start_index { - end_index -= 1; - } - let import = encapsulating_node.inputs.remove(start_index); - encapsulating_node.inputs.insert(end_index, import); - - self.transaction_modified(); - - let Some(encapsulating_node_metadata) = self.node_metadata_mut(&parent_id, &encapsulating_network_path) else { - log::error!("Could not get encapsulating network_metadata in reorder_import"); - return; - }; - - let properties_row = encapsulating_node_metadata.persistent_metadata.input_metadata.remove(start_index); - encapsulating_node_metadata.persistent_metadata.input_metadata.insert(end_index, properties_row); - if let Some(network_metadata) = encapsulating_node_metadata.persistent_metadata.network_metadata.as_mut() { - network_metadata.persistent_metadata.reference = None; - } - - // Update the metadata for the outer network - self.unload_outward_wires(&encapsulating_network_path); - self.unload_stack_dependents(&encapsulating_network_path); - - // Node input at the start index is now at the end index - let Some(move_to_end_index) = self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::Import(start_index))) - .cloned() - else { - log::error!("Could not get outward wires in reorder_import"); - return; - }; - // Node inputs above the start index should be shifted down one - let last_import_index = self.number_of_imports(network_path) - 1; - for shift_output_down in (start_index + 1)..=last_import_index { - let Some(outward_wires) = self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::Import(shift_output_down))) - .cloned() - else { - log::error!("Could not get outward wires in reorder_import"); - return; - }; - for downstream_connection in &outward_wires { - self.disconnect_input(downstream_connection, network_path); - self.create_wire(&OutputConnector::Import(shift_output_down - 1), downstream_connection, network_path); - } - } - // Node inputs at or above the end index should be shifted up one - for shift_output_up in (end_index..last_import_index).rev() { - let Some(outward_wires) = self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::Import(shift_output_up))) - .cloned() - else { - log::error!("Could not get outward wires in reorder_import"); - return; - }; - for downstream_connection in &outward_wires { - self.disconnect_input(downstream_connection, network_path); - self.create_wire(&OutputConnector::Import(shift_output_up + 1), downstream_connection, network_path); - } - } - - // Move the connections to the moved export after all other ones have been shifted - for downstream_connection in &move_to_end_index { - self.disconnect_input(downstream_connection, network_path); - self.create_wire(&OutputConnector::Import(end_index), downstream_connection, network_path); - } - - // Update the metadata for the current network - self.unload_outward_wires(network_path); - self.unload_import_export_ports(network_path); - self.unload_modify_import_export(network_path); - self.unload_stack_dependents(network_path); - } - - /// Replaces the implementation and corresponding metadata. - pub fn replace_implementation(&mut self, node_id: &NodeId, network_path: &[NodeId], new_template: &mut NodeTemplate) { - let Some(network) = self.network_mut(network_path) else { - log::error!("Could not get nested network in set_implementation"); - return; - }; - let Some(node) = network.nodes.get_mut(node_id) else { - log::error!("Could not get node in set_implementation"); - return; - }; - let new_implementation = std::mem::take(&mut new_template.document_node.implementation); - let _ = std::mem::replace(&mut node.implementation, new_implementation); - let Some(metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get metadata in set_implementation"); - return; - }; - let new_metadata = std::mem::take(&mut new_template.persistent_node_metadata.network_metadata); - let _ = std::mem::replace(&mut metadata.persistent_metadata.network_metadata, new_metadata); - } - - /// Replaces the inputs and corresponding metadata. - pub fn replace_inputs(&mut self, node_id: &NodeId, network_path: &[NodeId], new_template: &mut NodeTemplate) -> Option> { - let Some(network) = self.network_mut(network_path) else { - log::error!("Could not get nested network in set_implementation"); - return None; - }; - let Some(node) = network.nodes.get_mut(node_id) else { - log::error!("Could not get node in set_implementation"); - return None; - }; - let new_inputs = std::mem::take(&mut new_template.document_node.inputs); - let old_inputs = std::mem::replace(&mut node.inputs, new_inputs); - let Some(metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get metadata in set_implementation"); - return None; - }; - let new_metadata = std::mem::take(&mut new_template.persistent_node_metadata.input_metadata); - let _ = std::mem::replace(&mut metadata.persistent_metadata.input_metadata, new_metadata); - Some(old_inputs) - } - - /// Used when opening an old document to add the persistent metadata for each input if it doesnt exist, which is where the name/description are saved. - pub fn validate_input_metadata(&mut self, node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId]) { - let number_of_inputs = node.inputs.len(); - let Some(metadata) = self.node_metadata_mut(node_id, network_path) else { return }; - for added_input_index in metadata.persistent_metadata.input_metadata.len()..number_of_inputs { - let input_metadata = self - .reference(node_id, network_path) - .as_ref() - .and_then(resolve_document_node_type) - .and_then(|definition| definition.node_template.persistent_node_metadata.input_metadata.get(added_input_index)) - .cloned(); - let Some(metadata) = self.node_metadata_mut(node_id, network_path) else { return }; - metadata.persistent_metadata.input_metadata.push(input_metadata.unwrap_or_default()); - } - } - - // When opening an old document to ensure the output names match the number of exports - pub fn validate_output_names(&mut self, node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId]) { - if let DocumentNodeImplementation::Network(network) = &node.implementation { - let number_of_exports = network.exports.len(); - let Some(metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get metadata for node: {node_id:?}"); - return; - }; - metadata.persistent_metadata.output_names.resize(number_of_exports, "".to_string()); - } - } - - /// Keep metadata in sync with the new implementation if this is used by anything other than the upgrade scripts. - /// Only works with network nodes. Proto nodes use their ID as the reference. - pub fn set_reference(&mut self, node_id: &NodeId, network_path: &[NodeId], reference_name: Option) { - let Some(node_network_metadata) = self - .node_metadata_mut(node_id, network_path) - .and_then(|node_metadata| node_metadata.persistent_metadata.network_metadata.as_mut()) - else { - log::error!("Could not get network metadata in replace_reference_name"); - return; - }; - node_network_metadata.persistent_metadata.reference = reference_name; - } - - /// Keep metadata in sync with the new implementation if this is used by anything other than the upgrade scripts - pub fn set_call_argument(&mut self, node_id: &NodeId, network_path: &[NodeId], call_argument: Type) { - let Some(network) = self.network_mut(network_path) else { - log::error!("Could not get nested network in set_implementation"); - return; - }; - let Some(node) = network.nodes.get_mut(node_id) else { - log::error!("Could not get node in set_implementation"); - return; - }; - node.call_argument = call_argument; - } - - /// Lightweight version of `set_input` for bulk import operations. - /// Directly sets the input without `is_acyclic` checks, `load_structure`, position conversions, - /// or per-node cache invalidation. Call `load_structure`, `unload_all_nodes_click_targets`, and - /// `unload_all_nodes_bounding_box` once after all import wiring is complete. - pub fn set_input_for_import(&mut self, input_connector: &InputConnector, new_input: NodeInput, network_path: &[NodeId]) { - if matches!(input_connector, InputConnector::Export(_)) && matches!(new_input, NodeInput::Import { .. }) { - log::error!("Cannot connect a network to an export, see https://github.com/GraphiteEditor/Graphite/issues/1762"); - return; - } - - let Some(network) = self.network_mut(network_path) else { - log::error!("Could not get nested network in set_input_for_import"); - return; - }; - - let old_input = match input_connector { - InputConnector::Node { node_id, input_index } => { - let Some(node) = network.nodes.get_mut(node_id) else { - log::error!("Could not get node in set_input_for_import"); - return; - }; - let Some(input) = node.inputs.get_mut(*input_index) else { - log::error!("Could not get input in set_input_for_import"); - return; - }; - std::mem::replace(input, new_input.clone()) - } - InputConnector::Export(export_index) => { - let Some(export) = network.exports.get_mut(*export_index) else { - log::error!("Could not get export in set_input_for_import"); - return; - }; - std::mem::replace(export, new_input.clone()) - } - }; - - self.transaction_modified(); - self.update_outward_wires(network_path, input_connector, &old_input, &new_input); - } - - pub fn set_input(&mut self, input_connector: &InputConnector, new_input: NodeInput, network_path: &[NodeId]) { - if matches!(input_connector, InputConnector::Export(_)) && matches!(new_input, NodeInput::Import { .. }) { - // TODO: Add support for flattening NodeInput::Import exports in flatten_with_fns https://github.com/GraphiteEditor/Graphite/issues/1762 - log::error!("Cannot connect a network to an export, see https://github.com/GraphiteEditor/Graphite/issues/1762"); - return; - } - let Some(previous_input) = self.input_from_connector(input_connector, network_path).cloned() else { - log::error!("Could not get previous input in set_input"); - return; - }; - - // When changing a NodeInput::Node to a NodeInput::Node, the input should first be disconnected to ensure proper side effects - if (matches!(previous_input, NodeInput::Node { .. }) && matches!(new_input, NodeInput::Node { .. })) { - self.disconnect_input(input_connector, network_path); - self.set_input(input_connector, new_input, network_path); - return; - } - - // If the previous input is connected to a chain node, then set all upstream chain nodes to absolute position - if let NodeInput::Node { node_id: previous_upstream_id, .. } = &previous_input - && self.is_chain(previous_upstream_id, network_path) - { - self.set_upstream_chain_to_absolute(previous_upstream_id, network_path); - } - if let NodeInput::Node { node_id: new_upstream_id, .. } = &new_input { - // If the new input is connected to a chain node, then break its chain - if self.is_chain(new_upstream_id, network_path) { - self.set_upstream_chain_to_absolute(new_upstream_id, network_path); - } - } - - let Some(network) = self.network_mut(network_path) else { - log::error!("Could not get nested network in set_input"); - return; - }; - - let old_input = match input_connector { - InputConnector::Node { node_id, input_index } => { - let Some(node) = network.nodes.get_mut(node_id) else { - log::error!("Could not get node in set_input"); - return; - }; - let Some(input) = node.inputs.get_mut(*input_index) else { - log::error!("Could not get input in set_input"); - return; - }; - std::mem::replace(input, new_input.clone()) - } - InputConnector::Export(export_index) => { - let Some(export) = network.exports.get_mut(*export_index) else { - log::error!("Could not get export in set_input"); - return; - }; - std::mem::replace(export, new_input.clone()) - } - }; - - if old_input == new_input { - return; - }; - - // Ensure the network is not cyclic (only Node connections can create cycles) - if matches!(new_input, NodeInput::Node { .. }) && !network.is_acyclic() { - self.set_input(input_connector, old_input, network_path); - return; - } - - // It is necessary to ensure the grpah is acyclic before calling `self.position` as it sometimes crashes with cyclic graphs #3227 - let previous_metadata = match &previous_input { - NodeInput::Node { node_id, .. } => self.position(node_id, network_path).map(|position| (*node_id, position)), - _ => None, - }; - - self.transaction_modified(); - - // Ensure layer is toggled to non layer if it is no longer eligible to be a layer - let layer_node_path = match input_connector { - InputConnector::Node { node_id, .. } => Some((node_id, network_path)), - InputConnector::Export(_) => network_path.split_last(), - }; - - if let Some((layer_id, layer_path)) = layer_node_path - && !self.is_eligible_to_be_layer(layer_id, layer_path) - && self.is_layer(layer_id, layer_path) - { - self.set_to_node_or_layer(layer_id, layer_path, false); - } - - // Side effects - match (&old_input, &new_input) { - // If a node input is exposed or hidden reload the click targets and update the bounding box for all nodes - (NodeInput::Value { exposed: new_exposed, .. }, NodeInput::Value { exposed: old_exposed, .. }) => { - if let InputConnector::Node { node_id, .. } = input_connector { - if new_exposed != old_exposed { - self.unload_upstream_node_click_targets(vec![*node_id], network_path); - self.unload_all_nodes_bounding_box(network_path); - - // Unload the interior import/export ports if this node has a nested network - if matches!(self.implementation(node_id, network_path), Some(DocumentNodeImplementation::Network(_))) { - let nested_path = [network_path, &[*node_id]].concat(); - self.unload_import_export_ports(&nested_path); - self.unload_modify_import_export(&nested_path); - } - } - } else { - self.unload_import_export_ports(network_path); - self.unload_modify_import_export(network_path); - } - } - (_, NodeInput::Node { node_id: upstream_node_id, .. }) => { - // If the old input wasn't exposed but the new one is (`Node` inputs are always exposed), - // the node's port count changed, so its click targets need to be recomputed - if !old_input.is_exposed() - && let InputConnector::Node { node_id, .. } = input_connector - { - self.unload_node_click_targets(node_id, network_path); - } - - // Load structure if the change is to the document network and to the first or second - if network_path.is_empty() { - if matches!(input_connector, InputConnector::Export(0)) { - self.load_structure(); - } else if let InputConnector::Node { node_id, input_index } = &input_connector { - // If the connection is made to the first or second input of a node connected to the output, then load the structure - if self.connected_to_output(node_id, network_path) && (*input_index == 0 || *input_index == 1) { - self.load_structure(); - } - } - } - self.update_outward_wires(network_path, input_connector, &old_input, &new_input); - // Layout system - let Some(current_node_position) = self.position(upstream_node_id, network_path) else { - log::error!("Could not get current node position in set_input for node {upstream_node_id}"); - return; - }; - let Some(node_metadata) = self.node_metadata(upstream_node_id, network_path) else { - log::error!("Could not get node_metadata in set_input"); - return; - }; - match &node_metadata.persistent_metadata.node_type_metadata { - NodeTypePersistentMetadata::Layer(_) => { - match &input_connector { - InputConnector::Export(_) => { - // If a layer is connected to the exports, it should be set to absolute position without being moved. - self.set_absolute_position(upstream_node_id, current_node_position, network_path) - } - InputConnector::Node { - node_id: downstream_node_id, - input_index, - } => { - // If a layer has a single connection to the bottom of another layer, it should be set to stack positioning - let Some(downstream_node_metadata) = self.node_metadata(downstream_node_id, network_path) else { - log::error!("Could not get downstream node_metadata in set_input"); - return; - }; - match &downstream_node_metadata.persistent_metadata.node_type_metadata { - NodeTypePersistentMetadata::Layer(_) => { - // If the layer feeds into the bottom input of layer, and has no other outputs, set its position to stack at its previous y position - let multiple_outward_wires = self - .outward_wires(network_path) - .and_then(|all_outward_wires| all_outward_wires.get(&OutputConnector::node(*upstream_node_id, 0))) - .is_some_and(|outward_wires| outward_wires.len() > 1); - if *input_index == 0 && !multiple_outward_wires { - self.set_stack_position_calculated_offset(upstream_node_id, downstream_node_id, network_path); - } else { - self.set_absolute_position(upstream_node_id, current_node_position, network_path); - } - } - NodeTypePersistentMetadata::Node(_) => { - // If the layer feeds into a node, set its y offset to 0 - self.set_absolute_position(upstream_node_id, current_node_position, network_path); - } - } - } - } - } - NodeTypePersistentMetadata::Node(_) => {} - } - // Altering an export may move the connectors meaning the ports must be refreshed. - if matches!(input_connector, InputConnector::Export(_)) { - self.unload_import_export_ports(network_path); - } - self.unload_upstream_node_click_targets(vec![*upstream_node_id], network_path); - self.unload_stack_dependents(network_path); - self.try_set_upstream_to_chain(input_connector, network_path); - } - // If a connection is made to the imports - (NodeInput::Value { .. } | NodeInput::Scope { .. } | NodeInput::Inline { .. }, NodeInput::Import { .. }) => { - self.update_outward_wires(network_path, input_connector, &old_input, &new_input); - self.unload_wire(input_connector, network_path); - } - // If a connection to the imports is disconnected - (NodeInput::Import { .. }, NodeInput::Value { .. } | NodeInput::Scope { .. } | NodeInput::Inline { .. }) => { - self.update_outward_wires(network_path, input_connector, &old_input, &new_input); - self.unload_wire(input_connector, network_path); - } - // If a node is disconnected. - (NodeInput::Node { .. }, NodeInput::Value { .. } | NodeInput::Scope { .. } | NodeInput::Inline { .. }) => { - self.update_outward_wires(network_path, input_connector, &old_input, &new_input); - self.unload_wire(input_connector, network_path); - - if let Some((old_upstream_node_id, previous_position)) = previous_metadata { - let old_upstream_node_is_layer = self.is_layer(&old_upstream_node_id, network_path); - let Some(outward_wires) = self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(old_upstream_node_id, 0))) - else { - log::error!("Could not get outward wires in set_input"); - return; - }; - // If it is a layer and is connected to a single layer, set its position to stack at its previous y position - if old_upstream_node_is_layer && outward_wires.len() == 1 && outward_wires[0].input_index() == 0 { - if let Some(downstream_node_id) = outward_wires[0].node_id() - && self.is_layer(&downstream_node_id, network_path) - { - self.set_stack_position_calculated_offset(&old_upstream_node_id, &downstream_node_id, network_path); - self.unload_upstream_node_click_targets(vec![old_upstream_node_id], network_path); - } - } - // If it is a node and is eligible to be in a chain, then set it to chain positioning - else if !old_upstream_node_is_layer { - self.try_set_node_to_chain(&old_upstream_node_id, network_path); - } - // If a node was previously connected, and it is no longer connected to any nodes, then set its position to absolute at its previous position - else { - self.set_absolute_position(&old_upstream_node_id, previous_position, network_path); - } - } - // Load structure if the change is to the document network and to the first or second - if network_path.is_empty() { - if matches!(input_connector, InputConnector::Export(0)) { - self.load_structure(); - } else if let InputConnector::Node { node_id, input_index } = &input_connector { - // If the connection is made to the first or second input of a node connected to the output, then load the structure - if self.connected_to_output(node_id, network_path) && (*input_index == 0 || *input_index == 1) { - self.load_structure(); - } - } - } - self.unload_stack_dependents(network_path); - } - _ => {} - } - } - - /// Ensure network metadata, positions, and other metadata is kept in sync - pub fn disconnect_input(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) { - let Some(current_input) = self.input_from_connector(input_connector, network_path).cloned() else { - log::error!("Could not get current input in disconnect_input"); - return; - }; - // Only disconnect inputs that are actual wire connections (Node or Import) - if !matches!(current_input, NodeInput::Node { .. } | NodeInput::Import { .. }) { - return; - } - - if let NodeInput::Node { - node_id: upstream_node_id, - output_index, - .. - } = ¤t_input - { - // If the node upstream from the disconnected input is a chain, then break the chain by setting it to absolute positioning - if self.is_chain(upstream_node_id, network_path) { - self.set_upstream_chain_to_absolute(upstream_node_id, network_path); - } - // If the node upstream from the disconnected input has an outward wire to the bottom of a layer, set it back to stack positioning - if self.is_layer(upstream_node_id, network_path) { - let Some(outward_wires) = self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(*upstream_node_id, *output_index))) - else { - log::error!("Could not get outward wires in disconnect_input"); - return; - }; - let mut other_outward_wires = outward_wires.iter().filter(|outward_wire| *outward_wire != input_connector); - if let Some(other_outward_wire) = other_outward_wires.next().cloned() - && other_outward_wires.next().is_none() - && let InputConnector::Node { - node_id: downstream_node_id, - input_index, - } = other_outward_wire - && self.is_layer(&downstream_node_id, network_path) - && input_index == 0 - { - self.set_stack_position_calculated_offset(upstream_node_id, &downstream_node_id, network_path); - } - } - } - - let tagged_value = self.tagged_value_from_input(input_connector, network_path); - - let value_input = NodeInput::value(tagged_value, true); - - self.set_input(input_connector, value_input, network_path); - } - - pub fn create_wire(&mut self, output_connector: &OutputConnector, input_connector: &InputConnector, network_path: &[NodeId]) { - let input = match output_connector { - OutputConnector::Node { node_id, output_index } => NodeInput::node(*node_id, *output_index), - OutputConnector::Import(import_index) => NodeInput::Import { - import_type: graph_craft::generic!(T), - import_index: *import_index, - }, - }; - - self.set_input(input_connector, input, network_path); - } - - /// Used to insert a group of nodes into the network - pub fn insert_node_group(&mut self, nodes: Vec<(NodeId, NodeTemplate)>, new_ids: HashMap, network_path: &[NodeId]) { - for (old_node_id, mut node_template) in nodes { - // Get the new node template - node_template = self.map_ids(node_template, &old_node_id, &new_ids, network_path); - // Insert node into network - let node_id = *new_ids.get(&old_node_id).unwrap(); - let Some(network) = self.network_mut(network_path) else { - log::error!("Network not found in insert_node"); - return; - }; - - network.nodes.insert(node_id, node_template.document_node); - self.transaction_modified(); - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Network not found in insert_node"); - return; - }; - let node_metadata = DocumentNodeMetadata { - persistent_metadata: node_template.persistent_node_metadata, - transient_metadata: DocumentNodeTransientMetadata::default(), - }; - network_metadata.persistent_metadata.node_metadata.insert(node_id, node_metadata); - } - for new_node_id in new_ids.values() { - self.unload_node_click_targets(new_node_id, network_path); - } - self.unload_all_nodes_bounding_box(network_path); - self.unload_outward_wires(network_path); - } - - /// Used to insert a node template with no node/network inputs into the network and returns the a NodeTemplate with information from the previous node, if it existed. - pub fn insert_node(&mut self, node_id: NodeId, node_template: NodeTemplate, network_path: &[NodeId]) -> Option { - let has_node_or_network_input = node_template - .document_node - .inputs - .iter() - .all(|input| !(matches!(input, NodeInput::Node { .. }) || matches!(input, NodeInput::Import { .. }))); - assert!(has_node_or_network_input, "Cannot insert node with node or network inputs. Use insert_node_group instead"); - let Some(network) = self.network_mut(network_path) else { - log::error!("Network not found in insert_node"); - return None; - }; - - let previous_node = network.nodes.insert(node_id, node_template.document_node); - self.transaction_modified(); - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Network not found in insert_node"); - return None; - }; - let node_metadata = DocumentNodeMetadata { - persistent_metadata: node_template.persistent_node_metadata, - transient_metadata: DocumentNodeTransientMetadata::default(), - }; - let previous_metadata = network_metadata.persistent_metadata.node_metadata.insert(node_id, node_metadata); - - self.unload_all_nodes_bounding_box(network_path); - self.unload_node_click_targets(&node_id, network_path); - - previous_node.zip(previous_metadata).map(|(document_node, node_metadata)| NodeTemplate { - document_node, - persistent_node_metadata: node_metadata.persistent_metadata, - }) - } - - /// Deletes all nodes in `node_ids` and any sole dependents in the horizontal chain if the node to delete is a layer node. - pub fn delete_nodes(&mut self, nodes_to_delete: Vec, delete_children: bool, network_path: &[NodeId]) { - let Some(outward_wires) = self.outward_wires(network_path).cloned() else { - log::error!("Could not get outward wires in delete_nodes"); - return; - }; - - let mut delete_nodes = HashSet::new(); - for node_id in &nodes_to_delete { - delete_nodes.insert(*node_id); - - if !delete_children { - continue; - }; - - // Perform an upstream traversal to try delete children for secondary inputs - let mut upstream_nodes = (1..self.number_of_inputs(node_id, network_path)) - .filter_map(|input_index| self.upstream_output_connector(&InputConnector::node(*node_id, input_index), network_path).and_then(|oc| oc.node_id())) - .collect::>(); - while let Some(upstream_node) = upstream_nodes.pop() { - // Add the upstream nodes to the traversal - for input_connector in (0..self.number_of_inputs(&upstream_node, network_path)).map(|input_index| InputConnector::node(upstream_node, input_index)) { - if let Some(upstream_node) = self.upstream_output_connector(&input_connector, network_path).and_then(|oc| oc.node_id()) { - upstream_nodes.push(upstream_node); - } - } - // For each potential child perform a complete downstream traversal, ending at either a node in the `delete_nodes` set (excluding layer bottom inputs), the output, or a dead end. - // If the output node is eventually reached, then it is not a sole dependent and will not be deleted - let mut stack = vec![upstream_node]; - let mut can_delete = true; - while let Some(current_node) = stack.pop() { - let mut is_dead_end = true; - for output_connector in (0..self.number_of_outputs(¤t_node, network_path)).map(|output_index| OutputConnector::node(current_node, output_index)) { - let Some(downstream_nodes) = outward_wires.get(&output_connector) else { continue }; - if !downstream_nodes.is_empty() { - is_dead_end = false - } - for downstream_node in downstream_nodes { - if let InputConnector::Node { node_id: downstream_id, input_index } = downstream_node { - // If the downstream node is not in the delete nodes set, then continue iterating - // If the downstream node is the bottom input of a layer then continue iterating - if !delete_nodes.contains(downstream_id) || (*input_index == 0 && self.is_layer(downstream_id, network_path)) { - stack.push(*downstream_id); - } - // If the traversal reaches the primary input of the node to delete then do not delete it - if node_id == downstream_id && *input_index == 0 { - can_delete = false; - stack = Vec::new(); - break; - } - } - // If the traversal reaches the export, then the current node is not a sole dependent and cannot be deleted - else { - can_delete = false; - stack = Vec::new(); - break; - } - } - } - // If there are no outward wires, then we have reached a dead end, and the node cannot be deleted - if is_dead_end { - can_delete = false; - stack = Vec::new(); - } - } - - if can_delete { - delete_nodes.insert(upstream_node); - } - } - } - - for delete_node_id in &delete_nodes { - let upstream_chain_nodes = self - .upstream_flow_back_from_nodes(vec![*delete_node_id], network_path, FlowType::PrimaryFlow) - .skip(1) - .take_while(|upstream_node| self.is_chain(upstream_node, network_path)) - .collect::>(); - - if !self.remove_references_from_network(delete_node_id, network_path) { - log::error!("could not remove references from network"); - continue; - } - - for input_index in 0..self.number_of_displayed_inputs(delete_node_id, network_path) { - self.disconnect_input(&InputConnector::node(*delete_node_id, input_index), network_path); - } - - let Some(network) = self.network_mut(network_path) else { - log::error!("Could not get nested network in delete_nodes"); - continue; - }; - - network.nodes.remove(delete_node_id); - self.transaction_modified(); - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in delete_nodes"); - continue; - }; - network_metadata.persistent_metadata.node_metadata.remove(delete_node_id); - for previous_chain_node in upstream_chain_nodes { - self.set_chain_position(&previous_chain_node, network_path); - } - } - - // Prune this network's pinned display order down to the nodes that still exist, dropping any that were actually removed - let surviving_nodes = self.nested_network(network_path).map(|network| network.nodes.keys().copied().collect::>()); - if let Some(surviving_nodes) = surviving_nodes - && let Some(network_metadata) = self.network_metadata_mut(network_path) - { - network_metadata.persistent_metadata.pinned_node_order.retain(|node_id| surviving_nodes.contains(node_id)); - } - - self.unload_all_nodes_bounding_box(network_path); - // Instead of unloaded all node click targets, just unload the nodes upstream from the deleted nodes. unload_upstream_node_click_targets will not work since the nodes have been deleted. - self.unload_all_nodes_click_targets(network_path); - let Some(selected_nodes) = self.selected_nodes_mut(network_path) else { - log::error!("Could not get selected nodes in NodeGraphMessage::DeleteNodes"); - return; - }; - selected_nodes.retain_selected_nodes(|node_id| !nodes_to_delete.contains(node_id)); - } - - /// Removes all references to the node with the given id from the network, and reconnects the input to the node below. - pub fn remove_references_from_network(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - // TODO: Add more logic to support retaining preview when removing references. Since there are so many edge cases/possible crashes, for now the preview is ended. - self.stop_previewing(network_path); - - // Check whether the being-deleted node's first (primary) input is a node - let reconnect_to_input = self.document_node(node_id, network_path).and_then(|node| { - node.inputs - .iter() - .find(|input| input.is_exposed()) - .filter(|input| matches!(input, NodeInput::Node { .. } | NodeInput::Import { .. })) - .cloned() - }); - // Get all upstream references - let number_of_outputs = self.number_of_outputs(node_id, network_path); - let Some(all_outward_wires) = self.outward_wires(network_path) else { - log::error!("Could not get outward wires in remove_references_from_network"); - return false; - }; - let mut downstream_inputs_to_disconnect = Vec::new(); - for output_index in 0..number_of_outputs { - if let Some(outward_wires) = all_outward_wires.get(&OutputConnector::node(*node_id, output_index)) { - downstream_inputs_to_disconnect.extend(outward_wires.clone()); - } - } - - let mut reconnect_node = None; - - for downstream_input in &downstream_inputs_to_disconnect { - self.disconnect_input(downstream_input, network_path); - // Prevent reconnecting export to import until https://github.com/GraphiteEditor/Graphite/issues/1762 is solved - if !(matches!(reconnect_to_input, Some(NodeInput::Import { .. })) && matches!(downstream_input, InputConnector::Export(_))) - && let Some(reconnect_input) = &reconnect_to_input - { - reconnect_node = reconnect_input.as_node().and_then(|node_id| if self.is_stack(&node_id, network_path) { Some(node_id) } else { None }); - self.disconnect_input(&InputConnector::node(*node_id, 0), network_path); - self.set_input(downstream_input, reconnect_input.clone(), network_path); - } - } - - // Shift the reconnected node up to collapse space - if let Some(reconnect_node) = &reconnect_node { - let Some(reconnected_node_position) = self.position(reconnect_node, network_path) else { - log::error!("Could not get reconnected node position in remove_references_from_network"); - return false; - }; - let Some(disconnected_node_position) = self.position(node_id, network_path) else { - log::error!("Could not get disconnected node position in remove_references_from_network"); - return false; - }; - let max_shift_distance = reconnected_node_position.y - disconnected_node_position.y; - - let upstream_nodes = self.upstream_flow_back_from_nodes(vec![*reconnect_node], network_path, FlowType::PrimaryFlow).collect::>(); - - // Select the reconnect node to move to ensure the shifting works correctly - let Some(selected_nodes) = self.selected_nodes_mut(network_path) else { - log::error!("Could not get selected nodes in remove_references_from_network"); - return false; - }; - - let old_selected_nodes = selected_nodes.replace_with(upstream_nodes); - - // Shift up until there is either a collision or the disconnected node position is reached - let mut current_shift_distance = 0; - while self.check_collision_with_stack_dependents(reconnect_node, -1, network_path).is_empty() && max_shift_distance > current_shift_distance { - self.shift_selected_nodes(Direction::Up, false, network_path); - current_shift_distance += 1; - } - - let _ = self.selected_nodes_mut(network_path).unwrap().replace_with(old_selected_nodes); - } - - true - } - - pub fn start_previewing_without_restore(&mut self, network_path: &[NodeId]) { - // Some logic will have to be performed to prevent the graph positions from being completely changed when the export changes to some previewed node - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in start_previewing_without_restore"); - return; - }; - network_metadata.persistent_metadata.previewing = Previewing::Yes { root_node_to_restore: None }; - } - - fn stop_previewing(&mut self, network_path: &[NodeId]) { - if let Previewing::Yes { - root_node_to_restore: Some(root_node_to_restore), - } = self.previewing(network_path) - { - self.set_input( - &InputConnector::Export(0), - NodeInput::node(root_node_to_restore.node_id, root_node_to_restore.output_index), - network_path, - ); - } - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in stop_previewing"); - return; - }; - network_metadata.persistent_metadata.previewing = Previewing::No; - } - - // /// Sets the root node only if a node is being previewed - // pub fn update_root_node(&mut self, node_id: NodeId, output_index: usize) { - // if let Previewing::Yes { root_node_to_restore } = self.previewing { - // // Only continue previewing if the new root node is not the same as the primary export. If it is the same, end the preview - // if let Some(root_node_to_restore) = root_node_to_restore { - // if root_node_to_restore.id != node_id { - // self.start_previewing(node_id, output_index); - // } else { - // self.stop_preview(); - // } - // } else { - // self.stop_preview(); - // } - // } - // } - - pub fn set_display_name(&mut self, node_id: &NodeId, display_name: String, network_path: &[NodeId]) { - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get node {node_id} in set_visibility"); - return; - }; - - if node_metadata.persistent_metadata.display_name == display_name { - return; - } - - node_metadata.persistent_metadata.display_name = display_name; - - self.transaction_modified(); - self.try_unload_layer_width(node_id, network_path); - self.unload_node_click_targets(node_id, network_path); - } - - pub fn set_import_export_name(&mut self, mut name: String, index: ImportOrExport, network_path: &[NodeId]) { - let Some(encapsulating_node) = self.encapsulating_node_metadata_mut(network_path) else { - log::error!("Could not get encapsulating network in set_import_export_name"); - return; - }; - - let name_changed = match index { - ImportOrExport::Import(import_index) => { - let Some(input_properties) = encapsulating_node.persistent_metadata.input_metadata.get_mut(import_index) else { - log::error!("Could not get input properties in set_import_export_name"); - return; - }; - // Only return false if the previous value is the same as the current value - std::mem::swap(&mut input_properties.persistent_metadata.input_name, &mut name); - input_properties.persistent_metadata.input_name != name - } - ImportOrExport::Export(export_index) => { - let Some(export_name) = encapsulating_node.persistent_metadata.output_names.get_mut(export_index) else { - log::error!("Could not get export_name in set_import_export_name"); - return; - }; - std::mem::swap(export_name, &mut name); - *export_name != name - } - }; - if name_changed { - self.transaction_modified(); - } - } - - pub fn set_pinned(&mut self, node_id: &NodeId, network_path: &[NodeId], pinned: bool) { - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get node {node_id} in set_pinned"); - return; - }; - - node_metadata.persistent_metadata.pinned = pinned; - - // Track the node in this network's pinned display order: append when newly pinned, prune when unpinned - if let Some(network_metadata) = self.network_metadata_mut(network_path) { - let order = &mut network_metadata.persistent_metadata.pinned_node_order; - if pinned { - if !order.contains(node_id) { - order.push(*node_id); - } - } else { - order.retain(|id| id != node_id); - } - } - - self.transaction_modified(); - } - - /// Reorders a pinned node within its network's Properties panel display order so it ends up at `insert_index` among the - /// pinned nodes (0 being the topmost). Rebuilds the order from the list as currently shown, which also drops stale entries. - pub fn reorder_pinned_node(&mut self, node_id: NodeId, insert_index: usize, network_path: &[NodeId]) { - let shown = self.ordered_pinned_nodes(network_path); - - let Some(from) = shown.iter().position(|id| *id == node_id) else { return }; - let to = (if insert_index > from { insert_index - 1 } else { insert_index }).min(shown.len().saturating_sub(1)); - if to == from { - return; - } - - let mut new_order = shown; - let moved = new_order.remove(from); - new_order.insert(to, moved); - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get network_metadata in reorder_pinned_node"); - return; - }; - network_metadata.persistent_metadata.pinned_node_order = new_order; - - self.transaction_modified(); - } - - pub fn set_visibility(&mut self, node_id: &NodeId, network_path: &[NodeId], is_visible: bool) { - let Some(network) = self.network_mut(network_path) else { - return; - }; - let Some(node) = network.nodes.get_mut(node_id) else { - log::error!("Could not get node {node_id} in set_visibility"); - return; - }; - - node.visible = is_visible; - self.transaction_modified(); - } - - pub fn set_locked(&mut self, node_id: &NodeId, network_path: &[NodeId], locked: bool) { - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get node {node_id} in set_visibility"); - return; - }; - - node_metadata.persistent_metadata.locked = locked; - self.transaction_modified(); - self.try_unload_layer_width(node_id, network_path); - self.unload_node_click_targets(node_id, network_path); - } - - pub fn set_to_node_or_layer(&mut self, node_id: &NodeId, network_path: &[NodeId], is_layer: bool) { - // If a layer is set to a node, set upstream nodes to absolute position, and upstream siblings to absolute position - let child_id = { self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalFlow).nth(1) }; - let upstream_sibling_id = { self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::PrimaryFlow).nth(1) }; - match (self.is_layer(node_id, network_path), is_layer) { - (true, false) => { - if let Some(child_id) = child_id { - self.set_upstream_chain_to_absolute(&child_id, network_path); - } - if let Some(upstream_sibling_id) = upstream_sibling_id { - let Some(upstream_sibling_position) = self.position(&upstream_sibling_id, network_path) else { - log::error!("Could not get upstream sibling position in set_to_node_or_layer"); - return; - }; - self.set_absolute_position(&upstream_sibling_id, upstream_sibling_position, network_path); - } - } - (false, true) => { - // If a node is set to a layer - if let Some(upstream_sibling_id) = upstream_sibling_id { - // If the upstream sibling layer has a single output, then set it to stack position - if self.is_layer(&upstream_sibling_id, network_path) - && self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(upstream_sibling_id, 0))) - .is_some_and(|outward_wires| outward_wires.len() == 1) - { - self.set_stack_position_calculated_offset(&upstream_sibling_id, node_id, network_path); - } else { - self.set_upstream_chain_to_absolute(&upstream_sibling_id, network_path); - } - } - } - _ => return, - }; - - let Some(position) = self.position(node_id, network_path) else { - log::error!("Could not get position in set_to_node_or_layer"); - return; - }; - - let single_downstream_layer_position = self - .outward_wires(network_path) - .and_then(|outward_wires| { - outward_wires - .get(&OutputConnector::node(*node_id, 0)) - .and_then(|outward_wires| (outward_wires.len() == 1).then(|| outward_wires[0])) - .and_then(|downstream_connector| if downstream_connector.input_index() == 0 { downstream_connector.node_id() } else { None }) - }) - .filter(|downstream_node_id| self.is_layer(downstream_node_id, network_path)) - .and_then(|downstream_layer| self.position(&downstream_layer, network_path)); - - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get node_metadata for node {node_id}"); - return; - }; - - // First set the position to absolute - node_metadata.persistent_metadata.node_type_metadata = if is_layer { - NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { - position: LayerPosition::Absolute(position), - owned_nodes: TransientMetadata::Unloaded, - }) - } else { - NodeTypePersistentMetadata::Node(NodePersistentMetadata { - position: NodePosition::Absolute(position), - }) - }; - - // Try build the chain - if is_layer { - self.try_set_upstream_to_chain(&InputConnector::node(*node_id, 1), network_path); - } else { - self.try_set_node_to_chain(node_id, network_path); - } - - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get node_metadata for node {node_id}"); - return; - }; - // Set the position to stack if necessary - if let Some(downstream_position) = is_layer.then_some(single_downstream_layer_position).flatten() { - node_metadata.persistent_metadata.node_type_metadata = NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { - position: LayerPosition::Stack((position.y - downstream_position.y - STACK_VERTICAL_GAP).max(0) as u32), - owned_nodes: TransientMetadata::Unloaded, - }) - } - - if is_layer { - node_metadata.transient_metadata.node_type_metadata = NodeTypeTransientMetadata::Layer(LayerTransientMetadata::default()); - } else { - node_metadata.transient_metadata.node_type_metadata = NodeTypeTransientMetadata::Node; - } - - self.transaction_modified(); - self.unload_stack_dependents(network_path); - self.unload_upstream_node_click_targets(vec![*node_id], network_path); - self.unload_all_nodes_bounding_box(network_path); - self.unload_import_export_ports(network_path); - self.unload_modify_import_export(network_path); - self.load_structure(); - } - - pub fn toggle_preview(&mut self, toggle_id: NodeId, network_path: &[NodeId]) { - let Some(network) = self.nested_network(network_path) else { - return; - }; - // If new_export is None then disconnect - let mut new_export = None; - let mut new_previewing_state = Previewing::No; - if let Some(export) = network.exports.first() { - // If there currently an export - if let NodeInput::Node { node_id, output_index, .. } = export { - let previous_export_id = *node_id; - let previous_output_index = *output_index; - - // The export is clicked - if *node_id == toggle_id { - // If the current export is clicked and is being previewed end the preview and set either export back to root node or disconnect - if let Previewing::Yes { root_node_to_restore } = self.previewing(network_path) { - new_export = root_node_to_restore.map(|root_node| root_node.to_connector()); - new_previewing_state = Previewing::No; - } - // The export is clicked and there is no preview - else { - new_previewing_state = Previewing::Yes { - root_node_to_restore: Some(RootNode { - node_id: previous_export_id, - output_index: previous_output_index, - }), - }; - } - } - // The export is not clicked - else { - new_export = Some(OutputConnector::node(toggle_id, 0)); - - // There is currently a dashed line being drawn - if let Previewing::Yes { root_node_to_restore } = self.previewing(network_path) { - // There is also a solid line being drawn - if let Some(root_node_to_restore) = root_node_to_restore { - // If the node with the solid line is clicked, then start previewing that node without restore - if root_node_to_restore.node_id == toggle_id { - new_export = Some(OutputConnector::node(toggle_id, 0)); - new_previewing_state = Previewing::Yes { root_node_to_restore: None }; - } else { - // Root node to restore does not change - new_previewing_state = Previewing::Yes { - root_node_to_restore: Some(root_node_to_restore), - }; - } - } - // There is a dashed line without a solid line. - else { - new_previewing_state = Previewing::Yes { root_node_to_restore: None }; - } - } - // Not previewing, there is no dashed line being drawn - else { - new_export = Some(OutputConnector::node(toggle_id, 0)); - new_previewing_state = Previewing::Yes { - root_node_to_restore: Some(RootNode { - node_id: previous_export_id, - output_index: previous_output_index, - }), - }; - } - } - } - // The primary export is disconnected - else { - // Set node as export and cancel any preview - new_export = Some(OutputConnector::node(toggle_id, 0)); - self.start_previewing_without_restore(network_path); - } - } - match new_export { - Some(new_export) => { - self.create_wire(&new_export, &InputConnector::Export(0), network_path); - } - None => { - self.disconnect_input(&InputConnector::Export(0), network_path); - } - } - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - return; - }; - network_metadata.persistent_metadata.previewing = new_previewing_state; - } - - /// Sets the position of a node to an absolute position - fn set_absolute_position(&mut self, node_id: &NodeId, position: IVec2, network_path: &[NodeId]) { - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get node_metadata for node {node_id}"); - return; - }; - - if let NodeTypePersistentMetadata::Node(node_metadata) = &mut node_metadata.persistent_metadata.node_type_metadata { - if node_metadata.position == NodePosition::Absolute(position) { - return; - } - node_metadata.position = NodePosition::Absolute(position); - self.transaction_modified(); - } else if let NodeTypePersistentMetadata::Layer(layer_metadata) = &mut node_metadata.persistent_metadata.node_type_metadata { - if layer_metadata.position == LayerPosition::Absolute(position) { - return; - } - layer_metadata.position = LayerPosition::Absolute(position); - self.transaction_modified(); - } - } - - /// Sets the position of a layer to a stack position - pub fn set_stack_position(&mut self, node_id: &NodeId, y_offset: u32, network_path: &[NodeId]) { - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get node_metadata for node {node_id}"); - return; - }; - match &mut node_metadata.persistent_metadata.node_type_metadata { - NodeTypePersistentMetadata::Layer(layer_metadata) => { - if layer_metadata.position == LayerPosition::Stack(y_offset) { - return; - } - layer_metadata.position = LayerPosition::Stack(y_offset); - self.transaction_modified(); - } - _ => { - log::error!("Could not set stack position for non layer node {node_id}"); - } - } - self.unload_upstream_node_click_targets(vec![*node_id], network_path); - } - - /// Sets the position of a node to a stack position without changing its y offset - pub fn set_stack_position_calculated_offset(&mut self, node_id: &NodeId, downstream_layer: &NodeId, network_path: &[NodeId]) { - let Some(node_position) = self.position(node_id, network_path) else { - log::error!("Could not get node position for node {node_id}"); - return; - }; - let Some(downstream_position) = self.position(downstream_layer, network_path) else { - log::error!("Could not get downstream position for node {downstream_layer}"); - return; - }; - - self.set_stack_position(node_id, (node_position.y - downstream_position.y - STACK_VERTICAL_GAP).max(0) as u32, network_path); - } - - /// Sets the position of a node to a chain position - pub fn set_chain_position(&mut self, node_id: &NodeId, network_path: &[NodeId]) { - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get node_metadata for node {node_id}"); - return; - }; - // Set any absolute nodes to chain positioning - if let NodeTypePersistentMetadata::Node(NodePersistentMetadata { position }) = &mut node_metadata.persistent_metadata.node_type_metadata { - if *position == NodePosition::Chain { - return; - } - *position = NodePosition::Chain; - self.transaction_modified(); - } - // If there is an upstream layer then stop breaking the chain - else { - log::error!("Could not set chain position for layer node {node_id}"); - } - // let previous_upstream_node = self.upstream_output_connector(&InputConnector::node(*node_id, 0), network_path).and_then(|output| output.node_id()); - // let Some(previous_upstream_node_position) = previous_upstream_node.and_then(|upstream| self.position_from_downstream_node(&upstream, network_path)) else { - // log::error!("Could not get previous_upstream_node_position"); - // return; - // }; - self.unload_upstream_node_click_targets(vec![*node_id], network_path); - // Reload click target of the layer which encapsulate the chain - if let Some(downstream_layer) = self.downstream_layer_for_chain_node(node_id, network_path) { - self.unload_node_click_targets(&downstream_layer, network_path); - } - self.unload_all_nodes_bounding_box(network_path); - - // let Some(new_upstream_node_position) = previous_upstream_node.and_then(|upstream| self.position_from_downstream_node(&upstream, network_path)) else { - // log::error!("Could not get new_upstream_node_position"); - // return; - // }; - // if let Some(previous_upstream_node) = { - // let x_delta = new_upstream_node_position.x - previous_upstream_node_position.x; - // // Upstream node got shifted to left, so shift all upstream absolute sole dependents - // if x_delta != 0 { - // let upstream_absolute_nodes = SelectedNodes( - // self.upstream_flow_back_from_nodes(vec![previous_upstream_node], network_path, FlowType::UpstreamFlow) - // .into_iter() - // .filter(|node_id| self.is_absolute(node_id, network_path)) - // .collect::>(), - // ); - // let old_selected_nodes = std::mem::replace(self.selected_nodes_mut(network_path).unwrap(), upstream_absolute_nodes); - // if x_delta < 0 { - // for _ in 0..x_delta.abs() { - // self.shift_selected_nodes(Direction::Left, false, network_path); - // } - // } else { - // for _ in 0..x_delta.abs() { - // self.shift_selected_nodes(Direction::Right, false, network_path); - // } - // } - // let _ = std::mem::replace(self.selected_nodes_mut(network_path).unwrap(), old_selected_nodes); - // } - // } - } - - fn valid_upstream_chain_nodes(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) -> Vec { - let InputConnector::Node { - node_id: input_connector_node_id, - input_index, - } = input_connector - else { - return Vec::new(); - }; - let mut set_position_to_chain = Vec::new(); - if self.is_layer(input_connector_node_id, network_path) && *input_index == 1 || self.is_chain(input_connector_node_id, network_path) && *input_index == 0 { - let mut downstream_id = *input_connector_node_id; - for upstream_node in self - .upstream_flow_back_from_nodes(vec![*input_connector_node_id], network_path, FlowType::HorizontalFlow) - .skip(1) - .collect::>() - { - if self.is_layer(&upstream_node, network_path) || self.hidden_primary_output(&upstream_node, network_path) { - break; - } - let Some(outward_wires) = self.outward_wires(network_path).and_then(|outward_wires| outward_wires.get(&OutputConnector::node(upstream_node, 0))) else { - log::error!("Could not get outward wires in try_set_upstream_to_chain"); - break; - }; - if outward_wires.len() != 1 { - break; - } - let downstream_position = self.position(&downstream_id, network_path); - let upstream_node_position = self.position(&upstream_node, network_path); - if let (Some(input_connector_position), Some(new_upstream_node_position)) = (downstream_position, upstream_node_position) { - if input_connector_position.y == new_upstream_node_position.y - && new_upstream_node_position.x >= input_connector_position.x - 9 - && new_upstream_node_position.x <= input_connector_position.x - { - set_position_to_chain.push(upstream_node); - } else { - break; - } - } else { - break; - } - downstream_id = upstream_node; - } - } - set_position_to_chain - } - - /// Input connector is the input to the layer - pub fn try_set_upstream_to_chain(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) { - // If the new input is to a non layer node on the same y position as the input connector, or the input connector is the side input of a layer, then set it to chain position - let valid_upstream_chain_nodes = self.valid_upstream_chain_nodes(input_connector, network_path); - - for node_id in &valid_upstream_chain_nodes { - self.set_chain_position(node_id, network_path); - } - - // Reload click target of the layer which used to encapsulate the node - if !valid_upstream_chain_nodes.is_empty() { - let mut downstream_layer = Some(input_connector.node_id().unwrap()); - while let Some(downstream_layer_id) = downstream_layer { - if downstream_layer_id == input_connector.node_id().unwrap() || !self.is_layer(&downstream_layer_id, network_path) { - let Some(outward_wires) = self.outward_wires(network_path) else { - log::error!("Could not get outward wires in try_set_upstream_to_chain"); - downstream_layer = None; - break; - }; - downstream_layer = outward_wires - .get(&OutputConnector::node(downstream_layer_id, 0)) - .and_then(|outward_wires| if outward_wires.len() == 1 { outward_wires[0].node_id() } else { None }); - } else { - break; - } - } - if let Some(downstream_layer) = downstream_layer { - self.unload_node_click_targets(&downstream_layer, network_path); - } - } - } - - fn try_set_node_to_chain(&mut self, node_id: &NodeId, network_path: &[NodeId]) { - if let Some(outward_wires) = self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(*node_id, 0))) - .cloned() && outward_wires.len() == 1 - { - self.try_set_upstream_to_chain(&outward_wires[0], network_path) - } - } - - pub fn force_set_upstream_to_chain(&mut self, node_id: &NodeId, network_path: &[NodeId]) { - for upstream_id in self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalFlow).collect::>().iter() { - if !self.is_layer(upstream_id, network_path) - && self - .outward_wires(network_path) - .is_some_and(|outward_wires| outward_wires.get(&OutputConnector::node(*upstream_id, 0)).is_some_and(|outward_wires| outward_wires.len() == 1)) - { - self.set_chain_position(upstream_id, network_path); - } - // If there is an upstream layer then stop breaking the chain - else { - break; - } - } - } - - /// node_id is the first chain node, not the layer - fn set_upstream_chain_to_absolute(&mut self, node_id: &NodeId, network_path: &[NodeId]) { - let Some(downstream_layer) = self.downstream_layer_for_chain_node(node_id, network_path) else { - log::error!("Could not get downstream layer in set_upstream_chain_to_absolute"); - return; - }; - for upstream_id in self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalFlow).collect::>().iter() { - let Some(previous_position) = self.position(upstream_id, network_path) else { - log::error!("Could not get position in set_upstream_chain_to_absolute"); - return; - }; - // Set any chain nodes to absolute positioning - if self.is_chain(upstream_id, network_path) { - self.set_absolute_position(upstream_id, previous_position, network_path); - // Reload click target of the layer which used to encapsulate the chain - self.unload_node_click_targets(&downstream_layer, network_path); - } - // If there is an upstream layer then stop breaking the chain - else { - break; - } - } - } - - pub fn nodes_sorted_top_to_bottom<'a>(&mut self, node_ids: impl Iterator, network_path: &[NodeId]) -> Option> { - let mut node_ids_with_position = node_ids - .filter_map(|&node_id| { - let Some(position) = self.position(&node_id, network_path) else { - log::error!("Could not get position for node {node_id} in shift_selected_nodes"); - return None; - }; - Some((node_id, position.y)) - }) - .collect::>(); - - node_ids_with_position.sort_unstable_by(|a, b| a.1.cmp(&b.1)); - Some(node_ids_with_position.into_iter().map(|(node_id, _)| node_id).collect::>()) - } - - /// Used when moving layer by the layer panel, does not run any pushing logic. Moves all sole dependents of the layer as well. - /// Ensure that the layer is absolute position. - pub fn shift_absolute_node_position(&mut self, layer: &NodeId, shift: IVec2, network_path: &[NodeId]) { - if shift == IVec2::ZERO { - return; - } - let mut nodes_to_shift = self.upstream_nodes_below_layer(layer, network_path); - nodes_to_shift.insert(*layer); - - for node_id in nodes_to_shift { - let Some(node_to_shift_metadata) = self.node_metadata_mut(&node_id, network_path) else { - log::error!("Could not get node metadata for node {node_id} in set_layer_position"); - continue; - }; - match &mut node_to_shift_metadata.persistent_metadata.node_type_metadata { - NodeTypePersistentMetadata::Layer(layer_metadata) => { - if let LayerPosition::Absolute(layer_position) = &mut layer_metadata.position { - *layer_position += shift; - } - } - NodeTypePersistentMetadata::Node(node_metadata) => { - if let NodePosition::Absolute(node_position) = &mut node_metadata.position { - *node_position += shift; - } - } - } - } - self.transaction_modified(); - self.unload_upstream_node_click_targets(vec![*layer], network_path); - } - - pub fn shift_selected_nodes(&mut self, direction: Direction, shift_without_push: bool, network_path: &[NodeId]) { - let Some(mut node_ids) = self - .selected_nodes_in_nested_network(network_path) - .map(|selected_nodes| selected_nodes.selected_nodes().cloned().collect::>()) - else { - log::error!("Could not get selected nodes in shift_selected_nodes"); - return; - }; - if !shift_without_push { - for node_id in node_ids.clone() { - if self.is_layer(&node_id, network_path) - && let Some(owned_nodes) = self.owned_nodes(&node_id, network_path) - { - for owned_node in owned_nodes { - node_ids.remove(owned_node); - } - }; - } - } - - for selected_node in &node_ids.clone() { - // Deselect chain nodes upstream from a selected layer - if self.is_chain(selected_node, network_path) - && self - .downstream_layer_for_chain_node(selected_node, network_path) - .is_some_and(|downstream_layer| node_ids.contains(&downstream_layer)) - { - node_ids.remove(selected_node); - } - } - - // If shifting up without a push, cancel the shift if there is a stack node that cannot move up - if direction == Direction::Up && shift_without_push { - for node_id in &node_ids { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get node metadata for node {node_id} in shift_selected_nodes"); - return; - }; - if let NodeTypePersistentMetadata::Layer(layer_metadata) = &node_metadata.persistent_metadata.node_type_metadata - && let LayerPosition::Stack(offset) = layer_metadata.position - { - // If the upstream layer is selected, then skip - let Some(outward_wires) = self.outward_wires(network_path).and_then(|outward_wires| outward_wires.get(&OutputConnector::node(*node_id, 0))) else { - log::error!("Could not get outward wires in shift_selected_nodes"); - return; - }; - if let Some(upstream_node) = outward_wires.first() - && node_ids.contains(&upstream_node.node_id().expect("Stack layer should have downstream layer")) - { - continue; - } - // Offset cannot be negative, so cancel the shift - if offset == 0 { - return; - } - } - } - } - - let Some(mut sorted_node_ids) = self.nodes_sorted_top_to_bottom(node_ids.iter(), network_path) else { - return; - }; - - if sorted_node_ids.len() != node_ids.len() { - log::error!("Could not get position for all nodes in shift_selected_nodes"); - return; - } - - // If shifting down, then the lowest node (greatest y value) should be shifted first - if direction == Direction::Down { - sorted_node_ids.reverse(); - } - - // Ensure the top of each stack is only shifted left/right once (this is only for performance) - let mut shifted_absolute_layers = Vec::new(); - - let mut shifted_nodes = HashSet::new(); - - let shift_sign = if direction == Direction::Left || direction == Direction::Up { -1 } else { 1 }; - - for node_id in &sorted_node_ids { - match direction { - Direction::Left | Direction::Right => { - // If the node is a non layer, then directly shift it - if !self.is_layer(node_id, network_path) { - self.try_shift_node(node_id, IVec2::new(shift_sign, 0), &mut shifted_nodes, network_path); - } else { - // Get the downstream absolute layer (inclusive) - let mut downstream_absolute_layer = *node_id; - loop { - if self.is_absolute(&downstream_absolute_layer, network_path) { - break; - } - let Some(downstream_node) = self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(downstream_absolute_layer, 0))) - .and_then(|downstream_nodes| downstream_nodes.first()) - .and_then(|downstream_node| downstream_node.node_id()) - else { - log::error!("Could not get downstream node when deselecting stack layer in shift_selected_nodes"); - break; - }; - downstream_absolute_layer = downstream_node; - } - - // Shift the upstream nodes below the stack layers only once - if !shifted_absolute_layers.contains(&downstream_absolute_layer) { - shifted_absolute_layers.push(downstream_absolute_layer); - - self.try_shift_node(&downstream_absolute_layer, IVec2::new(shift_sign, 0), &mut shifted_nodes, network_path); - - if !shift_without_push { - for stack_nodes in self - .upstream_flow_back_from_nodes(vec![downstream_absolute_layer], network_path, FlowType::PrimaryFlow) - .take_while(|layer| self.is_layer(layer, network_path)) - .collect::>() - { - for sole_dependent in &self.upstream_nodes_below_layer(&stack_nodes, network_path) { - if self.is_absolute(sole_dependent, network_path) { - self.try_shift_node(sole_dependent, IVec2::new(shift_sign, 0), &mut shifted_nodes, network_path); - } - } - } - } - } - } - } - Direction::Up | Direction::Down => { - if !shift_without_push && self.is_layer(node_id, network_path) { - self.shift_node_or_parent(node_id, shift_sign, &mut shifted_nodes, network_path); - } else if !shifted_nodes.contains(node_id) { - shifted_nodes.insert(*node_id); - self.shift_node(node_id, IVec2::new(0, shift_sign), network_path); - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in export_ports"); - continue; - }; - if let TransientMetadata::Loaded(stack_dependents) = &mut network_metadata.transient_metadata.stack_dependents - && let Some(LayerOwner::None(offset)) = stack_dependents.get_mut(node_id) - { - *offset += shift_sign; - self.transaction_modified(); - }; - - // Shift the upstream layer so that it stays in the same place - if self.is_layer(node_id, network_path) { - let upstream_layer = { - self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::PrimaryFlow) - .nth(1) - .filter(|upstream_node| self.is_stack(upstream_node, network_path)) - }; - if let Some(upstream_layer) = upstream_layer { - self.shift_node(&upstream_layer, IVec2::new(0, -shift_sign), network_path); - } - } - } - } - } - } - - let Some(stack_dependents) = self - .stack_dependents(network_path) - .map(|stack_dependents| stack_dependents.iter().map(|(node_id, owner)| (*node_id, owner.clone())).collect::>()) - else { - log::error!("Could not load stack dependents in shift_selected_nodes"); - return; - }; - - let mut stack_dependents_with_position = stack_dependents - .iter() - .filter_map(|(node_id, owner)| { - let LayerOwner::None(offset) = owner else { - return None; - }; - if *offset == 0 { - return None; - } - if self.selected_nodes_in_nested_network(network_path).is_some_and(|selected_nodes| { - selected_nodes - .selected_nodes() - .any(|selected_node| selected_node == node_id || self.owned_nodes(node_id, network_path).is_some_and(|owned_nodes| owned_nodes.contains(selected_node))) - }) { - return None; - }; - let Some(position) = self.position(node_id, network_path) else { - log::error!("Could not get position for node {node_id} in shift_selected_nodes"); - return None; - }; - Some((*node_id, *offset, position.y)) - }) - .collect::>(); - - stack_dependents_with_position.sort_unstable_by(|a, b| { - a.1.signum().cmp(&b.1.signum()).then_with(|| { - // If the node has a positive offset, then it is shifted up, so shift the top nodes first - if a.1.signum() == 1 { a.2.cmp(&b.2) } else { b.2.cmp(&a.2) } - }) - }); - - // Try shift every node that is offset from its original position - for &(ref node_id, mut offset, _) in stack_dependents_with_position.iter() { - while offset != 0 { - if self.check_collision_with_stack_dependents(node_id, -offset.signum(), network_path).is_empty() { - self.vertical_shift_with_push(node_id, -offset.signum(), &mut HashSet::new(), network_path); - offset += -offset.signum(); - } else { - break; - } - } - } - } - - fn try_shift_node(&mut self, node_id: &NodeId, shift: IVec2, shifted_nodes: &mut HashSet, network_path: &[NodeId]) { - if !shifted_nodes.contains(node_id) { - self.shift_node(node_id, shift, network_path); - shifted_nodes.insert(*node_id); - } - } - - fn vertical_shift_with_push(&mut self, node_id: &NodeId, shift_sign: i32, shifted_nodes: &mut HashSet, network_path: &[NodeId]) { - // Do not shift a node more than once - if shifted_nodes.contains(node_id) { - return; - } - shifted_nodes.insert(*node_id); - - let nodes_to_shift = self.check_collision_with_stack_dependents(node_id, shift_sign, network_path); - - for node_to_shift in nodes_to_shift { - self.shift_node_or_parent(&node_to_shift.0, shift_sign, shifted_nodes, network_path); - } - - self.shift_node(node_id, IVec2::new(0, shift_sign), network_path); - - let Some(network_metadata) = self.network_metadata_mut(network_path) else { - log::error!("Could not get nested network_metadata in export_ports"); - return; - }; - let TransientMetadata::Loaded(stack_dependents) = &mut network_metadata.transient_metadata.stack_dependents else { - log::error!("Stack dependents should be loaded in vertical_shift_with_push"); - return; - }; - - let mut default_layer_owner = LayerOwner::None(0); - let layer_owner = stack_dependents.get_mut(node_id).unwrap_or_else(|| { - log::error!("Could not get layer owner in vertical_shift_with_push for node {node_id}"); - &mut default_layer_owner - }); - - match layer_owner { - LayerOwner::None(offset) => { - *offset += shift_sign; - self.transaction_modified(); - } - LayerOwner::Layer(_) => { - log::error!("Node being shifted with a push should not be owned"); - } - } - - // Shift the upstream layer so that it stays in the same place - if self.is_layer(node_id, network_path) { - let upstream_layer = { - self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::PrimaryFlow) - .nth(1) - .filter(|upstream_node| self.is_stack(upstream_node, network_path)) - }; - if let Some(upstream_layer) = upstream_layer { - self.shift_node(&upstream_layer, IVec2::new(0, -shift_sign), network_path); - } - } - - // Shift the nodes that are owned by the layer (if any) - if let Some(owned_nodes) = self.owned_nodes(node_id, network_path).cloned() { - for owned_node in owned_nodes { - if self.is_absolute(&owned_node, network_path) { - self.try_shift_node(&owned_node, IVec2::new(0, shift_sign), shifted_nodes, network_path); - } - } - } - } - - fn check_collision_with_stack_dependents(&mut self, node_id: &NodeId, shift_sign: i32, network_path: &[NodeId]) -> Vec<(NodeId, LayerOwner)> { - self.try_load_all_node_click_targets(network_path); - self.try_load_stack_dependents(network_path); - let Some(stack_dependents) = self.try_get_stack_dependents(network_path) else { - log::error!("Could not load stack dependents in shift_selected_nodes"); - return Vec::new(); - }; - // Check collisions and for all owned nodes and recursively shift them - let mut nodes_to_shift = Vec::new(); - - let default_hashset = HashSet::new(); - let owned_nodes = self.owned_nodes(node_id, network_path).unwrap_or(&default_hashset); - - for current_node in owned_nodes.iter().chain(std::iter::once(node_id)) { - for node_to_check_collision in stack_dependents { - // Do not check collision between any of the owned nodes or the shifted node - if owned_nodes.contains(node_to_check_collision.0) || node_to_check_collision.0 == node_id { - continue; - } - - if node_to_check_collision.0 == current_node { - continue; - } - let Some(mut current_node_bounding_box) = self.try_get_node_bounding_box(current_node, network_path) else { - log::error!("Could not get bounding box for node {node_id} in shift_selected_nodes"); - continue; - }; - - let Some(node_bounding_box) = self.try_get_node_bounding_box(node_to_check_collision.0, network_path) else { - log::error!("Could not get bounding box for node {node_to_check_collision:?} in shift_selected_nodes"); - continue; - }; - // If the nodes do not intersect horizontally, then there is no collision - if current_node_bounding_box[1].x < node_bounding_box[0].x || current_node_bounding_box[0].x > node_bounding_box[1].x { - continue; - } - // Do not check collision if the nodes are currently intersecting - if current_node_bounding_box[1].y >= node_bounding_box[0].y - 0.1 && current_node_bounding_box[0].y <= node_bounding_box[1].y + 0.1 { - continue; - } - - current_node_bounding_box[1].y += GRID_SIZE as f64 * shift_sign as f64; - current_node_bounding_box[0].y += GRID_SIZE as f64 * shift_sign as f64; - - let collision = current_node_bounding_box[1].y >= node_bounding_box[0].y - 0.1 && current_node_bounding_box[0].y <= node_bounding_box[1].y + 0.1; - if collision { - nodes_to_shift.push((*node_to_check_collision.0, node_to_check_collision.1.clone())); - } - } - } - nodes_to_shift - } - - fn shift_node_or_parent(&mut self, node_id: &NodeId, shift_sign: i32, shifted_nodes: &mut HashSet, network_path: &[NodeId]) { - let Some(stack_dependents) = self.stack_dependents(network_path) else { - log::error!("Could not load stack dependents in shift_selected_nodes"); - return; - }; - let Some(layer_owner) = stack_dependents.get(node_id) else { - log::error!("Could not get layer owner in shift_node_or_parent for node {node_id}"); - return; - }; - match layer_owner { - LayerOwner::Layer(layer_owner) => { - let layer_owner = *layer_owner; - self.shift_node_or_parent(&layer_owner, shift_sign, shifted_nodes, network_path) - } - LayerOwner::None(_) => self.vertical_shift_with_push(node_id, shift_sign, shifted_nodes, network_path), - } - } - - /// Shifts a node by a certain offset without the auto layout system. If the node is a layer in a stack, the y_offset is shifted. If the node is a node in a chain, its position gets set to absolute. - // TODO: Check for unnecessary unloading of click targets - pub fn shift_node(&mut self, node_id: &NodeId, shift: IVec2, network_path: &[NodeId]) { - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get node_metadata for node {node_id}"); - return; - }; - if let NodeTypePersistentMetadata::Layer(layer_metadata) = &mut node_metadata.persistent_metadata.node_type_metadata { - if let LayerPosition::Absolute(layer_position) = &mut layer_metadata.position { - *layer_position += shift; - self.transaction_modified(); - } else if let LayerPosition::Stack(y_offset) = &mut layer_metadata.position { - let shifted_y_offset = *y_offset as i32 + shift.y; - - // A layer can only be shifted to a positive y_offset - if shifted_y_offset < 0 { - log::error!( - "Space should be made above the layer before shifting it up. Layer {node_id} current y_offset: {y_offset} shift: {}", - shift.y - ); - } - if shift.x != 0 { - log::error!("Stack layer {node_id} cannot be shifted horizontally."); - } - - let new_y_offset = shifted_y_offset.max(0) as u32; - if *y_offset == new_y_offset { - return; - } - *y_offset = new_y_offset; - self.transaction_modified(); - } - // Unload click targets for all upstream nodes, since they may have been derived from the node that was shifted - self.unload_upstream_node_click_targets(vec![*node_id], network_path); - } else if let NodeTypePersistentMetadata::Node(node_metadata) = &mut node_metadata.persistent_metadata.node_type_metadata { - if let NodePosition::Absolute(node_metadata) = &mut node_metadata.position { - *node_metadata += shift; - self.transaction_modified(); - // Unload click targets for all upstream nodes, since they may have been derived from the node that was shifted - self.unload_upstream_node_click_targets(vec![*node_id], network_path); - self.try_set_node_to_chain(node_id, network_path); - } else if let NodePosition::Chain = node_metadata.position { - self.set_upstream_chain_to_absolute(node_id, network_path); - self.shift_node(node_id, shift, network_path); - } - } - // Unload click targets for all upstream nodes, since they may have been derived from the node that was shifted - self.unload_upstream_node_click_targets(vec![*node_id], network_path); - self.unload_all_nodes_bounding_box(network_path); - } - - /// Lightweight version of `move_layer_to_stack` for SVG import. Performs only the wiring - /// (connecting the layer into the stack) without any position calculation or push/collision logic. - /// Positions should be set separately after the full import tree is built. - pub fn move_layer_to_stack_for_import(&mut self, layer: LayerNodeIdentifier, mut parent: LayerNodeIdentifier, mut insert_index: usize, network_path: &[NodeId]) { - // Artboard redirection: if a non-artboard layer targets ROOT_PARENT and an artboard exists, redirect into the artboard - if let Some(first_layer) = LayerNodeIdentifier::ROOT_PARENT.children(&self.document_metadata).next() - && parent == LayerNodeIdentifier::ROOT_PARENT - && self - .reference(&layer.to_node(), network_path) - .is_none_or(|reference| reference != DefinitionIdentifier::Network("Artboard".into())) - && self.is_artboard(&first_layer.to_node(), network_path) - { - parent = first_layer; - insert_index = 0; - } - - let post_node = ModifyInputsContext::get_post_node_with_index(self, parent, insert_index); - let Some(post_node_input) = self.input_from_connector(&post_node, network_path).cloned() else { - log::error!("Could not get previous input in move_layer_to_stack_for_import"); - return; - }; - - let layer_output = NodeInput::node(layer.to_node(), 0); - - match post_node_input { - NodeInput::Value { .. } | NodeInput::Scope(_) | NodeInput::Inline(_) | NodeInput::Reflection(_) => { - // First child in the stack: wire layer output to the post_node input - self.set_input_for_import(&post_node, layer_output, network_path); - } - NodeInput::Node { .. } => { - // Subsequent child: insert layer between post_node and its current upstream... - // 1. Disconnect old upstream from post_node, wire layer output to post_node - self.set_input_for_import(&post_node, layer_output, network_path); - // 2. Wire old upstream into layer's primary (stack) input - self.set_input_for_import(&InputConnector::node(layer.to_node(), 0), post_node_input, network_path); - } - NodeInput::Import { .. } => { - log::error!("Cannot insert import layer into a parent that connects to the imports"); - } - } - } - - /// Sets a layer's position directly without triggering per-node cache invalidation. - /// Used for bulk import operations where caches are invalidated once at the end. - pub fn set_layer_position_for_import(&mut self, node_id: &NodeId, position: LayerPosition, network_path: &[NodeId]) { - let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get node_metadata for node {node_id} in set_layer_position_for_import"); - return; - }; - if let NodeTypePersistentMetadata::Layer(layer_metadata) = &mut node_metadata.persistent_metadata.node_type_metadata { - layer_metadata.position = position; - self.transaction_modified(); - } - } - - /// Disconnect the layers primary output and the input to the last non layer node feeding into it through primary flow, reconnects, then moves the layer to the new layer and stack index - pub fn move_layer_to_stack(&mut self, layer: LayerNodeIdentifier, mut parent: LayerNodeIdentifier, mut insert_index: usize, network_path: &[NodeId]) { - // Prevent moving an artboard anywhere but to the ROOT_PARENT child stack - if self.is_artboard(&layer.to_node(), network_path) && parent != LayerNodeIdentifier::ROOT_PARENT { - log::error!("Artboard can only be moved to the root parent stack"); - return; - } - - // A layer is considered to be the height of that layer plus the height to the upstream layer sibling - // If a non artboard layer is attempted to be connected to the exports, and there is already an artboard connected, then connect the layer to the artboard. - if let Some(first_layer) = LayerNodeIdentifier::ROOT_PARENT.children(&self.document_metadata).next() - && parent == LayerNodeIdentifier::ROOT_PARENT - && self - .reference(&layer.to_node(), network_path) - .is_none_or(|reference| reference != DefinitionIdentifier::Network("Artboard".into())) - && self.is_artboard(&first_layer.to_node(), network_path) - { - parent = first_layer; - insert_index = 0; - } - - let Some(layer_to_move_position) = self.position(&layer.to_node(), network_path) else { - log::error!("Could not get layer_to_move_position in move_layer_to_stack"); - return; - }; - - let mut lowest_upstream_node_height = 0; - for upstream_node in self - .upstream_flow_back_from_nodes(vec![layer.to_node()], network_path, FlowType::LayerChildrenUpstreamFlow) - .collect::>() - { - let Some(upstream_node_position) = self.position(&upstream_node, network_path) else { - log::error!("Could not get upstream node position in move_layer_to_stack"); - return; - }; - lowest_upstream_node_height = lowest_upstream_node_height.max((upstream_node_position.y - layer_to_move_position.y).max(0) as u32); - } - - // If the moved layer is a child of the new parent, then get its index after the disconnect - if let Some(moved_layer_previous_index) = parent.children(&self.document_metadata).position(|child| child == layer) { - // Adjust the insert index if the layer's previous index is less than the insert index - if moved_layer_previous_index < insert_index { - insert_index -= 1; - } - } - - // Disconnect layer to move - self.remove_references_from_network(&layer.to_node(), network_path); - - let post_node = ModifyInputsContext::get_post_node_with_index(self, parent, insert_index); - - // Get the previous input to the post node before inserting the layer - let Some(post_node_input) = self.input_from_connector(&post_node, network_path).cloned() else { - log::error!("Could not get previous input in move_layer_to_stack for parent {parent:?} and insert_index {insert_index}"); - return; - }; - - let Some(previous_layer_position) = self.position(&layer.to_node(), network_path) else { - log::error!("Could not get previous layer position in move_layer_to_stack"); - return; - }; - - let after_move_post_layer_position = if let Some(post_node_id) = post_node.node_id() { - self.position(&post_node_id, network_path) - } else { - Some(IVec2::new(LAYER_INDENT_OFFSET, -STACK_VERTICAL_GAP)) - }; - - let Some(after_move_post_layer_position) = after_move_post_layer_position else { - log::error!("Could not get post node position in move_layer_to_stack"); - return; - }; - - // Get the height of the downstream node if inserting into a stack - let mut downstream_height = 0; - let inserting_into_stack = - !(post_node.input_index() == 1 || matches!(post_node, InputConnector::Export(_)) || !post_node.node_id().is_some_and(|post_node_id| self.is_layer(&post_node_id, network_path))); - if inserting_into_stack && let Some(downstream_node) = post_node.node_id() { - let Some(downstream_node_position) = self.position(&downstream_node, network_path) else { - log::error!("Could not get downstream node position in move_layer_to_stack"); - return; - }; - let mut lowest_y_position = downstream_node_position.y + STACK_VERTICAL_GAP; - - for bottom_position in self.upstream_nodes_below_layer(&downstream_node, network_path).iter().filter_map(|node_id| { - let is_layer = self.is_layer(node_id, network_path); - self.position(node_id, network_path).map(|position| position.y + if is_layer { STACK_VERTICAL_GAP } else { 2 }) - }) { - lowest_y_position = lowest_y_position.max(bottom_position); - } - downstream_height = lowest_y_position - (downstream_node_position.y + STACK_VERTICAL_GAP); - } - - let mut highest_y_position = layer_to_move_position.y; - let mut lowest_y_position = layer_to_move_position.y; - - for (bottom_position, top_position) in self.upstream_nodes_below_layer(&layer.to_node(), network_path).iter().filter_map(|node_id| { - let is_layer = self.is_layer(node_id, network_path); - let bottom_position = self.position(node_id, network_path).map(|position| position.y + if is_layer { STACK_VERTICAL_GAP } else { 2 }); - let top_position = self.position(node_id, network_path).map(|position| if is_layer { position.y - 1 } else { position.y }); - bottom_position.zip(top_position) - }) { - highest_y_position = highest_y_position.min(top_position); - lowest_y_position = lowest_y_position.max(bottom_position); - } - let height_above_layer = layer_to_move_position.y - highest_y_position + downstream_height; - let height_below_layer = lowest_y_position - layer_to_move_position.y - STACK_VERTICAL_GAP; - - // If there is an upstream node in the new location for the layer, create space for the moved layer by shifting the upstream node down - if let Some(upstream_node_id) = post_node_input.as_node() { - // Select the layer to move to ensure the shifting works correctly - let Some(selected_nodes) = self.selected_nodes_mut(network_path) else { - log::error!("Could not get selected nodes in move_layer_to_stack"); - return; - }; - let old_selected_nodes = selected_nodes.replace_with(vec![upstream_node_id]); - - // Create the minimum amount space for the moved layer - for _ in 0..STACK_VERTICAL_GAP { - self.vertical_shift_with_push(&upstream_node_id, 1, &mut HashSet::new(), network_path); - } - - let Some(stack_position) = self.position(&upstream_node_id, network_path) else { - log::error!("Could not get stack position in move_layer_to_stack"); - return; - }; - - let current_gap = stack_position.y - (after_move_post_layer_position.y + 2); - let target_gap = 1 + height_above_layer + 2 + height_below_layer + 1; - - for _ in 0..(target_gap - current_gap).max(0) { - self.vertical_shift_with_push(&upstream_node_id, 1, &mut HashSet::new(), network_path); - } - - let _ = self.selected_nodes_mut(network_path).unwrap().replace_with(old_selected_nodes); - } - - // If true, this node should be inserted before the post node (toward root from the layer), and all outward wires from the pre node should be moved to its output. - let mut insert_node_after_post = false; - - // Connect the layer to a parent layer/node at the top of the stack, or a non layer node midway down the stack - if !inserting_into_stack { - match post_node_input { - // Create a new stack - NodeInput::Value { .. } | NodeInput::Scope(_) | NodeInput::Inline(_) | NodeInput::Reflection(_) => { - self.create_wire(&OutputConnector::node(layer.to_node(), 0), &post_node, network_path); - - let final_layer_position = after_move_post_layer_position + IVec2::new(-LAYER_INDENT_OFFSET, STACK_VERTICAL_GAP); - let shift = final_layer_position - previous_layer_position; - self.shift_absolute_node_position(&layer.to_node(), shift, network_path); - } - // Move to the top of a stack. - NodeInput::Node { node_id, .. } => { - let Some(stack_top_position) = self.position(&node_id, network_path) else { - log::error!("Could not get stack x position in move_layer_to_stack"); - return; - }; - - let final_layer_position = IVec2::new(stack_top_position.x, after_move_post_layer_position.y + STACK_VERTICAL_GAP + height_above_layer); - let shift = final_layer_position - previous_layer_position; - self.shift_absolute_node_position(&layer.to_node(), shift, network_path); - insert_node_after_post = true; - } - NodeInput::Import { .. } => { - log::error!("Cannot move post node to parent which connects to the imports") - } - } - } else { - match post_node_input { - // Move to the bottom of the stack - NodeInput::Value { .. } | NodeInput::Scope(_) | NodeInput::Inline(_) | NodeInput::Reflection(_) => { - let offset = after_move_post_layer_position - previous_layer_position + IVec2::new(0, STACK_VERTICAL_GAP + height_above_layer); - self.shift_absolute_node_position(&layer.to_node(), offset, network_path); - self.create_wire(&OutputConnector::node(layer.to_node(), 0), &post_node, network_path); - } - // Insert into the stack - NodeInput::Node { .. } => { - let final_layer_position = after_move_post_layer_position + IVec2::new(0, STACK_VERTICAL_GAP + height_above_layer); - let shift = final_layer_position - previous_layer_position; - self.shift_absolute_node_position(&layer.to_node(), shift, network_path); - insert_node_after_post = true; - } - NodeInput::Import { .. } => { - log::error!("Cannot move post node to parent which connects to the imports") - } - } - } - - if insert_node_after_post { - self.insert_node_between(&layer.to_node(), &post_node, 0, network_path); - - // Get the other wires which need to be moved to the output of the moved layer - let layer_input_connector = InputConnector::node(layer.to_node(), 0); - let other_outward_wires = self - .upstream_output_connector(&layer_input_connector, network_path) - .and_then(|pre_node_output| self.outward_wires(network_path).and_then(|wires| wires.get(&pre_node_output))) - .map(|other| { - other - .iter() - .filter(|other_input_connector| **other_input_connector != layer_input_connector) - .cloned() - .collect::>() - }) - .unwrap_or_default(); - - // Disconnect and reconnect - for other_outward_wire in &other_outward_wires { - self.disconnect_input(other_outward_wire, network_path); - self.create_wire(&OutputConnector::node(layer.to_node(), 0), other_outward_wire, network_path); - } - } - self.unload_upstream_node_click_targets(vec![layer.to_node()], network_path); - } - - // Insert a node onto a wire. Ensure insert_node_input_index is an exposed input - pub fn insert_node_between(&mut self, node_id: &NodeId, input_connector: &InputConnector, insert_node_input_index: usize, network_path: &[NodeId]) { - if self.number_of_displayed_inputs(node_id, network_path) == 0 { - log::error!("Cannot insert a node onto a wire with no exposed inputs"); - return; - } - - let Some(upstream_output) = self.upstream_output_connector(input_connector, network_path) else { - log::error!("Could not get upstream output in insert_node_between"); - return; - }; - - // Disconnect the previous input - self.disconnect_input(input_connector, network_path); - - // Connect the input connector to the new node - self.create_wire(&OutputConnector::node(*node_id, 0), input_connector, network_path); - - // Connect the new node to the previous node - self.create_wire(&upstream_output, &InputConnector::node(*node_id, insert_node_input_index), network_path); - } - - /// Inserts the freshly-created `node_id` onto the wire feeding `input_connector`: the previous upstream becomes the - /// new node's primary (index 0) input, and the new node feeds `input_connector`. - /// - /// When the wire is part of a layer's encapsulated primary chain, `set_input` chain-positions the new node - /// automatically. On an unencapsulated secondary-input branch (e.g. a 'Fill' node's fill input) chain positioning - /// doesn't apply, so the node would otherwise land at the graph origin; instead it's placed on the displaced - /// upstream node's spot and that whole branch is shifted left (in absolute graph space) to make room. - pub fn insert_node_before_input(&mut self, node_id: &NodeId, input_connector: &InputConnector, network_path: &[NodeId]) { - let feeder = self.upstream_output_connector(input_connector, network_path).and_then(|output| output.node_id()); - - let Some(current_input) = self.input_from_connector(input_connector, network_path).cloned() else { - log::error!("Could not get input in insert_node_before_input"); - return; - }; - - if self.input_from_connector(&InputConnector::node(*node_id, 0), network_path).is_none() { - return; - } - - self.set_input(&InputConnector::node(*node_id, 0), current_input, network_path); - self.set_input(input_connector, NodeInput::node(*node_id, 0), network_path); - - // If `set_input` chain-positioned the node (it joined a layer chain), there's nothing more to do. - if !self.is_absolute(node_id, network_path) { - return; - } - - // Otherwise place the node where the displaced feeder was, then shift the feeder's branch left to make room. - let Some(feeder) = feeder else { return }; - let Some(node_position) = self.position(node_id, network_path) else { return }; - let Some(feeder_position) = self.position(&feeder, network_path) else { return }; - - self.shift_node(node_id, feeder_position - node_position, network_path); - // Deduplicate, since `UpstreamFlow` can yield a shared node more than once and we must shift each node only once. - let upstream_nodes: HashSet = self.upstream_flow_back_from_nodes(vec![feeder], network_path, FlowType::UpstreamFlow).collect(); - for upstream_node in &upstream_nodes { - self.shift_node(upstream_node, IVec2::new(-NODE_CHAIN_WIDTH, 0), network_path); - } - } - - /// Moves a node to the start of a layer chain (feeding into the secondary input of the layer). - /// When `import` is true, uses lightweight wiring that skips `is_acyclic` checks and per-node cache invalidation. - pub fn move_node_to_chain_start(&mut self, node_id: &NodeId, parent: LayerNodeIdentifier, network_path: &[NodeId], import: bool) { - let parent_input = InputConnector::node(parent.to_node(), 1); - let Some(current_input) = self.input_from_connector(&parent_input, network_path).cloned() else { - log::error!("Could not get input for node {node_id}"); - return; - }; - - // Chain is empty: wire the node as the first (and only) entry in the chain - if matches!(current_input, NodeInput::Value { .. }) { - // Wire: [parent] -> [new node] - if import { - self.set_input_for_import(&parent_input, NodeInput::node(*node_id, 0), network_path); - } else { - self.create_wire(&OutputConnector::node(*node_id, 0), &parent_input, network_path); - } - - // Mark this lone node as chain-positioned - self.set_chain_position(node_id, network_path); - } - // Chain already has nodes: splice this node between the parent and the chain's existing final downstream node - else { - // Wire: [parent] -> [new node] -> [existing node] - if import { - self.set_input_for_import(&parent_input, NodeInput::node(*node_id, 0), network_path); - self.set_input_for_import(&InputConnector::node(*node_id, 0), current_input, network_path); - } else { - self.insert_node_between(node_id, &parent_input, 0, network_path); - } - - // Ensure all upstream nodes from here are marked as chain-positioned - self.force_set_upstream_to_chain(node_id, network_path); - } - } - - /// Reorders a node within its layer's horizontal chain so it ends up at `insert_index` among the chain's nodes, - /// where index 0 is the node closest to the layer. The connection feeding the top (most-upstream end) of the chain - /// is preserved, as are each node's other (non-primary) inputs. - pub fn reorder_chain_node(&mut self, node_id: NodeId, insert_index: usize, network_path: &[NodeId]) { - let Some(layer) = self.downstream_layer_for_chain_node(&node_id, network_path) else { - log::error!("Could not find downstream layer for chain node {node_id} in reorder_chain_node"); - return; - }; - - // The nodes in the layer's chain, ordered from closest-to-layer outward, stopping at the next layer - let chain = self - .upstream_flow_back_from_nodes(vec![layer], network_path, FlowType::HorizontalFlow) - .skip(1) - .take_while(|upstream_id| !self.is_layer(upstream_id, network_path)) - .collect::>(); - - // A source node (no primary input) stays pinned at the most-upstream end; only the nodes below it reorder - let pinned_source = chain.last().copied().filter(|last| !self.has_primary_input(last, network_path)); - let reorderable = &chain[..chain.len() - pinned_source.is_some() as usize]; - - let Some(from) = reorderable.iter().position(|id| *id == node_id) else { - log::error!("Node {node_id} is not a reorderable node in its layer's chain in reorder_chain_node"); - return; - }; - - // The drop gap is measured against the reorderable nodes that still include the dragged node, so shift it down by one if the node is being removed from before the gap - let to = (if insert_index > from { insert_index - 1 } else { insert_index }).min(reorderable.len() - 1); - if to == from { - return; - } - - let mut new_order = reorderable.to_vec(); - new_order.remove(from); - new_order.insert(to, node_id); - - // The most-upstream reorderable node connects up to the pinned source, or else whatever fed the top of the chain - let tail_input = if let Some(source) = pinned_source { - NodeInput::node(source, 0) - } else { - let Some(input) = self.input_from_connector(&InputConnector::node(*chain.last().unwrap(), 0), network_path).cloned() else { - log::error!("Could not get the upstream input of the chain in reorder_chain_node"); - return; - }; - input - }; - - // Disconnect first so the rewiring can't transiently form a cycle (the pinned source keeps its wiring) - for &chain_node in reorderable { - self.disconnect_input(&InputConnector::node(chain_node, 0), network_path); - } - - // Rewire in the new order: layer's secondary input -> new_order[0] -> ... -> new_order[last] -> tail input - self.set_input(&InputConnector::node(layer, 1), NodeInput::node(new_order[0], 0), network_path); - for pair in new_order.windows(2) { - self.set_input(&InputConnector::node(pair[0], 0), NodeInput::node(pair[1], 0), network_path); - } - self.set_input(&InputConnector::node(*new_order.last().unwrap(), 0), tail_input, network_path); - - // Re-establish chain positioning for the reordered nodes - self.force_set_upstream_to_chain(&new_order[0], network_path); - } -} - -#[derive(PartialEq)] -pub enum FlowType { - /// Iterate over all upstream nodes (inclusive) from every input (the primary and all secondary). - UpstreamFlow, - /// Iterate over nodes (inclusive) connected to the primary input. - PrimaryFlow, - /// Iterate over the secondary input (inclusive) for layer nodes and primary input for non layer nodes. - HorizontalFlow, - /// Same as horizontal flow, but only iterates over connections to primary outputs - HorizontalPrimaryOutputFlow, - /// Upstream flow starting from the either the node (inclusive) or secondary input of the layer (not inclusive). - LayerChildrenUpstreamFlow, -} -/// Iterate over upstream nodes. The behavior changes based on the `flow_type` that's set. -/// - [`FlowType::UpstreamFlow`]: iterates over all upstream nodes from every input (the primary and all secondary). -/// - [`FlowType::PrimaryFlow`]: iterates along the horizontal inputs of nodes, so in the case of a node chain `a -> b -> c`, this would yield `c, b, a` if we started from `c`. -/// - [`FlowType::HorizontalFlow`]: iterates over the secondary input for layer nodes and primary input for non layer nodes. -/// - [`FlowType::LayerChildrenUpstreamFlow`]: iterates over all upstream nodes from the secondary input of the node. -struct FlowIter<'a> { - stack: Vec, - network: &'a NodeNetwork, - network_metadata: &'a NodeNetworkMetadata, - flow_type: FlowType, -} -impl Iterator for FlowIter<'_> { - type Item = NodeId; - fn next(&mut self) -> Option { - loop { - let node_id = self.stack.pop()?; - - if let (Some(document_node), Some(node_metadata)) = (self.network.nodes.get(&node_id), self.network_metadata.persistent_metadata.node_metadata.get(&node_id)) { - let skip = if matches!(self.flow_type, FlowType::HorizontalFlow | FlowType::HorizontalPrimaryOutputFlow) && node_metadata.persistent_metadata.is_layer() { - 1 - } else { - 0 - }; - let take = if self.flow_type == FlowType::UpstreamFlow { u32::MAX as usize } else { 1 }; - let inputs = document_node.inputs.iter().skip(skip).take(take); - - let node_ids = inputs.filter_map(|input| match input { - NodeInput::Node { output_index, .. } if self.flow_type == FlowType::HorizontalPrimaryOutputFlow && *output_index != 0 => None, - NodeInput::Node { node_id, .. } => Some(node_id), - _ => None, - }); - - self.stack.extend(node_ids); - - return Some(node_id); - } - } - } -} - -#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] -#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)] -pub enum ImportOrExport { - Import(usize), - Export(usize), -} - -/// Represents an input connector with index based on the [`DocumentNode::inputs`] index, not the visible input index -#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] -pub enum InputConnector { - #[serde(rename = "node")] - Node { - #[serde(rename = "nodeId")] - node_id: NodeId, - #[serde(rename = "inputIndex")] - input_index: usize, - }, - #[serde(rename = "export")] - Export(usize), -} - -impl Default for InputConnector { - fn default() -> Self { - InputConnector::Export(0) - } -} - -impl InputConnector { - pub fn node(node_id: NodeId, input_index: usize) -> Self { - InputConnector::Node { node_id, input_index } - } - - pub fn input_index(&self) -> usize { - match self { - InputConnector::Node { input_index, .. } => *input_index, - InputConnector::Export(input_index) => *input_index, - } - } - - pub fn node_id(&self) -> Option { - match self { - InputConnector::Node { node_id, .. } => Some(*node_id), - _ => None, - } - } -} - -/// Represents an output connector -#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] -#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, serde::Serialize, serde::Deserialize)] -pub enum OutputConnector { - #[serde(rename = "node")] - Node { - #[serde(rename = "nodeId")] - node_id: NodeId, - #[serde(rename = "outputIndex")] - output_index: usize, - }, - #[serde(rename = "import")] - Import(usize), -} - -impl Default for OutputConnector { - fn default() -> Self { - OutputConnector::Import(0) - } -} - -impl OutputConnector { - pub fn node(node_id: NodeId, output_index: usize) -> Self { - OutputConnector::Node { node_id, output_index } - } - - pub fn index(&self) -> usize { - match self { - OutputConnector::Node { output_index, .. } => *output_index, - OutputConnector::Import(output_index) => *output_index, - } - } - - pub fn node_id(&self) -> Option { - match self { - OutputConnector::Node { node_id, .. } => Some(*node_id), - _ => None, - } - } - - pub fn from_input(input: &NodeInput) -> Option { - match input { - NodeInput::Import { import_index, .. } => Some(Self::Import(*import_index)), - NodeInput::Node { node_id, output_index, .. } => Some(Self::node(*node_id, *output_index)), - _ => None, - } - } -} - -#[derive(Debug, Clone)] -pub struct Ports { - input_ports: Vec<(usize, ClickTarget)>, - output_ports: Vec<(usize, ClickTarget)>, -} - -impl Default for Ports { - fn default() -> Self { - Self::new() - } -} - -impl Ports { - pub fn new() -> Ports { - Ports { - input_ports: Vec::new(), - output_ports: Vec::new(), - } - } - - pub fn click_targets(&self) -> impl Iterator { - self.input_ports - .iter() - .map(|(_, click_target)| click_target) - .chain(self.output_ports.iter().map(|(_, click_target)| click_target)) - } - - pub fn input_ports(&self) -> impl Iterator { - self.input_ports.iter() - } - - pub fn output_ports(&self) -> impl Iterator { - self.output_ports.iter() - } - - fn insert_input_port_at_center(&mut self, input_index: usize, center: DVec2) { - let subpath = Subpath::new_ellipse(center - DVec2::new(8., 8.), center + DVec2::new(8., 8.)); - self.insert_custom_input_port(input_index, ClickTarget::new_with_subpath(subpath, 0.)); - } - - fn insert_custom_input_port(&mut self, input_index: usize, click_target: ClickTarget) { - self.input_ports.push((input_index, click_target)); - } - - fn insert_output_port_at_center(&mut self, output_index: usize, center: DVec2) { - let subpath = Subpath::new_ellipse(center - DVec2::new(8., 8.), center + DVec2::new(8., 8.)); - self.insert_custom_output_port(output_index, ClickTarget::new_with_subpath(subpath, 0.)); - } - - fn insert_custom_output_port(&mut self, output_index: usize, click_target: ClickTarget) { - self.output_ports.push((output_index, click_target)); - } - - fn insert_node_input(&mut self, input_index: usize, row_index: usize, node_top_left: DVec2) { - // The center of the click target is always 24 px down from the top left corner of the node - let center = node_top_left + DVec2::new(0., 24. + 24. * row_index as f64); - self.insert_input_port_at_center(input_index, center); - } - - fn insert_node_output(&mut self, output_index: usize, node_top_left: DVec2) { - // The center of the click target is always 24 px down from the top left corner of the node - let center = node_top_left + DVec2::new(5. * 24., 24. + 24. * output_index as f64); - self.insert_output_port_at_center(output_index, center); - } - - fn insert_layer_input(&mut self, input_index: usize, node_top_left: DVec2) { - let center = if input_index == 0 { - node_top_left + DVec2::new(2. * 24., 24. * 2. + 8.) - } else { - node_top_left + DVec2::new(0., 24. * 1.) - }; - self.insert_input_port_at_center(input_index, center); - } - - fn insert_layer_output(&mut self, node_top_left: DVec2) { - // The center of the click target is always 24 px down from the top left corner of the node - let center = node_top_left + DVec2::new(2. * 24., -8.); - self.insert_output_port_at_center(0, center); - } - - pub fn clicked_input_port_from_point(&self, point: DVec2) -> Option { - self.input_ports.iter().find_map(|(port, click_target)| click_target.intersect_point_no_stroke(point).then_some(*port)) - } - - pub fn clicked_output_port_from_point(&self, point: DVec2) -> Option { - self.output_ports.iter().find_map(|(port, click_target)| click_target.intersect_point_no_stroke(point).then_some(*port)) - } - - pub fn input_port_position(&self, index: usize) -> Option { - self.input_ports.iter().find_map(|(port_index, click_target)| { - if *port_index == index { - click_target.bounding_box().map(|bounds| bounds[0] + DVec2::new(8., 8.)) - } else { - None - } - }) - } - - pub fn output_port_position(&self, index: usize) -> Option { - self.output_ports.iter().find_map(|(port_index, click_target)| { - if *port_index == index { - click_target.bounding_box().map(|bounds| bounds[0] + DVec2::new(8., 8.)) - } else { - None - } - }) - } -} - -#[derive(PartialEq, Debug, Clone, Copy, Hash, Default, serde::Serialize, serde::Deserialize)] -pub struct RootNode { - pub node_id: NodeId, - pub output_index: usize, -} - -impl RootNode { - pub fn to_connector(&self) -> OutputConnector { - OutputConnector::Node { - node_id: self.node_id, - output_index: self.output_index, - } - } -} - -#[derive(PartialEq, Debug, Clone, Copy, Hash, Default, serde::Serialize, serde::Deserialize)] -pub enum Previewing { - /// If there is a node to restore the connection to the export for, then it is stored in the option. - /// Otherwise, nothing gets restored and the primary export is disconnected. - Yes { root_node_to_restore: Option }, - #[default] - No, -} - -/// All fields in NetworkMetadata should automatically be updated by using the network interface API. If a field is none then it should be calculated based on the network state. -#[derive(Debug, Default, serde::Serialize, serde::Deserialize)] -pub struct NodeNetworkMetadata { - pub persistent_metadata: NodeNetworkPersistentMetadata, - #[serde(skip)] - pub transient_metadata: NodeNetworkTransientMetadata, -} - -impl Clone for NodeNetworkMetadata { - fn clone(&self) -> Self { - NodeNetworkMetadata { - persistent_metadata: self.persistent_metadata.clone(), - transient_metadata: Default::default(), - } - } -} - -impl PartialEq for NodeNetworkMetadata { - fn eq(&self, other: &Self) -> bool { - self.persistent_metadata == other.persistent_metadata - } -} - -impl NodeNetworkMetadata { - pub fn nested_metadata(&self, nested_path: &[NodeId]) -> Option<&Self> { - let mut network_metadata = Some(self); - - for segment in nested_path { - network_metadata = network_metadata - .and_then(|network| network.persistent_metadata.node_metadata.get(segment)) - .and_then(|node| node.persistent_metadata.network_metadata.as_ref()); - } - network_metadata - } - - /// Get the mutable nested network given by the path of node ids - pub fn nested_metadata_mut(&mut self, nested_path: &[NodeId]) -> Option<&mut Self> { - let mut network_metadata = Some(self); - - for segment in nested_path { - network_metadata = network_metadata - .and_then(|network: &mut NodeNetworkMetadata| network.persistent_metadata.node_metadata.get_mut(segment)) - .and_then(|node| node.persistent_metadata.network_metadata.as_mut()); - } - network_metadata - } -} - -#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct NodeNetworkPersistentMetadata { - /// The identifier for the node definition created for custom network nodes in [`DocumentNodeDefinition`]. - /// It is only used to associate network nodes with their definition. Protonodes use their ProtonodeIdentifier. - /// The reference is removed once the node is modified, since the node now stores its own implementation and inputs. - /// TODO: Used during serialization/deserialization to prevent storing implementation or inputs (and possible other fields) if they are the same as the definition. - /// TODO: Implement node versioning so that references to old nodes can be updated to the new node definition. - pub reference: Option, - /// Node metadata must exist for every document node in the network - #[serde(serialize_with = "graphene_std::vector::serialize_hashmap", deserialize_with = "graphene_std::vector::deserialize_hashmap")] - pub node_metadata: HashMap, - /// The display order of pinned nodes in the Properties panel (shown when nothing is selected in this network), keyed by node ID. - #[serde(default)] - pub pinned_node_order: Vec, - /// Cached metadata for each node, which is calculated when adding a node to node_metadata - /// Indicates whether the network is currently rendered with a particular node that is previewed, and if so, which connection should be restored when the preview ends. - pub previewing: Previewing, - // Stores the transform and navigation state for the network - pub navigation_metadata: NavigationMetadata, - /// Stack of selection snapshots for previous history states. - // TODO: Use `#[serde(skip)]` here instead? @TrueDoctor claims this isn't valid but hasn't satisfactorily explained how it differs from the situation where `#[serde(default)]` fills in the default value. From brief testing, skip seems to work without issue. - #[serde(default)] - pub selection_undo_history: VecDeque, - /// Stack of selection snapshots for future history states. - // TODO: Use `#[serde(skip)]` here instead? See above. - #[serde(default)] - pub selection_redo_history: VecDeque, -} - -/// This is the same as Option, but more clear in the context of having cached metadata either being loaded or unloaded -#[derive(Debug, Default, Clone)] -pub enum TransientMetadata { - Loaded(T), - #[default] - Unloaded, -} - -impl TransientMetadata { - /// Set the current transient metadata to unloaded - pub fn unload(&mut self) { - *self = TransientMetadata::Unloaded; - } - - pub fn is_loaded(&self) -> bool { - matches!(self, TransientMetadata::Loaded(_)) - } -} - -/// If some network calculation is too slow to compute for every usage, cache the data here -#[derive(Debug, Default, Clone)] -pub struct NodeNetworkTransientMetadata { - pub selected_nodes: SelectedNodes, - /// Sole dependents of the top of the stacks of all selected nodes. Used to determine which nodes are checked for collision when shifting. - /// The LayerOwner is used to determine whether the collided node should be shifted, or the layer that owns it. - pub stack_dependents: TransientMetadata>, - /// Cache for the bounding box around all nodes in node graph space. - pub all_nodes_bounding_box: TransientMetadata<[DVec2; 2]>, - // /// Cache bounding box for all "groups of nodes", which will be used to prevent overlapping nodes - // node_group_bounding_box: Vec<(Subpath, Vec)>, - /// Cache for all outward wire connections - pub outward_wires: TransientMetadata>>, - /// All export connector click targets - pub import_export_ports: TransientMetadata, - /// Click targets for adding, removing, and moving import/export ports - pub modify_import_export: TransientMetadata, - - // Wires from the exports - pub wires: Vec>, -} - -#[derive(Debug, Clone)] -pub struct ModifyImportExportClickTarget { - // Subtract icon that appears when hovering over an import/export - pub remove_imports_exports: Ports, - // Grip drag icon that appears when hovering over an import/export - pub reorder_imports_exports: Ports, -} - -#[derive(Debug, Clone)] -pub struct NetworkEdgeDistance { - /// The viewport pixel distance between the left edge of the node graph and the exports. - pub exports_to_edge_distance: DVec2, - /// The viewport pixel distance between the left edge of the node graph and the imports. - pub imports_to_edge_distance: DVec2, -} - -#[derive(Debug, Clone)] -pub enum LayerOwner { - // Used to get the layer that should be shifted when there is a collision. - Layer(NodeId), - // The vertical offset of a node from the start of its shift. Should be reset when the drag ends. - None(i32), -} - -#[derive(Debug, Default, serde::Serialize, serde::Deserialize)] -pub struct DocumentNodeMetadata { - #[serde(deserialize_with = "deserialize_node_persistent_metadata")] - pub persistent_metadata: DocumentNodePersistentMetadata, - #[serde(skip)] - pub transient_metadata: DocumentNodeTransientMetadata, -} - -impl Clone for DocumentNodeMetadata { - fn clone(&self) -> Self { - DocumentNodeMetadata { - persistent_metadata: self.persistent_metadata.clone(), - transient_metadata: Default::default(), - } - } -} - -impl PartialEq for DocumentNodeMetadata { - fn eq(&self, other: &Self) -> bool { - self.persistent_metadata == other.persistent_metadata - } -} - -#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] -pub struct NumberInputSettings { - pub unit: Option, - pub min: Option, - pub max: Option, - pub step: Option, - pub mode: NumberInputMode, - pub range_min: Option, - pub range_max: Option, - pub is_integer: bool, - pub blank_assist: bool, -} - -impl Default for NumberInputSettings { - fn default() -> Self { - NumberInputSettings { - unit: None, - min: None, - max: None, - step: None, - mode: NumberInputMode::default(), - range_min: None, - range_max: None, - is_integer: false, - blank_assist: true, - } - } -} - -#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)] -pub struct Vec2InputSettings { - pub x: String, - pub y: String, - pub unit: String, - pub min: Option, - pub is_integer: bool, -} - -#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] -pub enum WidgetOverride { - None, - Hidden, - String(String), - Number(NumberInputSettings), - Vec2(Vec2InputSettings), - Custom(String), -} - -// TODO: Custom deserialization/serialization to ensure number of properties row matches number of node inputs -#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct InputPersistentMetadata { - /// A general datastore than can store key value pairs of any types for any input - /// Each instance of the input node needs to store its own data, since it can lose the reference to its - /// node definition if the node signature is modified by the user. For example adding/removing/renaming an import/export of a network node. - #[serde(serialize_with = "graphene_std::vector::serialize_hashmap_as_sorted_object")] - pub input_data: HashMap, - // An input can override a widget, which would otherwise be automatically generated from the type - // The string is the identifier to the widget override function stored in INPUT_OVERRIDES - pub widget_override: Option, - /// An empty input name means to use the type as the name. - pub input_name: String, - /// Displayed as the tooltip description. - pub input_description: String, -} - -impl InputPersistentMetadata { - pub fn with_name(mut self, input_name: &str) -> Self { - self.input_name = input_name.to_string(); - self - } - pub fn with_override(mut self, widget_override: WidgetOverride) -> Self { - match widget_override { - // Uses the default widget for the type - WidgetOverride::None => { - self.widget_override = None; - } - WidgetOverride::Hidden => { - self.widget_override = Some("hidden".to_string()); - } - WidgetOverride::String(string_properties) => { - self.input_data.insert("string_properties".to_string(), Value::String(string_properties)); - self.widget_override = Some("string".to_string()); - } - WidgetOverride::Number(mut number_properties) => { - if let Some(unit) = number_properties.unit.take() { - self.input_data.insert("unit".to_string(), json!(unit)); - } - if let Some(min) = number_properties.min.take() { - self.input_data.insert("min".to_string(), json!(min)); - } - if let Some(max) = number_properties.max.take() { - self.input_data.insert("max".to_string(), json!(max)); - } - if let Some(step) = number_properties.step.take() { - self.input_data.insert("step".to_string(), json!(step)); - } - if let Some(range_min) = number_properties.range_min.take() { - self.input_data.insert("range_min".to_string(), json!(range_min)); - } - if let Some(range_max) = number_properties.range_max.take() { - self.input_data.insert("range_max".to_string(), json!(range_max)); - } - self.input_data.insert("mode".to_string(), json!(number_properties.mode)); - self.input_data.insert("is_integer".to_string(), Value::Bool(number_properties.is_integer)); - self.input_data.insert("blank_assist".to_string(), Value::Bool(number_properties.blank_assist)); - self.widget_override = Some("number".to_string()); - } - WidgetOverride::Vec2(vec2_properties) => { - self.input_data.insert("x".to_string(), json!(vec2_properties.x)); - self.input_data.insert("y".to_string(), json!(vec2_properties.y)); - self.input_data.insert("unit".to_string(), json!(vec2_properties.unit)); - self.input_data.insert("is_integer".to_string(), Value::Bool(vec2_properties.is_integer)); - if let Some(min) = vec2_properties.min { - self.input_data.insert("min".to_string(), json!(min)); - } - self.widget_override = Some("vec2".to_string()); - } - WidgetOverride::Custom(lambda_name) => { - self.widget_override = Some(lambda_name); - } - }; - self - } - - pub fn with_description(mut self, description: &str) -> Self { - self.input_description = description.to_string(); - self - } -} - -#[derive(Debug, Clone, Default)] -struct InputTransientMetadata { - wire: TransientMetadata, - // downstream_protonode: populated for all inputs after each compile - // types: populated for each protonode after each -} - -/// Persistent metadata for each node in the network, which must be included when creating, serializing, and deserializing saving a node. -#[derive(Default, Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -#[serde(deny_unknown_fields)] -pub struct DocumentNodePersistentMetadata { - /// A name chosen by the user for this instance of the node. Empty indicates no given name, in which case the implementation name is displayed to the user in italics. - #[serde(default)] - pub display_name: String, - /// Stores metadata to override the properties in the properties panel for each input. These can either be generated automatically based on the type, or with a custom function. - /// Must match the length of node inputs - pub input_metadata: Vec, - pub output_names: Vec, - /// Represents the lock icon for locking/unlocking the node in the graph UI. When locked, a node cannot be moved in the graph UI. - #[serde(default)] - pub locked: bool, - /// Indicates that the node will be shown in the Properties panel when it would otherwise be empty, letting a user easily edit its properties by just deselecting everything. - #[serde(default)] - pub pinned: bool, - /// Metadata that is specific to either nodes or layers, which are chosen states for displaying as a left-to-right node or bottom-to-top layer. - /// All fields in NodeTypePersistentMetadata should automatically be updated by using the network interface API - pub node_type_metadata: NodeTypePersistentMetadata, - /// This should always be Some for nodes with a [`DocumentNodeImplementation::Network`], and none for [`DocumentNodeImplementation::ProtoNode`] - pub network_metadata: Option, -} - -impl DocumentNodePersistentMetadata { - pub fn is_layer(&self) -> bool { - matches!(self.node_type_metadata, NodeTypePersistentMetadata::Layer(_)) - } -} - -#[derive(Debug, Default, serde::Serialize, serde::Deserialize)] -pub struct InputMetadata { - pub persistent_metadata: InputPersistentMetadata, - #[serde(skip)] - transient_metadata: InputTransientMetadata, -} - -impl Clone for InputMetadata { - fn clone(&self) -> Self { - InputMetadata { - persistent_metadata: self.persistent_metadata.clone(), - transient_metadata: Default::default(), - } - } -} - -impl PartialEq for InputMetadata { - fn eq(&self, other: &Self) -> bool { - self.persistent_metadata == other.persistent_metadata - } -} - -impl From<(&str, &str)> for InputMetadata { - fn from(input_name_and_description: (&str, &str)) -> Self { - InputMetadata { - persistent_metadata: InputPersistentMetadata::default() - .with_name(input_name_and_description.0) - .with_description(input_name_and_description.1), - ..Default::default() - } - } -} - -impl InputMetadata { - pub fn with_name_description_override(input_name: &str, description: &str, widget_override: WidgetOverride) -> Self { - InputMetadata { - persistent_metadata: InputPersistentMetadata::default().with_name(input_name).with_description(description).with_override(widget_override), - ..Default::default() - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -pub enum NodeTypePersistentMetadata { - Layer(LayerPersistentMetadata), - Node(NodePersistentMetadata), -} - -impl Default for NodeTypePersistentMetadata { - fn default() -> Self { - NodeTypePersistentMetadata::node(IVec2::ZERO) - } -} - -impl NodeTypePersistentMetadata { - pub fn node(position: IVec2) -> NodeTypePersistentMetadata { - NodeTypePersistentMetadata::Node(NodePersistentMetadata { - position: NodePosition::Absolute(position), - }) - } - pub fn layer(position: IVec2) -> NodeTypePersistentMetadata { - NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { - position: LayerPosition::Absolute(position), - owned_nodes: TransientMetadata::default(), - }) - } -} - -/// All fields in LayerMetadata should automatically be updated by using the network interface API -#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] -pub struct LayerPersistentMetadata { - // TODO: Store click target for the preview button, which will appear when the node is a selected/(hovered?) layer node - // preview_click_target: Option, - /// Stores the position of a layer node, which can either be Absolute or Stack - pub position: LayerPosition, - /// All nodes that should be moved when the layer is moved. - #[serde(skip)] - pub owned_nodes: TransientMetadata>, -} - -impl PartialEq for LayerPersistentMetadata { - fn eq(&self, other: &Self) -> bool { - self.position == other.position - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct NodePersistentMetadata { - /// Stores the position of a non layer node, which can either be Absolute or Chain - position: NodePosition, -} - -impl NodePersistentMetadata { - pub fn new(position: NodePosition) -> Self { - Self { position } - } - pub fn position(&self) -> &NodePosition { - &self.position - } -} - -/// A layer can either be position as Absolute or in a Stack -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -pub enum LayerPosition { - // Position of the node in grid spaces - Absolute(IVec2), - // A layer is in a Stack when it feeds into the bottom input of a layer. The Y position stores the vertical distance between the layer and its upstream sibling/parent. - Stack(u32), -} - -/// A node can either be position as Absolute or in a Chain -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -pub enum NodePosition { - // Position of the node in grid spaces - Absolute(IVec2), - // In a chain the position is based on the number of nodes to the first layer node - Chain, -} - -/// Cached metadata that should be calculated when creating a node, and should be recalculated when modifying a node property that affects one of the cached fields. -#[derive(Debug, Default, Clone)] -pub struct DocumentNodeTransientMetadata { - // The click targets are stored as a single struct since it is very rare for only one to be updated, and recomputing all click targets in one function is more efficient than storing them separately. - pub click_targets: TransientMetadata, - // Metadata that is specific to either nodes or layers, which are chosen states for displaying as a left-to-right node or bottom-to-top layer. - pub node_type_metadata: NodeTypeTransientMetadata, -} - -#[derive(Debug, Clone)] -pub struct DocumentNodeClickTargets { - /// In order to keep the displayed position of the node in sync with the click target, the displayed position of a node is derived from the top left of the click target - /// Ensure node_click_target is kept in sync when modifying a node property that changes its size. Currently this is alias, inputs, is_layer, and metadata - pub node_click_target: ClickTarget, - /// Stores all port click targets in node graph space. - pub port_click_targets: Ports, - // Click targets that are specific to either nodes or layers, which are chosen states for displaying as a left-to-right node or bottom-to-top layer. - pub node_type_metadata: NodeTypeClickTargets, -} - -#[derive(Debug, Default, Clone)] -pub enum NodeTypeTransientMetadata { - Layer(LayerTransientMetadata), - #[default] - Node, // No transient data is stored exclusively for nodes -} - -#[derive(Debug, Default, Clone)] -pub struct LayerTransientMetadata { - // Stores the width in grid units for layer nodes from the left edge of the thumbnail (+12px padding since thumbnail ends between grid spaces) to the left end of the node - /// This is necessary since calculating the layer width through web_sys is very slow - pub layer_width: TransientMetadata, - // Should not be a performance concern to calculate when needed with chain_width. - // Stores the width in grid units for layer nodes from the left edge of the thumbnail to the end of the chain - // chain_width: u32, -} - -#[derive(Debug, Clone)] -pub enum NodeTypeClickTargets { - Layer(LayerClickTargets), - Node, // No transient click targets are stored exclusively for nodes -} - -/// All fields in TransientLayerMetadata should automatically be updated by using the network interface API -#[derive(Debug, Clone)] -pub struct LayerClickTargets { - /// Cache for all visibility buttons. Should be automatically updated when update_click_target is called - pub visibility_click_target: ClickTarget, - /// Cache for the lock icon button, only present when the layer is locked. - pub lock_click_target: Option, - /// Cache for the grip icon, which is next to the visibility button. - pub grip_click_target: ClickTarget, - /// Cache for the layer's display-name text bounds. Used to detect double-click rename and - /// to skip the drill-into-subgraph behavior when the click lands on the name itself. - /// `None` for layers whose display name is empty. - pub name_click_target: Option, - // TODO: Store click target for the preview button, which will appear when the node is a selected/(hovered?) layer node - // preview_click_target: ClickTarget, -} - -pub enum LayerClickTargetTypes { - Visibility, - Lock, - Grip, - Name, - // Preview, -} - -#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct NavigationMetadata { - /// The current pan, and zoom state of the viewport's view of the node graph. - /// Ensure `DocumentMessage::UpdateDocumentTransform` is called when the pan, zoom, or transform changes. - pub node_graph_ptz: PTZ, - // TODO: Eventually remove once te click targets are extracted from the native render - /// Transform from node graph space to viewport space. - pub node_graph_to_viewport: DAffine2, - // TODO: Eventually remove once the import/export positions are extracted from the native render - /// The width of the node graph in viewport space - #[serde(default)] - pub node_graph_width: f64, -} - -// PartialEq required by message handlers -/// All persistent editor and Graphene data for a node. Used to serialize and deserialize a node, pass it through the editor, and create definitions. -#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct NodeTemplate { - pub document_node: DocumentNode, - pub persistent_node_metadata: DocumentNodePersistentMetadata, -} - -#[derive(Clone, Copy, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)] -pub enum TransactionStatus { - Started, - Modified, - #[default] - Finished, -} - -fn collect_network_resources(network: &NodeNetwork, out: &mut HashSet) { - for node in network.nodes.values() { - collect_node_resources(node, out); - } -} - -/// Collects resource IDs referenced by a node and its nested networks. -pub fn collect_node_resources(node: &DocumentNode, out: &mut HashSet) { - for input in &node.inputs { - if let NodeInput::Value { tagged_value, .. } = input - && let TaggedValue::Resource(id) = &**tagged_value - { - out.insert(*id); - } - } - if let DocumentNodeImplementation::Network(nested) = &node.implementation { - collect_network_resources(nested, out); - } -} - #[cfg(test)] mod network_interface_tests { use crate::test_utils::test_prelude::*; diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/caches.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/caches.rs new file mode 100644 index 0000000000..6a96ec85bb --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/caches.rs @@ -0,0 +1,1258 @@ +use super::*; + +// Public mutable getters for data that involves transient network metadata +// Mutable methods never recalculate the transient metadata, they only unload it. Loading metadata should only be done by the getter. +impl NodeNetworkInterface { + pub fn start_transaction(&mut self) { + self.transaction_status = TransactionStatus::Started; + } + + pub fn transaction_modified(&mut self) { + if self.transaction_status == TransactionStatus::Started { + self.transaction_status = TransactionStatus::Modified; + } + } + + pub fn finish_transaction(&mut self) { + self.transaction_status = TransactionStatus::Finished; + } + + /// Mutably get the selected nodes for the network at the network_path. Every time they are mutated, the transient metadata for the top of the stack gets unloaded. + pub fn selected_nodes_mut(&mut self, network_path: &[NodeId]) -> Option<&mut SelectedNodes> { + let (last_selection_state, prev_state, is_selection_empty) = { + let network_metadata = self.network_metadata(network_path)?; + let history = &network_metadata.persistent_metadata.selection_undo_history; + let current = history.back().cloned().unwrap_or_default(); + let previous = history.iter().rev().nth(1).cloned(); + let empty = current.selected_layers_except_artboards(self).next().is_none(); + (current, previous, empty) + }; + self.unload_stack_dependents(network_path); + + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in selected_nodes"); + return None; + }; + + // Initialize default value if selection_undo_history is empty + if network_metadata.persistent_metadata.selection_undo_history.is_empty() { + network_metadata.persistent_metadata.selection_undo_history.push_back(SelectedNodes::default()); + } + + // Update history only if selection is non-empty/does not contain only artboards + if !is_selection_empty && prev_state.as_ref() != Some(&last_selection_state) { + network_metadata.persistent_metadata.selection_undo_history.push_back(last_selection_state); + network_metadata.persistent_metadata.selection_redo_history.clear(); + + if network_metadata.persistent_metadata.selection_undo_history.len() > crate::consts::MAX_UNDO_HISTORY_LEN { + network_metadata.persistent_metadata.selection_undo_history.pop_front(); + } + } + + network_metadata.persistent_metadata.selection_undo_history.back_mut() + } + + pub fn selection_step_back(&mut self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in selection_step_back"); + return; + }; + + if let Some(selection_state) = network_metadata.persistent_metadata.selection_undo_history.pop_back() { + network_metadata.persistent_metadata.selection_redo_history.push_front(selection_state); + } + } + + pub fn selection_step_forward(&mut self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in selection_step_forward"); + return; + }; + + if let Some(selection_state) = network_metadata.persistent_metadata.selection_redo_history.pop_front() { + network_metadata.persistent_metadata.selection_undo_history.push_back(selection_state); + } + } + + pub(crate) fn stack_dependents(&mut self, network_path: &[NodeId]) -> Option<&HashMap> { + self.try_load_stack_dependents(network_path); + self.try_get_stack_dependents(network_path) + } + + pub(crate) fn try_load_stack_dependents(&self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in stack_dependents"); + return; + }; + + if !network_metadata.transient_metadata.stack_dependents.is_loaded() { + self.load_stack_dependents(network_path); + } + } + + /// Reads the stack dependents through &self if they are already loaded. + pub(crate) fn with_stack_dependents_if_loaded(&self, network_path: &[NodeId], read: impl FnOnce(&HashMap) -> R) -> Option { + self.network_metadata(network_path)?.transient_metadata.stack_dependents.with_loaded(read) + } + + pub(crate) fn try_get_stack_dependents(&mut self, network_path: &[NodeId]) -> Option<&HashMap> { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in try_get_stack_dependents"); + return None; + }; + let Some(stack_dependents) = network_metadata.transient_metadata.stack_dependents.get_loaded_mut() else { + log::error!("could not load stack_dependents"); + return None; + }; + Some(stack_dependents) + } + + // This function always has to be in sync with the selected nodes. + fn load_stack_dependents(&self, network_path: &[NodeId]) { + let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { + log::error!("Could not get selected nodes in load_stack_dependents"); + return; + }; + self.load_stack_dependents_for_nodes(selected_nodes.selected_nodes().cloned().collect(), network_path); + } + + /// Builds the stack dependents as if `seed_nodes` were the selection, for shifts driven by a node set other than the selection. + pub(crate) fn load_stack_dependents_for_nodes(&self, seed_nodes: Vec, network_path: &[NodeId]) { + let mut selected_layers = seed_nodes.iter().filter(|node_id| self.is_layer(node_id, network_path)).copied().collect::>(); + + // Deselect all layers that are upstream of other selected layers + let mut removed_layers = Vec::new(); + for layer in selected_layers.clone() { + if removed_layers.contains(&layer) { + continue; + } + for upstream_node in self.upstream_flow_back_from_nodes(vec![layer], network_path, FlowType::UpstreamFlow).skip(1) { + if selected_layers.remove(&upstream_node) { + removed_layers.push(upstream_node) + } + } + } + + // Get a unique list of the top of each stack for each layer + let mut stack_tops = HashSet::new(); + + for layer in &selected_layers { + let mut current_node = *layer; + loop { + if self.is_layer(¤t_node, network_path) && self.is_absolute(¤t_node, network_path) { + stack_tops.insert(current_node); + break; + }; + let Some(first_downstream_input) = self.with_outward_wires(network_path, |outward_wires| { + outward_wires + .get(&OutputConnector::primary_output(current_node)) + .map(|layer_outward_wires| layer_outward_wires.first().copied()) + }) else { + log::error!("Cannot load outward wires in load_stack_dependents"); + return; + }; + let Some(first_downstream_input) = first_downstream_input else { + log::error!("Could not get outward_wires for layer {current_node}"); + break; + }; + match first_downstream_input { + Some(downstream_input) => { + let Some(downstream_node) = downstream_input.node_id() else { + log::error!("Node connected to export should be absolute"); + break; + }; + current_node = downstream_node + } + None => break, + } + } + } + + let mut stack_dependents = HashMap::new(); + let mut owned_sole_dependents = HashSet::new(); + // Loop through all layers below the stack_tops, and set sole dependents upstream from that layer to be owned by that layer. Ensure LayerOwner is kept in sync. + for stack_top in &stack_tops { + for upstream_stack_layer in self + .upstream_flow_back_from_nodes(vec![*stack_top], network_path, FlowType::PrimaryFlow) + .take_while(|upstream_node| self.is_layer(upstream_node, network_path)) + .collect::>() + { + for upstream_layer in self.upstream_flow_back_from_nodes(vec![upstream_stack_layer], network_path, FlowType::UpstreamFlow).collect::>() { + if !self.is_layer(&upstream_layer, network_path) { + continue; + } + let mut new_owned_nodes = HashSet::new(); + for layer_sole_dependent in &self.upstream_nodes_below_layer(&upstream_layer, network_path) { + stack_dependents.insert(*layer_sole_dependent, LayerOwner::Layer(upstream_layer)); + owned_sole_dependents.insert(*layer_sole_dependent); + new_owned_nodes.insert(*layer_sole_dependent); + } + let Some(layer_node) = self.node_metadata(&upstream_layer, network_path) else { + log::error!("Could not get layer node in load_stack_dependents"); + continue; + }; + layer_node.transient_metadata.owned_nodes.store(new_owned_nodes); + } + } + } + + // Set any sole dependents of the stack top that are not dependents of a layer in the stack to LayerOwner::None. These nodes will be pushed as blocks when a layer is shifted. + for stack_top in &stack_tops { + let mut sole_dependents = HashSet::new(); + let mut not_sole_dependents = HashSet::new(); + sole_dependents.insert(*stack_top); + for upstream_node in self.upstream_flow_back_from_nodes(vec![*stack_top], network_path, FlowType::UpstreamFlow).collect::>() { + if sole_dependents.contains(&upstream_node) || not_sole_dependents.contains(&upstream_node) { + continue; + } + + // A path terminates at an already-verified sole dependent, and fails fast through a known non-sole node + let is_sole_dependent = self.is_sole_dependent(upstream_node, network_path, |downstream_node, _| { + if not_sole_dependents.contains(&downstream_node) { + SoleDependentStep::Escape + } else if sole_dependents.contains(&downstream_node) { + SoleDependentStep::Terminate + } else { + SoleDependentStep::Continue + } + }); + + if is_sole_dependent { + sole_dependents.insert(upstream_node); + } else { + not_sole_dependents.insert(upstream_node); + } + } + + for sole_dependent in sole_dependents { + if !owned_sole_dependents.contains(&sole_dependent) { + stack_dependents.insert(sole_dependent, LayerOwner::None); + } + } + } + + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get current network in load_stack_dependents"); + return; + }; + + network_metadata.transient_metadata.stack_dependents.store(stack_dependents); + } + + pub fn unload_stack_dependents(&mut self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in unload_stack_dependents"); + return; + }; + network_metadata.transient_metadata.stack_dependents.unload(); + + // Drag offsets are only meaningful relative to the stack dependents snapshot they were accumulated against, so they must not outlive it + network_metadata.transient_metadata.drag_offsets.borrow_mut().clear(); + } + + /// The vertical distance the node has been pushed from its resting position during the current drag. + pub(crate) fn drag_offset(&self, node_id: &NodeId, network_path: &[NodeId]) -> i32 { + self.network_metadata(network_path) + .map_or(0, |network_metadata| network_metadata.transient_metadata.drag_offsets.borrow().get(node_id).copied().unwrap_or(0)) + } + + pub(crate) fn add_drag_offset(&self, node_id: &NodeId, delta: i32, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in add_drag_offset"); + return; + }; + *network_metadata.transient_metadata.drag_offsets.borrow_mut().entry(*node_id).or_insert(0) += delta; + } + + /// Discards all drag offsets when the drag ends. + pub fn clear_drag_offsets(&self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in clear_drag_offsets"); + return; + }; + network_metadata.transient_metadata.drag_offsets.borrow_mut().clear(); + } + + pub fn import_export_ports(&mut self, network_path: &[NodeId]) -> Option<&Ports> { + self.try_load_import_export_ports(network_path); + + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in export_ports"); + return None; + }; + let Some(ports) = network_metadata.transient_metadata.import_export_ports.get_loaded_mut() else { + log::error!("could not load import ports"); + return None; + }; + Some(ports) + } + + /// Reads the import/export ports through &self, loading them first if needed. + pub(crate) fn with_import_export_ports(&self, network_path: &[NodeId], read: impl FnOnce(&Ports) -> R) -> Option { + self.try_load_import_export_ports(network_path); + self.network_metadata(network_path)?.transient_metadata.import_export_ports.with_loaded(read) + } + + fn try_load_import_export_ports(&self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in export_ports"); + return; + }; + if !network_metadata.transient_metadata.import_export_ports.is_loaded() { + self.load_import_export_ports(network_path); + } + } + + pub fn load_import_export_ports(&self, network_path: &[NodeId]) { + let Some(import_export_position) = self.import_export_position(network_path) else { + log::error!("Could not get import_export_position"); + return; + }; + let Some(network) = self.nested_network(network_path) else { return }; + let mut import_export_ports = Ports::new(); + + if !network_path.is_empty() { + let import_start_index = if self.hidden_primary_import(network_path) { 1 } else { 0 }; + for import_index in import_start_index..self.number_of_imports(network_path) { + import_export_ports.insert_output_port_at_center(import_index, import_export_position.0.as_dvec2() + DVec2::new(0., import_index as f64 * 24.)); + } + } + + let export_start_index = if self.hidden_primary_export(network_path) { 1 } else { 0 }; + for export_index in export_start_index..network.exports.len() { + import_export_ports.insert_input_port_at_center(export_index, import_export_position.1.as_dvec2() + DVec2::new(0., export_index as f64 * 24.)); + } + + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get current network in load_export_ports"); + return; + }; + + network_metadata.transient_metadata.import_export_ports.store(import_export_ports); + } + + pub(crate) fn unload_import_export_ports(&mut self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in unload_export_ports"); + return; + }; + network_metadata.transient_metadata.import_export_ports.unload(); + + // Always unload all wires connected to them as well + let number_of_imports = self.number_of_imports(network_path); + let Some(outward_wires) = self.outward_wires(network_path) else { + log::error!("Could not get outward wires in remove_import"); + return; + }; + let mut input_connectors = Vec::new(); + for import_index in 0..number_of_imports { + let Some(outward_wires_for_import) = outward_wires.get(&OutputConnector::Import(import_index)).cloned() else { + log::error!("Could not get outward wires for import in remove_import"); + return; + }; + input_connectors.extend(outward_wires_for_import); + } + let Some(network) = self.nested_network(network_path) else { + return; + }; + for export_index in 0..network.exports.len() { + input_connectors.push(InputConnector::Export(export_index)); + } + for input in &input_connectors { + self.unload_wire(input, network_path); + } + } + + pub fn modify_import_export(&mut self, network_path: &[NodeId]) -> Option<&ModifyImportExportClickTarget> { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in modify_import_export"); + return None; + }; + if !network_metadata.transient_metadata.modify_import_export.is_loaded() { + self.load_modify_import_export(network_path); + } + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in modify_import_export"); + return None; + }; + let Some(click_targets) = network_metadata.transient_metadata.modify_import_export.get_loaded_mut() else { + log::error!("could not load modify import export ports"); + return None; + }; + Some(click_targets) + } + + pub fn load_modify_import_export(&self, network_path: &[NodeId]) { + let mut reorder_imports_exports = Ports::new(); + let mut remove_imports_exports = Ports::new(); + + if !network_path.is_empty() { + let ports_built = self.with_import_export_ports(network_path, |import_exports| { + for (import_index, import_click_target) in import_exports.output_ports() { + let Some(import_bounding_box) = import_click_target.bounding_box() else { + log::error!("Could not get export bounding box in load_modify_import_export"); + continue; + }; + let reorder_import_center = (import_bounding_box[0] + import_bounding_box[1]) / 2. + DVec2::new(-12., 0.); + + if *import_index == 0 { + let remove_import_center = reorder_import_center + DVec2::new(-4., 0.); + let remove_import = ClickTarget::new_with_path(rectangle_path(remove_import_center - DVec2::new(8., 8.), remove_import_center + DVec2::new(8., 8.)), 0.); + remove_imports_exports.insert_custom_output_port(*import_index, remove_import); + } else { + let remove_import_center = reorder_import_center + DVec2::new(-12., 0.); + let reorder_import = ClickTarget::new_with_path(rectangle_path(reorder_import_center - DVec2::new(3., 4.), reorder_import_center + DVec2::new(3., 4.)), 0.); + let remove_import = ClickTarget::new_with_path(rectangle_path(remove_import_center - DVec2::new(8., 8.), remove_import_center + DVec2::new(8., 8.)), 0.); + reorder_imports_exports.insert_custom_output_port(*import_index, reorder_import); + remove_imports_exports.insert_custom_output_port(*import_index, remove_import); + } + } + + for (export_index, export_click_target) in import_exports.input_ports() { + let Some(export_bounding_box) = export_click_target.bounding_box() else { + log::error!("Could not get export bounding box in load_modify_import_export"); + continue; + }; + let reorder_export_center = (export_bounding_box[0] + export_bounding_box[1]) / 2. + DVec2::new(12., 0.); + + if *export_index == 0 { + let remove_export_center = reorder_export_center + DVec2::new(4., 0.); + let remove_export = ClickTarget::new_with_path(rectangle_path(remove_export_center - DVec2::new(8., 8.), remove_export_center + DVec2::new(8., 8.)), 0.); + remove_imports_exports.insert_custom_input_port(*export_index, remove_export); + } else { + let remove_export_center = reorder_export_center + DVec2::new(12., 0.); + let reorder_export = ClickTarget::new_with_path(rectangle_path(reorder_export_center - DVec2::new(3., 4.), reorder_export_center + DVec2::new(3., 4.)), 0.); + let remove_export = ClickTarget::new_with_path(rectangle_path(remove_export_center - DVec2::new(8., 8.), remove_export_center + DVec2::new(8., 8.)), 0.); + reorder_imports_exports.insert_custom_input_port(*export_index, reorder_export); + remove_imports_exports.insert_custom_input_port(*export_index, remove_export); + } + } + }); + if ports_built.is_none() { + log::error!("Could not get import_export_ports in load_modify_import_export"); + return; + } + } + + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get current network in load_modify_import_export"); + return; + }; + + network_metadata.transient_metadata.modify_import_export.store(ModifyImportExportClickTarget { + remove_imports_exports, + reorder_imports_exports, + }); + } + + pub(crate) fn unload_modify_import_export(&mut self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in unload_export_ports"); + return; + }; + network_metadata.transient_metadata.modify_import_export.unload(); + } + + /// Reads the owned nodes of a layer through &self if they are loaded. + pub(crate) fn with_owned_nodes_if_loaded(&self, node_id: &NodeId, network_path: &[NodeId], read: impl FnOnce(&HashSet) -> R) -> Option { + let layer_node = self.node_metadata(node_id, network_path)?; + if !layer_node.persistent_metadata.is_layer() { + return None; + } + layer_node.transient_metadata.owned_nodes.with_loaded(read) + } + + pub fn all_nodes_bounding_box(&self, network_path: &[NodeId]) -> Option<[DVec2; 2]> { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in all_nodes_bounding_box"); + return None; + }; + + if !network_metadata.transient_metadata.all_nodes_bounding_box.is_loaded() { + self.load_all_nodes_bounding_box(network_path); + } + + let bounding_box = self.network_metadata(network_path)?.transient_metadata.all_nodes_bounding_box.with_loaded(|bounds| *bounds); + if bounding_box.is_none() { + log::error!("could not load all nodes bounding box"); + } + bounding_box + } + + pub fn load_all_nodes_bounding_box(&self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in load_all_nodes_bounding_box"); + return; + }; + let nodes = network_metadata.persistent_metadata.node_metadata.keys().copied().collect::>(); + + let all_nodes_bounding_box = nodes + .iter() + .filter_map(|node_id| self.node_bounding_box(node_id, network_path)) + .reduce(Quad::combine_bounds) + .unwrap_or([DVec2::new(0., 0.), DVec2::new(0., 0.)]); + + let Some(network_metadata) = self.network_metadata(network_path) else { return }; + network_metadata.transient_metadata.all_nodes_bounding_box.store(all_nodes_bounding_box); + } + + pub fn unload_all_nodes_bounding_box(&mut self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in unload_all_nodes_bounding_box"); + return; + }; + network_metadata.transient_metadata.all_nodes_bounding_box.unload(); + self.unload_import_export_ports(network_path); + } + + pub fn outward_wires(&mut self, network_path: &[NodeId]) -> Option<&HashMap>> { + self.try_load_outward_wires(network_path); + + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in outward_wires"); + return None; + }; + let Some(outward_wires) = network_metadata.transient_metadata.outward_wires.get_loaded_mut() else { + log::error!("could not load outward wires"); + return None; + }; + + Some(outward_wires) + } + + /// Reads the outward wires through &self, loading them first if needed. + pub(crate) fn with_outward_wires(&self, network_path: &[NodeId], read: impl FnOnce(&HashMap>) -> R) -> Option { + self.try_load_outward_wires(network_path); + self.network_metadata(network_path)?.transient_metadata.outward_wires.with_loaded(read) + } + + fn try_load_outward_wires(&self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in outward_wires"); + return; + }; + if !network_metadata.transient_metadata.outward_wires.is_loaded() { + self.load_outward_wires(network_path); + } + } + + fn load_outward_wires(&self, network_path: &[NodeId]) { + let mut outward_wires = HashMap::new(); + let Some(network) = self.nested_network(network_path) else { + log::error!("Could not get nested network in load_outward_wires"); + return; + }; + // Initialize all output connectors for nodes + for (node_id, _) in network.nodes.iter() { + let number_of_outputs = self.number_of_outputs(node_id, network_path); + for output_index in 0..number_of_outputs { + outward_wires.insert(OutputConnector::node(*node_id, output_index), Vec::new()); + } + } + // Initialize output connectors for the import node + for import_index in 0..self.number_of_imports(network_path) { + outward_wires.insert(OutputConnector::Import(import_index), Vec::new()); + } + // Collect wires between all nodes and the Imports + // A missing entry means a wire references a node output or import that does not exist, so log it and register the connector anyway rather than crashing + let push_outward_wire = |outward_wires: &mut HashMap>, output_connector: OutputConnector, input_connector: InputConnector| { + let outward_wires_entry = outward_wires.entry(output_connector).or_insert_with(|| { + log::error!("Output connector {output_connector:?} should be initialized in load_outward_wires"); + Vec::new() + }); + outward_wires_entry.push(input_connector); + }; + for (current_node_id, node) in network.nodes.iter() { + for (input_index, input) in node.inputs.iter().enumerate() { + if let NodeInput::Node { node_id, output_index, .. } = input { + push_outward_wire( + &mut outward_wires, + OutputConnector::node(*node_id, *output_index), + InputConnector::node_at_index(*current_node_id, input_index), + ); + } else if let NodeInput::Import { import_index, .. } = input { + push_outward_wire(&mut outward_wires, OutputConnector::Import(*import_index), InputConnector::node_at_index(*current_node_id, input_index)); + } + } + } + for (export_index, export) in network.exports.iter().enumerate() { + if let NodeInput::Node { node_id, output_index, .. } = export { + push_outward_wire(&mut outward_wires, OutputConnector::node(*node_id, *output_index), InputConnector::Export(export_index)); + } else if let NodeInput::Import { import_index, .. } = export { + push_outward_wire(&mut outward_wires, OutputConnector::Import(*import_index), InputConnector::Export(export_index)); + } + } + + let Some(network_metadata) = self.network_metadata(network_path) else { return }; + + network_metadata.transient_metadata.outward_wires.store(outward_wires); + } + + pub(crate) fn unload_outward_wires(&mut self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in unload_outward_wires"); + return; + }; + network_metadata.transient_metadata.outward_wires.unload(); + } + + /// Incrementally updates the outward_wires cache when a single input connector changes, + /// avoiding a full rebuild. If the cache is not loaded, this is a no-op (it will be fully + /// rebuilt on the next read via `outward_wires()`). + pub(crate) fn update_outward_wires(&mut self, network_path: &[NodeId], input_connector: &InputConnector, old_input: &NodeInput, new_input: &NodeInput) { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + return; + }; + let Some(outward_wires) = network_metadata.transient_metadata.outward_wires.get_loaded_mut() else { + return; + }; + + // Remove the input_connector from the old output's downstream list + if let Some(old_output) = OutputConnector::from_input(old_input) + && let Some(connections) = outward_wires.get_mut(&old_output) + { + connections.retain(|c| c != input_connector); + } + + // Add the input_connector to the new output's downstream list + if let Some(new_output) = OutputConnector::from_input(new_input) { + outward_wires.entry(new_output).or_default().push(*input_connector); + } + } + + pub fn layer_width(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option { + let Some(node_metadata) = self.node_metadata(node_id, network_path) else { + log::error!("Could not get nested node_metadata in layer_width"); + return None; + }; + if !node_metadata.persistent_metadata.is_layer() { + log::error!("Cannot get layer width for non layer node {node_id} in network {network_path:?}"); + return None; + } + + if !node_metadata.transient_metadata.layer_width.is_loaded() { + self.load_layer_width(node_id, network_path); + } + + let node_metadata = self.node_metadata(node_id, network_path)?; + node_metadata.transient_metadata.layer_width.with_loaded(|layer_width| *layer_width) + } + + pub fn load_layer_width(&self, node_id: &NodeId, network_path: &[NodeId]) { + const GAP_WIDTH: f64 = 8.; + const FONT_SIZE: f64 = 14.; + let left_thumbnail_padding = GRID_SIZE as f64 / 2.; + let thumbnail_width = 3. * GRID_SIZE as f64; + let layer_text = self.display_name(node_id, network_path); + + let text_width = text_width(&layer_text, FONT_SIZE); + + let grip_padding = 4.; + let grip_width = 8.; + let lock_icon_width = if self.is_locked(node_id, network_path) { GRID_SIZE as f64 } else { 0. }; + let icon_overhang_width = GRID_SIZE as f64 / 2.; + + let layer_width_pixels = left_thumbnail_padding + thumbnail_width + GAP_WIDTH + text_width + grip_padding + grip_width + lock_icon_width + icon_overhang_width; + let layer_width = ((layer_width_pixels / 24.).ceil() as u32).max(8); + + let Some(node_metadata) = self.node_metadata(node_id, network_path) else { + log::error!("Could not get nested node_metadata in load_layer_width"); + return; + }; + + // Ensure layer width is not loaded for a non layer node + if node_metadata.persistent_metadata.is_layer() { + node_metadata.transient_metadata.layer_width.store(layer_width); + } else { + log::warn!("Tried loading layer width for non layer node"); + } + } + + /// Unloads layer width if the node is a layer + pub fn try_unload_layer_width(&mut self, node_id: &NodeId, network_path: &[NodeId]) { + let is_layer = self.is_layer(node_id, network_path); + + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + return; + }; + + // If the node is a layer, then the width and click targets need to be recalculated + if is_layer { + node_metadata.transient_metadata.layer_width.unload(); + } + } + + pub fn get_input_center(&self, input: &InputConnector, network_path: &[NodeId]) -> Option { + match input { + InputConnector::Node { node_id, input_index } => self + .with_node_click_targets(node_id, network_path, |click_targets| click_targets.port_click_targets.input_port_position(*input_index)) + .flatten(), + InputConnector::Export(export_index) => self.with_import_export_ports(network_path, |ports| ports.input_port_position(*export_index)).flatten(), + } + } + + pub fn get_output_center(&self, output: &OutputConnector, network_path: &[NodeId]) -> Option { + match output { + OutputConnector::Node { node_id, output_index } => self + .with_node_click_targets(node_id, network_path, |click_targets| click_targets.port_click_targets.output_port_position(*output_index)) + .flatten(), + OutputConnector::Import(import_index) => self.with_import_export_ports(network_path, |ports| ports.output_port_position(*import_index)).flatten(), + } + } + + pub fn newly_loaded_input_wire(&self, input: &InputConnector, graph_wire_style: GraphWireStyle, network_path: &[NodeId]) -> Option { + if !self.wire_is_loaded(input, network_path) { + self.load_wire(input, graph_wire_style, network_path); + } else { + return None; + } + + let network_metadata = self.network_metadata(network_path)?; + let Some(wire) = network_metadata.transient_metadata.wires.borrow().get(input).cloned() else { + log::error!("Could not load wire for input: {input:?}"); + return None; + }; + Some(wire) + } + + pub fn wire_is_loaded(&self, input: &InputConnector, network_path: &[NodeId]) -> bool { + self.network_metadata(network_path) + .is_some_and(|network_metadata| network_metadata.transient_metadata.wires.borrow().contains_key(input)) + } + + fn load_wire(&self, input: &InputConnector, graph_wire_style: GraphWireStyle, network_path: &[NodeId]) { + let dashed = match self.previewing(network_path) { + Previewing::Yes { .. } => match input { + InputConnector::Node { .. } => false, + InputConnector::Export(export_index) => *export_index == 0, + }, + Previewing::No => false, + }; + let Some(wire) = self.wire_path_from_input(input, graph_wire_style, dashed, network_path) else { + log::error!("Could not load wire path from input"); + return; + }; + let (id, input_index) = match input { + InputConnector::Node { node_id, input_index } => (*node_id, *input_index), + InputConnector::Export(export_index) => (NodeId(u64::MAX), *export_index), + }; + let wire_update = WirePathUpdate { + id, + input_index, + wire_path_update: Some(wire), + }; + + let Some(network_metadata) = self.network_metadata(network_path) else { return }; + network_metadata.transient_metadata.wires.borrow_mut().insert(*input, wire_update); + } + + pub fn all_input_connectors(&self, network_path: &[NodeId]) -> Vec { + let mut input_connectors = Vec::new(); + let Some(network) = self.nested_network(network_path) else { + log::error!("Could not get nested network in all_input_connectors"); + return Vec::new(); + }; + for export_index in 0..network.exports.len() { + input_connectors.push(InputConnector::Export(export_index)); + } + for (node_id, node) in &network.nodes { + for input_index in 0..node.inputs.len() { + input_connectors.push(InputConnector::node_at_index(*node_id, input_index)); + } + } + input_connectors + } + + pub fn node_graph_input_connectors(&self, network_path: &[NodeId]) -> Vec { + self.all_input_connectors(network_path) + .into_iter() + .filter(|input| self.input_from_connector(input, network_path).is_some_and(|input| input.is_exposed())) + .collect() + } + + /// Maps to the frontend representation of a wire start. Includes disconnected value wire inputs. + pub fn node_graph_wire_inputs(&self, network_path: &[NodeId]) -> Vec<(NodeId, usize)> { + self.node_graph_input_connectors(network_path) + .iter() + .map(|input| match input { + InputConnector::Node { node_id, input_index } => (*node_id, *input_index), + InputConnector::Export(export_index) => (NodeId(u64::MAX), *export_index), + }) + .chain(std::iter::once((NodeId(u64::MAX), u32::MAX as usize))) + .collect() + } + + fn unload_wires_for_node(&mut self, node_id: &NodeId, network_path: &[NodeId]) { + let number_of_outputs = self.number_of_outputs(node_id, network_path); + let Some(outward_wires) = self.outward_wires(network_path) else { + log::error!("Could not get outward wires in reorder_export"); + return; + }; + let mut input_connectors = Vec::new(); + for output_index in 0..number_of_outputs { + let Some(inputs) = outward_wires.get(&OutputConnector::node(*node_id, output_index)) else { + continue; + }; + input_connectors.extend(inputs.clone()) + } + for input_index in 0..self.number_of_inputs(node_id, network_path) { + input_connectors.push(InputConnector::node_at_index(*node_id, input_index)); + } + for input in input_connectors { + self.unload_wire(&input, network_path); + } + } + + pub fn unload_wire(&mut self, input: &InputConnector, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata(network_path) else { + return; + }; + network_metadata.transient_metadata.wires.borrow_mut().remove(input); + } + + /// When previewing, there may be a second path to the root node. + pub fn wire_to_root(&self, graph_wire_style: GraphWireStyle, network_path: &[NodeId]) -> Option { + let input = InputConnector::Export(0); + let current_export = self.upstream_output_connector(&input, network_path)?; + + let root_node = match self.previewing(network_path) { + Previewing::Yes { root_node_to_restore } => root_node_to_restore, + Previewing::No => None, + }?; + + if Some(root_node.node_id) == current_export.node_id() { + return None; + } + let Some(input_position) = self.get_input_center(&input, network_path) else { + log::error!("Could not get input position for wire end in root node: {input:?}"); + return None; + }; + let upstream_output = OutputConnector::node(root_node.node_id, root_node.output_index); + let Some(output_position) = self.get_output_center(&upstream_output, network_path) else { + log::error!("Could not get output position for wire start in root node: {upstream_output:?}"); + return None; + }; + let vertical_end = input.node_id().is_some_and(|node_id| self.is_layer(&node_id, network_path) && input.input_index() == 0); + let vertical_start: bool = upstream_output.node_id().is_some_and(|node_id| self.is_layer(&node_id, network_path)); + let thick = vertical_end && vertical_start; + let vector_wire = build_vector_wire(output_position, input_position, vertical_start, vertical_end, graph_wire_style); + let center_line = build_thick_wire_center_line(output_position, input_position, vertical_start, vertical_end); + + let path_string = vector_wire.to_svg(); + let center_path_string = center_line.to_svg(); + let input_type = self.input_type(&input, network_path); + let data_type = input_type.displayed_type(); + let is_list = input_type.is_list(); + let wire_path_update = Some(WirePath { + path_string, + data_type, + thick, + dashed: false, + is_list, + center_path_string, + }); + + Some(WirePathUpdate { + id: NodeId(u64::MAX), + input_index: u32::MAX as usize, + wire_path_update, + }) + } + + /// Returns the wire subpath, its thick center-line subpath, and whether the wire should be thick. + pub fn vector_wire_from_input(&self, input: &InputConnector, wire_style: GraphWireStyle, network_path: &[NodeId]) -> Option<(BezPath, BezPath, bool)> { + let Some(input_position) = self.get_input_center(input, network_path) else { + log::error!("Could not get dom rect for wire end: {input:?}"); + return None; + }; + // An upstream output could not be found, so the wire does not exist, but it should still be loaded as as empty vector + let Some(upstream_output) = self.upstream_output_connector(input, network_path) else { + return Some((BezPath::new(), BezPath::new(), false)); + }; + let Some(output_position) = self.get_output_center(&upstream_output, network_path) else { + log::error!("Could not get output port for wire start: {:?}", upstream_output); + return None; + }; + let vertical_end = input.node_id().is_some_and(|node_id| self.is_layer(&node_id, network_path) && input.input_index() == 0); + let vertical_start = upstream_output.node_id().is_some_and(|node_id| self.is_layer(&node_id, network_path)); + let thick = vertical_end && vertical_start; + let vector_wire = build_vector_wire(output_position, input_position, vertical_start, vertical_end, wire_style); + let center_line = build_thick_wire_center_line(output_position, input_position, vertical_start, vertical_end); + Some((vector_wire, center_line, thick)) + } + + pub fn wire_path_from_input(&self, input: &InputConnector, graph_wire_style: GraphWireStyle, dashed: bool, network_path: &[NodeId]) -> Option { + let (vector_wire, center_line, thick) = self.vector_wire_from_input(input, graph_wire_style, network_path)?; + let path_string = vector_wire.to_svg(); + let center_path_string = center_line.to_svg(); + let (data_type, is_list) = self + .upstream_output_connector(input, network_path) + .map(|output| { + let output_type = self.output_type(&output, network_path); + (output_type.displayed_type(), output_type.is_list()) + }) + .unwrap_or((FrontendGraphDataType::General, false)); + Some(WirePath { + path_string, + data_type, + thick, + dashed, + is_list, + center_path_string, + }) + } + + pub fn node_click_targets(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&DocumentNodeClickTargets> { + self.try_load_node_click_targets(node_id, network_path); + + let node_metadata = self.node_metadata_mut(node_id, network_path)?; + let Some(click_targets) = node_metadata.transient_metadata.click_targets.get_loaded_mut() else { + log::error!("Could not load node type metadata when getting click targets"); + return None; + }; + Some(click_targets) + } + + pub(crate) fn try_load_node_click_targets(&self, node_id: &NodeId, network_path: &[NodeId]) { + let Some(node_metadata) = self.node_metadata(node_id, network_path) else { + log::error!("Could not get nested node_metadata in node_click_targets"); + return; + }; + if !node_metadata.transient_metadata.click_targets.is_loaded() { + self.load_node_click_targets(node_id, network_path) + }; + } + + /// Loads the node click targets if needed, then reads them through &self. + pub(crate) fn with_node_click_targets(&self, node_id: &NodeId, network_path: &[NodeId], read: impl FnOnce(&DocumentNodeClickTargets) -> R) -> Option { + self.try_load_node_click_targets(node_id, network_path); + self.with_node_click_targets_if_loaded(node_id, network_path, read) + } + + /// Reads the modify import/export click targets through &self, loading them first if needed. + pub(crate) fn with_modify_import_export(&self, network_path: &[NodeId], read: impl FnOnce(&ModifyImportExportClickTarget) -> R) -> Option { + self.try_load_modify_import_export(network_path); + self.network_metadata(network_path)?.transient_metadata.modify_import_export.with_loaded(read) + } + + fn try_load_modify_import_export(&self, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in modify_import_export"); + return; + }; + if !network_metadata.transient_metadata.modify_import_export.is_loaded() { + self.load_modify_import_export(network_path); + } + } + + /// Reads the node click targets through &self if they are already loaded. + pub(crate) fn with_node_click_targets_if_loaded(&self, node_id: &NodeId, network_path: &[NodeId], read: impl FnOnce(&DocumentNodeClickTargets) -> R) -> Option { + let node_metadata = self.node_metadata(node_id, network_path)?; + let result = node_metadata.transient_metadata.click_targets.with_loaded(read); + if result.is_none() { + log::error!("Could not load node type metadata when getting click targets"); + } + result + } + + pub fn load_node_click_targets(&self, node_id: &NodeId, network_path: &[NodeId]) { + let Some(node_position) = self.position_from_downstream_node(node_id, network_path) else { + log::error!("Could not get node position in load_node_click_targets for node {node_id}"); + return; + }; + let Some(node_metadata) = self.node_metadata(node_id, network_path) else { + log::error!("Could not get nested node_metadata in load_node_click_targets"); + return; + }; + let Some(document_node) = self.document_node(node_id, network_path) else { + log::error!("Could not get document node in load_node_click_targets"); + return; + }; + + let node_top_left = node_position.as_dvec2() * GRID_SIZE as f64; + let mut port_click_targets = Ports::new(); + let document_node_click_targets = if !node_metadata.persistent_metadata.is_layer() { + // Create input/output click targets + let mut input_row_count = 0; + for (input_index, input) in document_node.inputs.iter().enumerate() { + if input.is_exposed() { + port_click_targets.insert_node_input(input_index, input_row_count, node_top_left); + } + // Primary input row is always displayed, even if the input is not exposed + if input_index == 0 || input.is_exposed() { + input_row_count += 1; + } + } + + let number_of_outputs = match &document_node.implementation { + DocumentNodeImplementation::Network(network) => network.exports.len(), + _ => 1, + }; + // If the node has a hidden primary output, do not display the first output + let start_index = if self.hidden_primary_output(node_id, network_path) { 1 } else { 0 }; + for output_index in start_index..number_of_outputs { + port_click_targets.insert_node_output(output_index, node_top_left); + } + + let height = input_row_count.max(number_of_outputs).max(1) as u32 * GRID_SIZE; + let width = 5 * GRID_SIZE; + // Offset down by half a grid so the click target sits below the top connector strip. + let node_click_target_top_left = node_top_left + DVec2::new(0., HALF_GRID_SIZE as f64); + let node_click_target_bottom_right = node_click_target_top_left + DVec2::new(width as f64, height as f64); + + let radius = 3.; + let path = rounded_rectangle_path(node_click_target_top_left, node_click_target_bottom_right, [radius; 4]); + let node_click_target = ClickTarget::new_with_path(path, 0.); + + DocumentNodeClickTargets { + node_click_target, + port_click_targets, + node_type_metadata: NodeTypeClickTargets::Node, + } + } else { + // Layer inputs + port_click_targets.insert_layer_input(0, node_top_left); + if document_node.inputs.iter().filter(|input| input.is_exposed()).count() > 1 { + port_click_targets.insert_layer_input(1, node_top_left); + } + port_click_targets.insert_layer_output(node_top_left); + + let layer_width_cells = self.layer_width(node_id, network_path).unwrap_or_else(|| { + log::error!("Could not get layer width in load_node_click_targets"); + 0 + }); + let width = layer_width_cells * GRID_SIZE; + let height = 2 * GRID_SIZE; + let locked = self.is_locked(node_id, network_path); + + // The layer is `2 * GRID_SIZE` tall, so its vertical center sits one grid unit below `node_top_left.y`. + // Visibility/lock buttons fill a 1-grid-cell square (so half-extents of HALF_GRID_SIZE each side of center). + const LAYER_VERTICAL_CENTER: f64 = GRID_SIZE as f64; + const ICON_HALF_EXTENT: f64 = HALF_GRID_SIZE as f64; + + // Update visibility button click target + let visibility_offset = node_top_left + DVec2::new(width as f64, LAYER_VERTICAL_CENTER); + let path = rounded_rectangle_path( + DVec2::new(-ICON_HALF_EXTENT, -ICON_HALF_EXTENT) + visibility_offset, + DVec2::new(ICON_HALF_EXTENT, ICON_HALF_EXTENT) + visibility_offset, + [3.; 4], + ); + let visibility_click_target = ClickTarget::new_with_path(path, 0.); + + // Update lock button click target, positioned one grid unit to the left of the visibility button (only when locked) + let lock_click_target = if locked { + let lock_offset = node_top_left + DVec2::new(width as f64 - GRID_SIZE as f64, LAYER_VERTICAL_CENTER); + let path = rounded_rectangle_path( + DVec2::new(-ICON_HALF_EXTENT, -ICON_HALF_EXTENT) + lock_offset, + DVec2::new(ICON_HALF_EXTENT, ICON_HALF_EXTENT) + lock_offset, + [3.; 4], + ); + Some(ClickTarget::new_with_path(path, 0.)) + } else { + None + }; + + // Update grip button click target, which is positioned to the left of the leftmost icon. + // The grip is 8px wide but spans the full layer-vertical-center band. + const GRIP_WIDTH: f64 = 8.; + let icons_width = if locked { GRID_SIZE as f64 } else { 0. }; + let grip_offset_right_edge = node_top_left + DVec2::new(width as f64 - ICON_HALF_EXTENT - icons_width, LAYER_VERTICAL_CENTER); + let path = rounded_rectangle_path( + DVec2::new(-GRIP_WIDTH, -ICON_HALF_EXTENT) + grip_offset_right_edge, + DVec2::new(0., ICON_HALF_EXTENT) + grip_offset_right_edge, + [0.; 4], + ); + let grip_click_target = ClickTarget::new_with_path(path, 0.); + + // Update display-name text click target, used to detect double-click rename. Sized to the text bounds + // (not the surrounding `.details` area) so the rest of the layer still drills into the subgraph on double-click. + + /// `.layer` margin-left (= 12), for chain layers the negative margin-left and positive padding-left cancel out, keeping content at this same offset + const LAYER_LEFT_MARGIN: f64 = HALF_GRID_SIZE as f64; + /// `.thumbnail` (70px) + its 1px side margins (= 72) + const THUMBNAIL_BLOCK_WIDTH: f64 = 3. * GRID_SIZE as f64; + /// `.details` margin-left + const DETAILS_LEFT_MARGIN: f64 = 8.; + const NAME_LEFT_OFFSET: f64 = LAYER_LEFT_MARGIN + THUMBNAIL_BLOCK_WIDTH + DETAILS_LEFT_MARGIN; + /// Distance from layer's right edge to visibility's left edge (= 12) + const VISIBILITY_INSET_FROM_LAYER_RIGHT: f64 = HALF_GRID_SIZE as f64; + const FONT_SIZE: f64 = 14.; + + let display_name = self.display_name(node_id, network_path); + let name_click_target = if display_name.is_empty() { + None + } else { + let name_left = node_top_left.x + NAME_LEFT_OFFSET; + let icons_reserve = VISIBILITY_INSET_FROM_LAYER_RIGHT + icons_width + GRIP_WIDTH; + let name_right_max = node_top_left.x + width as f64 - icons_reserve; + let name_width = text_width(&display_name, FONT_SIZE); + let name_right = (name_left + name_width).min(name_right_max); + if name_right > name_left { + // The 1-grid-tall name strip is centered vertically in the 2-grid-tall layer. + let name_top = node_top_left.y + HALF_GRID_SIZE as f64; + let name_bottom = node_top_left.y + GRID_SIZE as f64 + HALF_GRID_SIZE as f64; + let path = rounded_rectangle_path(DVec2::new(name_left, name_top), DVec2::new(name_right, name_bottom), [3.; 4]); + Some(ClickTarget::new_with_path(path, 0.)) + } else { + None + } + }; + + // Create layer click target, which is contains the layer and the chain background + let chain_width_grid_spaces = self.chain_width(node_id, network_path); + + let node_bottom_right = node_top_left + DVec2::new(width as f64, height as f64); + let chain_top_left = node_top_left - DVec2::new((chain_width_grid_spaces * GRID_SIZE) as f64, 0.); + const CORNER_RADIUS: f64 = 10.; + let path = rounded_rectangle_path(chain_top_left, node_bottom_right, [CORNER_RADIUS; 4]); + let node_click_target = ClickTarget::new_with_path(path, 0.); + + DocumentNodeClickTargets { + node_click_target, + port_click_targets, + node_type_metadata: NodeTypeClickTargets::Layer(Box::new(LayerClickTargets { + visibility_click_target, + lock_click_target, + grip_click_target, + name_click_target, + })), + } + }; + + let Some(node_metadata) = self.node_metadata(node_id, network_path) else { + log::error!("Could not get nested node_metadata in load_node_click_targets"); + return; + }; + node_metadata.transient_metadata.click_targets.store(document_node_click_targets); + } + + pub fn node_bounding_box(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<[DVec2; 2]> { + self.try_load_node_click_targets(node_id, network_path); + self.try_get_node_bounding_box(node_id, network_path) + } + + pub fn try_get_node_bounding_box(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<[DVec2; 2]> { + self.with_node_click_targets_if_loaded(node_id, network_path, |click_targets| click_targets.node_click_target.bounding_box()) + .flatten() + } + + pub fn try_load_all_node_click_targets(&self, network_path: &[NodeId]) { + let Some(network) = self.nested_network(network_path) else { + log::error!("Could not get network in load_all_node_click_targets"); + return; + }; + for node_id in network.nodes.keys().cloned().collect::>() { + self.try_load_node_click_targets(&node_id, network_path); + } + } + + /// Get the top left position in node graph coordinates for a node by recursively iterating downstream through cached positions, which means the iteration can be broken once a known position is reached. + pub fn position_from_downstream_node(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option { + let Some(node_metadata) = self.node_metadata(node_id, network_path) else { + log::error!("Could not get nested node_metadata in position_from_downstream_node"); + return None; + }; + match &node_metadata.persistent_metadata.node_type_metadata { + NodeTypePersistentMetadata::Layer(layer_metadata) => { + match layer_metadata.position { + LayerPosition::Absolute(position) => Some(position), + LayerPosition::Stack(y_offset) => { + let Some(downstream_node_connectors) = self + .with_outward_wires(network_path, |outward_wires| outward_wires.get(&OutputConnector::primary_output(*node_id)).cloned()) + .flatten() + else { + log::error!("Could not get downstream node in position_from_downstream_node"); + return None; + }; + let downstream_connector = downstream_node_connectors + .iter() + .find_map(|input_connector| input_connector.node_id().map(|node_id| (node_id, input_connector.input_index()))); + + let Some((downstream_node_id, _)) = downstream_connector else { + log::error!("Could not get downstream node input connector for node {node_id}"); + return None; + }; + // Get the height of the node to ensure nodes do not overlap + let Some(downstream_node_height) = self.height_from_click_target(&downstream_node_id, network_path) else { + log::error!("Could not get click target height in position_from_downstream_node"); + return None; + }; + self.position(&downstream_node_id, network_path) + .map(|position| position + IVec2::new(0, 1 + downstream_node_height as i32 + y_offset as i32)) + } + } + } + NodeTypePersistentMetadata::Node(node_metadata) => { + match node_metadata.position { + NodePosition::Absolute(position) => Some(position), + NodePosition::Chain => { + // Iterate through primary flow to find the first Layer + let mut current_node_id = *node_id; + let mut node_distance_from_layer = 1; + loop { + // TODO: Use root node to restore if previewing + let Some(downstream_node_connectors) = self + .with_outward_wires(network_path, |outward_wires| outward_wires.get(&OutputConnector::primary_output(current_node_id)).cloned()) + .flatten() + else { + log::error!("Could not get downstream node for node {node_id} with Position::Chain"); + return None; + }; + let Some(downstream_node_id) = downstream_node_connectors.iter().find_map(|input_connector| { + if let InputConnector::Node { node_id, input_index } = input_connector { + let downstream_input_index = if self.is_layer(node_id, network_path) { 1 } else { 0 }; + if *input_index == downstream_input_index { Some(node_id) } else { None } + } else { + None + } + }) else { + log::error!("Could not get downstream node input connector with input index 1 for node with Position::Chain"); + return None; + }; + let Some(downstream_node_metadata) = self.network_metadata(network_path)?.persistent_metadata.node_metadata.get(downstream_node_id) else { + log::error!("Downstream node metadata not found in node_metadata for node with Position::Chain"); + return None; + }; + if downstream_node_metadata.persistent_metadata.is_layer() { + // Get the position of the layer + let layer_position = self.position(downstream_node_id, network_path)?; + return Some(layer_position + IVec2::new(-node_distance_from_layer * NODE_CHAIN_WIDTH, 0)); + } + node_distance_from_layer += 1; + current_node_id = *downstream_node_id; + } + } + } + } + } + } + + pub fn unload_node_click_targets(&mut self, node_id: &NodeId, network_path: &[NodeId]) { + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get nested node_metadata in unload_node_click_target"); + return; + }; + node_metadata.transient_metadata.click_targets.unload(); + self.unload_wires_for_node(node_id, network_path); + } + + pub fn unload_upstream_node_click_targets(&mut self, node_ids: Vec, network_path: &[NodeId]) { + let upstream_nodes = self.upstream_flow_back_from_nodes(node_ids, network_path, FlowType::UpstreamFlow).collect::>(); + + for upstream_id in &upstream_nodes { + self.unload_node_click_targets(upstream_id, network_path); + } + } + + pub fn unload_all_nodes_click_targets(&mut self, network_path: &[NodeId]) { + let Some(network) = self.nested_network(network_path) else { + log::error!("Could not get nested network in unload_all_nodes_click_targets"); + return; + }; + let upstream_nodes = network.nodes.keys().cloned().collect::>(); + + for upstream_id in &upstream_nodes { + self.unload_node_click_targets(upstream_id, network_path); + } + } +} diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/characterization_tests.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/characterization_tests.rs new file mode 100644 index 0000000000..6059583ff8 --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/characterization_tests.rs @@ -0,0 +1,403 @@ +use super::{InputConnector, OutputConnector, Previewing, RootNode, TransactionStatus}; +use crate::messages::portfolio::document::node_graph::utility_types::Direction; +use crate::test_utils::test_prelude::*; +use graph_craft::document::NodeInput; +use graph_craft::document::value::TaggedValue; +use graphene_std::uuid::NodeId; + +fn assert_invariants(editor: &EditorTestUtils, context: &str) { + let violations = editor.active_document().network_interface.validate_invariants(); + assert!(violations.is_empty(), "Invariant violations {context}:\n{}", violations.join("\n")); +} + +fn rectangle_definition() -> DefinitionIdentifier { + DefinitionIdentifier::ProtoNode(graphene_std::vector::generator_nodes::rectangle::IDENTIFIER) +} + +fn new_artboard_message(id: NodeId) -> GraphOperationMessage { + GraphOperationMessage::NewArtboard { + id, + location: DVec2::ZERO, + dimensions: DVec2::new(400., 300.), + background: Color::WHITE, + clip: false, + } +} + +#[tokio::test] +async fn invariants_hold_through_basic_editing_flow() { + let mut editor = EditorTestUtils::create(); + + // This test covers the interface's structural invariants. The storage dual-write is out of its scope and asserted by the storage round-trip tests. + editor.editor.handle_message(PreferencesMessage::ValidateStorageRoundTrip { enabled: false }); + + editor.new_document().await; + assert_invariants(&editor, "after opening a new document"); + + editor.handle_message(new_artboard_message(NodeId::new())).await; + assert_invariants(&editor, "after creating an artboard"); + + let rectangle = editor.create_node_by_name(rectangle_definition()).await; + assert_invariants(&editor, "after creating a node"); + + editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![rectangle] }).await; + editor.handle_message(NodeGraphMessage::DeleteSelectedNodes { delete_children: true }).await; + assert_invariants(&editor, "after deleting the node"); + + editor.handle_message(DocumentMessage::Undo).await; + assert_invariants(&editor, "after undo"); + + editor.handle_message(DocumentMessage::Redo).await; + assert_invariants(&editor, "after redo"); +} + +#[tokio::test] +async fn deleting_a_node_with_children_prunes_them_from_the_selection() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let parent = editor.create_node_by_name(rectangle_definition()).await; + let child = editor.create_node_by_name(rectangle_definition()).await; + + let network_interface = &mut editor.active_document_mut().network_interface; + assert!(network_interface.number_of_inputs(&parent, &[]) >= 2, "Test needs a secondary input to wire the child into"); + + // Wire the child into the parent's secondary input so it is a sole dependent, then select both and delete only the parent + network_interface.set_input(&InputConnector::node_at_index(parent, 1), NodeInput::node(child, 0), &[]); + network_interface.selected_nodes_mut(&[]).unwrap().set_selected_nodes(vec![parent, child]); + network_interface.delete_nodes(vec![parent], true, &[]); + + assert!(network_interface.document_network().nodes.is_empty(), "Both the parent and its sole-dependent child should be deleted"); + let remaining_selection = network_interface.selected_nodes_mut(&[]).unwrap().selected_nodes().copied().collect::>(); + assert!(remaining_selection.is_empty(), "Deleted children should be pruned from the selection, found {remaining_selection:?}"); + + assert_invariants(&editor, "after deleting a node with children"); +} + +#[tokio::test] +async fn deleting_a_node_keeps_children_shared_with_other_nodes() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let parent = editor.create_node_by_name(rectangle_definition()).await; + let sibling = editor.create_node_by_name(rectangle_definition()).await; + let shared_child = editor.create_node_by_name(rectangle_definition()).await; + + let network_interface = &mut editor.active_document_mut().network_interface; + + // Wire the same child into the secondary inputs of both nodes, then delete only the parent along with its children + network_interface.set_input(&InputConnector::node_at_index(parent, 1), NodeInput::node(shared_child, 0), &[]); + network_interface.set_input(&InputConnector::node_at_index(sibling, 1), NodeInput::node(shared_child, 0), &[]); + network_interface.delete_nodes(vec![parent], true, &[]); + + let nodes = &network_interface.document_network().nodes; + assert!(!nodes.contains_key(&parent), "The deleted node itself should be gone"); + assert!(nodes.contains_key(&shared_child), "A child shared with another node is not a sole dependent and should survive"); + assert!(nodes.contains_key(&sibling), "The unrelated sibling should survive"); + + assert_invariants(&editor, "after deleting a node with a shared child"); +} + +#[tokio::test] +async fn cyclic_connection_is_rejected_without_side_effects() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let a = editor.create_node_by_name(rectangle_definition()).await; + let b = editor.create_node_by_name(rectangle_definition()).await; + + let network_interface = &mut editor.active_document_mut().network_interface; + network_interface.set_input(&InputConnector::node_at_index(a, 1), NodeInput::node(b, 0), &[]); + + // Attempt to complete a cycle inside a transaction: the edit must be rejected without marking the transaction as modified + network_interface.start_transaction(); + let input_before = network_interface.input_from_connector(&InputConnector::node_at_index(b, 1), &[]).cloned(); + network_interface.set_input(&InputConnector::node_at_index(b, 1), NodeInput::node(a, 0), &[]); + + let input_after = network_interface.input_from_connector(&InputConnector::node_at_index(b, 1), &[]).cloned(); + assert_eq!(input_before, input_after, "A rejected cyclic connection should leave the input unchanged"); + assert_eq!( + network_interface.transaction_status(), + TransactionStatus::Started, + "A rejected cyclic connection should not mark the transaction as modified" + ); + network_interface.finish_transaction(); + + assert_invariants(&editor, "after rejecting a cyclic connection"); +} + +#[tokio::test] +async fn toggling_preview_on_a_disconnected_export() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let node = editor.create_node_by_name(rectangle_definition()).await; + + let network_interface = &mut editor.active_document_mut().network_interface; + network_interface.disconnect_input(&InputConnector::Export(0), &[]); + + // Previewing a node while the export is disconnected is a preview with nothing to restore + network_interface.toggle_preview(node, &[]); + assert_eq!(network_interface.previewing(&[]), Previewing::Yes { root_node_to_restore: None }); + let export = network_interface.input_from_connector(&InputConnector::Export(0), &[]); + assert_eq!(export.and_then(|input| input.as_node()), Some(node), "The previewed node should be wired to the export"); + + // Ending the preview restores the disconnected export + network_interface.toggle_preview(node, &[]); + assert_eq!(network_interface.previewing(&[]), Previewing::No); + let export = network_interface.input_from_connector(&InputConnector::Export(0), &[]); + assert!(export.is_some_and(|input| input.as_node().is_none()), "Ending the preview should disconnect the export again"); + + assert_invariants(&editor, "after toggling preview twice"); +} + +#[tokio::test] +async fn artboard_identity_is_independent_of_scene_connectivity() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let artboard = NodeId::new(); + editor.handle_message(new_artboard_message(artboard)).await; + + let network_interface = &mut editor.active_document_mut().network_interface; + assert!(network_interface.is_artboard(&artboard, &[])); + assert!(!network_interface.all_artboards().is_empty()); + + // Disconnecting the artboard from the export keeps its identity but removes it from the scene's artboards + network_interface.disconnect_input(&InputConnector::Export(0), &[]); + assert!(network_interface.is_artboard(&artboard, &[]), "Artboard identity should survive disconnection"); + assert!(network_interface.all_artboards().is_empty(), "Disconnected artboards should not count as scene artboards"); + + assert_invariants(&editor, "after disconnecting an artboard"); +} + +#[tokio::test] +async fn selection_history_is_not_serialized() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let node = editor.create_node_by_name(rectangle_definition()).await; + editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![node] }).await; + + let serialized = editor.active_document().serialize_document(); + assert!(!serialized.contains("selection_undo_history"), "Selection history should not be persisted into saved documents"); + assert!(!serialized.contains("selection_redo_history"), "Selection history should not be persisted into saved documents"); +} + +fn merge_definition() -> DefinitionIdentifier { + DefinitionIdentifier::Network("Merge".to_string()) +} + +#[tokio::test] +async fn layer_stacking_follows_wiring() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let upper = editor.create_node_by_name_at(merge_definition(), 20, 10).await; + let lower = editor.create_node_by_name_at(merge_definition(), 20, 16).await; + + let network_interface = &mut editor.active_document_mut().network_interface; + network_interface.set_to_node_or_layer(&upper, &[], true); + network_interface.set_to_node_or_layer(&lower, &[], true); + assert!(network_interface.is_layer(&upper, &[]) && network_interface.is_layer(&lower, &[])); + assert!(network_interface.is_absolute(&lower, &[])); + + // Wiring a layer into the bottom input of another layer converts it to stack positioning at its current visual spot + let lower_position_before = network_interface.position(&lower, &[]).expect("Lower layer should have a position"); + network_interface.create_wire(&OutputConnector::primary_output(lower), &InputConnector::primary_input(upper), &[]); + assert!(network_interface.is_stack(&lower, &[]), "A layer feeding the bottom of a layer should be stack positioned"); + let stacked_position = network_interface.position(&lower, &[]).expect("Stacked layer should have a position"); + assert_eq!(stacked_position.y, lower_position_before.y, "Stacking should preserve the layer's vertical position"); + + // Disconnecting converts the layer back to absolute positioning without moving it + network_interface.disconnect_input(&InputConnector::primary_input(upper), &[]); + assert!(network_interface.is_absolute(&lower, &[]), "A disconnected stack layer should return to absolute positioning"); + assert_eq!(network_interface.position(&lower, &[]), Some(stacked_position), "Unstacking should not move the layer"); + + assert_invariants(&editor, "after stacking and unstacking a layer"); +} + +#[tokio::test] +async fn chain_membership_follows_wiring() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let layer = editor.create_node_by_name_at(merge_definition(), 20, 10).await; + let node = editor.create_node_by_name_at(rectangle_definition(), 15, 10).await; + + let network_interface = &mut editor.active_document_mut().network_interface; + network_interface.set_to_node_or_layer(&layer, &[], true); + + // A node wired into a layer's secondary input from the same row, within chain distance, joins the chain + network_interface.create_wire(&OutputConnector::primary_output(node), &InputConnector::layer_secondary_input(layer), &[]); + assert!( + network_interface.is_chain(&node, &[]), + "A node feeding a layer's secondary input from chain range should become a chain node" + ); + + // Disconnecting breaks the chain and the node becomes absolute at its chain spot + let chained_y = network_interface.position(&node, &[]).expect("Chained node should have a position").y; + network_interface.disconnect_input(&InputConnector::layer_secondary_input(layer), &[]); + assert!(!network_interface.is_chain(&node, &[]), "Disconnecting should break the chain"); + assert!(network_interface.is_absolute(&node, &[])); + assert_eq!(network_interface.position(&node, &[]).map(|position| position.y), Some(chained_y)); + + assert_invariants(&editor, "after forming and breaking a chain"); +} + +#[tokio::test] +async fn move_layer_to_stack_builds_the_layer_stack() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let artboard = NodeId::new(); + editor.handle_message(new_artboard_message(artboard)).await; + + let first = editor.create_node_by_name_at(merge_definition(), 0, 30).await; + let second = editor.create_node_by_name_at(merge_definition(), 0, 40).await; + + let network_interface = &mut editor.active_document_mut().network_interface; + network_interface.set_to_node_or_layer(&first, &[], true); + network_interface.set_to_node_or_layer(&second, &[], true); + + let artboard_layer = LayerNodeIdentifier::new(artboard, network_interface); + let first_layer = LayerNodeIdentifier::new(first, network_interface); + let second_layer = LayerNodeIdentifier::new(second, network_interface); + + network_interface.move_layer_to_stack(first_layer, artboard_layer, 0, &[]); + let children = artboard_layer.children(network_interface.document_metadata()).collect::>(); + assert_eq!(children, vec![first_layer], "The first moved layer should become the artboard's only child"); + + network_interface.move_layer_to_stack(second_layer, artboard_layer, 1, &[]); + let children = artboard_layer.children(network_interface.document_metadata()).collect::>(); + assert_eq!(children, vec![first_layer, second_layer], "The second layer should be inserted below the first"); + assert!(network_interface.is_stack(&second, &[]), "A layer below a sibling should be stack positioned"); + + assert_invariants(&editor, "after moving two layers into an artboard"); +} + +#[tokio::test] +async fn drag_offsets_do_not_outlive_programmatic_shifts() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let artboard = NodeId::new(); + editor.handle_message(new_artboard_message(artboard)).await; + + let first = editor.create_node_by_name_at(merge_definition(), 0, 30).await; + let second = editor.create_node_by_name_at(merge_definition(), 0, 40).await; + let third = editor.create_node_by_name_at(merge_definition(), 0, 50).await; + + let network_interface = &mut editor.active_document_mut().network_interface; + network_interface.set_to_node_or_layer(&first, &[], true); + network_interface.set_to_node_or_layer(&second, &[], true); + network_interface.set_to_node_or_layer(&third, &[], true); + + let artboard_layer = LayerNodeIdentifier::new(artboard, network_interface); + network_interface.move_layer_to_stack(LayerNodeIdentifier::new(first, network_interface), artboard_layer, 0, &[]); + network_interface.move_layer_to_stack(LayerNodeIdentifier::new(second, network_interface), artboard_layer, 1, &[]); + network_interface.move_layer_to_stack(LayerNodeIdentifier::new(third, network_interface), artboard_layer, 2, &[]); + + // Making room while inserting into the stack pushes neighbors with drag-offset bookkeeping that must not outlive the operation + for node_id in [first, second, third] { + assert_eq!(network_interface.drag_offset(&node_id, &[]), 0, "Inserting into a stack should not leave a drag offset on {node_id}"); + } + + // Deleting the middle layer collapses the stack upward, which must also leave no offsets behind + network_interface.delete_nodes(vec![second], false, &[]); + assert_eq!(network_interface.drag_offset(&third, &[]), 0, "Collapsing the deleted layer's space should not leave a drag offset"); + + // A later nudge must move the survivor by exactly one unit, without replaying any restore toward its pre-collapse position + editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![third] }).await; + let network_interface = &editor.active_document().network_interface; + let before = network_interface.position(&third, &[]).expect("Surviving layer should have a position"); + editor + .handle_message(NodeGraphMessage::ShiftSelectedNodes { + direction: Direction::Down, + rubber_band: false, + }) + .await; + let network_interface = &editor.active_document().network_interface; + let after = network_interface.position(&third, &[]).expect("Surviving layer should have a position"); + assert_eq!(after.y - before.y, 1, "A single nudge should move the layer exactly one unit"); + + assert_invariants(&editor, "after stack pushes, a delete collapse, and a nudge"); +} + +#[tokio::test] +async fn signature_edits_keep_parallel_metadata_in_sync() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let merge = editor.create_node_by_name_at(merge_definition(), 0, 0).await; + let path = vec![merge]; + + let network_interface = &mut editor.active_document_mut().network_interface; + let initial_imports = network_interface.number_of_imports(&path); + let initial_exports = network_interface.number_of_exports(&path); + + network_interface.add_import(TaggedValue::None, true, -1, "Extra import", "", &path); + assert_eq!(network_interface.number_of_imports(&path), initial_imports + 1); + assert_invariants(&editor, "after adding an import"); + + let network_interface = &mut editor.active_document_mut().network_interface; + network_interface.add_export(TaggedValue::None, -1, "Extra export", &path); + assert_eq!(network_interface.number_of_exports(&path), initial_exports + 1); + assert_invariants(&editor, "after adding an export"); + + let network_interface = &mut editor.active_document_mut().network_interface; + network_interface.reorder_import(initial_imports, 0, &path); + assert_invariants(&editor, "after reordering an import to the front"); + + let network_interface = &mut editor.active_document_mut().network_interface; + network_interface.remove_import(0, &path); + assert_eq!(network_interface.number_of_imports(&path), initial_imports); + assert_invariants(&editor, "after removing the reordered import"); + + let network_interface = &mut editor.active_document_mut().network_interface; + network_interface.remove_export(initial_exports, &path); + assert_eq!(network_interface.number_of_exports(&path), initial_exports); + assert_invariants(&editor, "after removing the added export"); +} + +#[tokio::test] +async fn toggle_preview_transitions_with_a_connected_export() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let artboard = NodeId::new(); + editor.handle_message(new_artboard_message(artboard)).await; + let node = editor.create_node_by_name_at(rectangle_definition(), 0, 20).await; + + let network_interface = &mut editor.active_document_mut().network_interface; + let export_node = |network_interface: &super::NodeNetworkInterface| network_interface.input_from_connector(&InputConnector::Export(0), &[]).and_then(|input| input.as_node()); + assert_eq!(export_node(network_interface), Some(artboard)); + + // Previewing a node remembers the artboard as the connection to restore + network_interface.toggle_preview(node, &[]); + assert_eq!(export_node(network_interface), Some(node)); + assert_eq!( + network_interface.previewing(&[]), + Previewing::Yes { + root_node_to_restore: Some(RootNode { node_id: artboard, output_index: 0 }) + } + ); + + // Toggling the previewed node again restores the artboard connection + network_interface.toggle_preview(node, &[]); + assert_eq!(export_node(network_interface), Some(artboard)); + assert_eq!(network_interface.previewing(&[]), Previewing::No); + + // Toggling the restore node while previewing promotes it to the export with nothing left to restore + network_interface.toggle_preview(node, &[]); + network_interface.toggle_preview(artboard, &[]); + assert_eq!(export_node(network_interface), Some(artboard)); + assert_eq!(network_interface.previewing(&[]), Previewing::Yes { root_node_to_restore: None }); + + // Toggling it once more ends the preview by disconnecting the export entirely + network_interface.toggle_preview(artboard, &[]); + assert_eq!(export_node(network_interface), None); + assert_eq!(network_interface.previewing(&[]), Previewing::No); + + assert_invariants(&editor, "after cycling through the preview states"); +} diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/deserialization.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/deserialization.rs index 5e824e2ad7..20927b20b0 100644 --- a/editor/src/messages/portfolio/document/utility_types/network_interface/deserialization.rs +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/deserialization.rs @@ -72,7 +72,6 @@ impl From for DocumentNodePersisten input_name: properties_row.input_name, input_description: properties_row.input_description, }, - ..Default::default() }) } DocumentNodePersistentMetadataHasPrimaryOutput { diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/hit_tests.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/hit_tests.rs new file mode 100644 index 0000000000..6fa49111b9 --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/hit_tests.rs @@ -0,0 +1,379 @@ +use super::*; + +// Helper functions for mutable getters +impl NodeNetworkInterface { + pub fn upstream_chain_nodes(&self, network_path: &[NodeId]) -> Vec { + let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { + log::error!("Could not get selected nodes in upstream_chain_nodes"); + return Vec::new(); + }; + let mut all_selected_nodes = selected_nodes.selected_nodes().cloned().collect::>(); + for selected_node_id in selected_nodes.selected_nodes() { + if self.is_layer(selected_node_id, network_path) { + let unique_upstream_chain = self + .upstream_flow_back_from_nodes(vec![*selected_node_id], network_path, FlowType::HorizontalFlow) + .skip(1) + .take_while(|node_id| self.is_chain(node_id, network_path)) + .filter(|upstream_node| all_selected_nodes.iter().all(|new_selected_node| new_selected_node != upstream_node)) + .collect::>(); + all_selected_nodes.extend(unique_upstream_chain); + } + } + all_selected_nodes + } + + pub fn collect_frontend_click_targets(&self, network_path: &[NodeId]) -> FrontendClickTargets { + let mut all_node_click_targets = Vec::new(); + let mut connector_click_targets = Vec::new(); + let mut icon_click_targets = Vec::new(); + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in collect_frontend_click_targets"); + return FrontendClickTargets::default(); + }; + let nodes = network_metadata.persistent_metadata.node_metadata.keys().copied().collect::>(); + self.with_import_export_ports(network_path, |import_export_click_targets| { + for port in import_export_click_targets.click_targets() { + if let ClickTargetType::Path(path) = port.target_type() { + connector_click_targets.push(path.to_svg()); + } + } + }); + nodes.into_iter().for_each(|node_id| { + self.with_node_click_targets(&node_id, network_path, |node_click_targets| { + let mut node_path = String::new(); + + if let ClickTargetType::Path(path) = node_click_targets.node_click_target.target_type() { + node_path.push_str(path.to_svg().as_str()) + } + all_node_click_targets.push((node_id, node_path)); + for port in node_click_targets.port_click_targets.click_targets() { + if let ClickTargetType::Path(path) = port.target_type() { + connector_click_targets.push(path.to_svg()); + } + } + if let NodeTypeClickTargets::Layer(layer_metadata) = &node_click_targets.node_type_metadata { + // Visibility button (eye icon) + if let ClickTargetType::Path(path) = layer_metadata.visibility_click_target.target_type() { + icon_click_targets.push(path.to_svg()); + } + // Lock button (padlock icon), only when the layer is locked + if let Some(lock_click_target) = &layer_metadata.lock_click_target + && let ClickTargetType::Path(path) = lock_click_target.target_type() + { + icon_click_targets.push(path.to_svg()); + } + // Drag grip (dotted symbol) + if let ClickTargetType::Path(path) = layer_metadata.grip_click_target.target_type() { + icon_click_targets.push(path.to_svg()); + } + } + }); + }); + let mut layer_click_targets = Vec::new(); + let mut node_click_targets = Vec::new(); + all_node_click_targets.into_iter().for_each(|(node_id, path)| { + if self.is_layer(&node_id, network_path) { + layer_click_targets.push(path); + } else { + node_click_targets.push(path); + } + }); + + let bounds = self.all_nodes_bounding_box(network_path).unwrap_or([DVec2::ZERO, DVec2::ZERO]); + let all_nodes_bounding_box = rectangle_path(bounds[0], bounds[1]).to_svg(); + + let mut modify_import_export = Vec::new(); + self.with_modify_import_export(network_path, |modify_import_export_click_targets| { + for click_target in modify_import_export_click_targets + .remove_imports_exports + .click_targets() + .chain(modify_import_export_click_targets.reorder_imports_exports.click_targets()) + { + if let ClickTargetType::Path(path) = click_target.target_type() { + modify_import_export.push(path.to_svg()); + } + } + }); + FrontendClickTargets { + node_click_targets, + layer_click_targets, + connector_click_targets, + icon_click_targets, + all_nodes_bounding_box, + modify_import_export, + } + } + + pub fn set_document_to_viewport_transform(&mut self, transform: DAffine2) { + self.document_metadata.document_to_viewport = transform; + } + + pub fn is_eligible_to_be_layer(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "is_eligible_to_be_layer", |view| view.is_eligible_to_be_layer(node_id)).unwrap_or_default() + } + + pub fn node_graph_ptz(&self, network_path: &[NodeId]) -> Option<&PTZ> { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in node_graph_ptz_mut"); + return None; + }; + Some(&network_metadata.persistent_metadata.navigation_metadata.node_graph_ptz) + } + + pub fn node_graph_ptz_mut(&mut self, network_path: &[NodeId]) -> Option<&mut PTZ> { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in node_graph_ptz_mut"); + return None; + }; + Some(&mut network_metadata.persistent_metadata.navigation_metadata.node_graph_ptz) + } + + // TODO: Optimize getting click target intersections from click by using a spacial data structure like a quadtree instead of linear search + /// Click target getter methods + pub fn node_from_click(&self, click: DVec2, network_path: &[NodeId]) -> Option { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in node_from_click"); + return None; + }; + let Some(network) = self.nested_network(network_path) else { + log::error!("Could not get nested network in node_from_click"); + return None; + }; + + let point = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.inverse().transform_point2(click); + let nodes = network.nodes.keys().copied().collect::>(); + let clicked_nodes = nodes + .iter() + .filter(|node_id| { + self.with_node_click_targets(node_id, network_path, |transient_node_metadata| { + transient_node_metadata.node_click_target.intersect_point_no_stroke(point) + }) == Some(true) + }) + .cloned() + .collect::>(); + // Since nodes are placed on top of layer chains, find the first non layer node that was clicked, and if there way no non layer nodes clicked, then find the first layer node that was clicked + clicked_nodes + .iter() + .find_map(|node_id| { + let Some(node_metadata) = self.network_metadata(network_path)?.persistent_metadata.node_metadata.get(node_id) else { + log::error!("Could not get node_metadata for node {node_id}"); + return None; + }; + if !node_metadata.persistent_metadata.is_layer() { Some(*node_id) } else { None } + }) + .or_else(|| clicked_nodes.into_iter().next()) + } + + pub fn layer_click_target_from_click(&self, click: DVec2, click_target_type: LayerClickTargetTypes, network_path: &[NodeId]) -> Option { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in visibility_from_click"); + return None; + }; + let Some(network) = self.nested_network(network_path) else { + log::error!("Could not get nested network in visibility_from_click"); + return None; + }; + + let point = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.inverse().transform_point2(click); + let node_ids: Vec<_> = network.nodes.keys().copied().collect(); + + node_ids + .iter() + .filter_map(|node_id| { + self.with_node_click_targets(node_id, network_path, |transient_node_metadata| { + if let NodeTypeClickTargets::Layer(layer) = &transient_node_metadata.node_type_metadata { + match click_target_type { + LayerClickTargetTypes::Visibility => layer.visibility_click_target.intersect_point_no_stroke(point).then_some(*node_id), + LayerClickTargetTypes::Lock => layer.lock_click_target.as_ref().and_then(|target| target.intersect_point_no_stroke(point).then_some(*node_id)), + LayerClickTargetTypes::Grip => layer.grip_click_target.intersect_point_no_stroke(point).then_some(*node_id), + LayerClickTargetTypes::Name => layer.name_click_target.as_ref().and_then(|target| target.intersect_point_no_stroke(point).then_some(*node_id)), + } + } else { + None + } + }) + .flatten() + }) + .next() + } + + pub fn input_connector_from_click(&self, click: DVec2, network_path: &[NodeId]) -> Option { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in input_connector_from_click"); + return None; + }; + let Some(network) = self.nested_network(network_path) else { + log::error!("Could not get nested network in input_connector_from_click"); + return None; + }; + + let point = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.inverse().transform_point2(click); + network + .nodes + .keys() + .copied() + .collect::>() + .iter() + .filter_map(|node_id| { + self.with_node_click_targets(node_id, network_path, |transient_node_metadata| { + transient_node_metadata + .port_click_targets + .clicked_input_port_from_point(point) + .map(|port| InputConnector::node_at_index(*node_id, port)) + }) + .flatten() + }) + .next() + .or_else(|| { + self.with_import_export_ports(network_path, |import_export_ports| import_export_ports.clicked_input_port_from_point(point).map(InputConnector::Export)) + .flatten() + }) + } + + pub fn output_connector_from_click(&self, click: DVec2, network_path: &[NodeId]) -> Option { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in output_connector_from_click"); + return None; + }; + let Some(network) = self.nested_network(network_path) else { + log::error!("Could not get nested network in output_connector_from_click"); + return None; + }; + + let point = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.inverse().transform_point2(click); + let nodes = network.nodes.keys().copied().collect::>(); + nodes + .iter() + .filter_map(|node_id| { + self.with_node_click_targets(node_id, network_path, |transient_node_metadata| { + transient_node_metadata + .port_click_targets + .clicked_output_port_from_point(point) + .map(|output_index| OutputConnector::node(*node_id, output_index)) + }) + .flatten() + }) + .next() + .or_else(|| { + self.with_import_export_ports(network_path, |import_export_ports| { + import_export_ports.clicked_output_port_from_point(point).map(OutputConnector::Import) + }) + .flatten() + }) + } + + pub fn input_position(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> Option { + match input_connector { + InputConnector::Node { node_id, input_index } => self + .with_node_click_targets(node_id, network_path, |transient_node_metadata| { + transient_node_metadata.port_click_targets.input_port_position(*input_index) + }) + .flatten(), + InputConnector::Export(export_index) => self + .with_import_export_ports(network_path, |import_export_ports| import_export_ports.input_port_position(*export_index)) + .flatten(), + } + } + + pub fn output_position(&self, output_connector: &OutputConnector, network_path: &[NodeId]) -> Option { + match output_connector { + OutputConnector::Node { node_id, output_index } => self + .with_node_click_targets(node_id, network_path, |transient_node_metadata| { + transient_node_metadata.port_click_targets.output_port_position(*output_index) + }) + .flatten(), + OutputConnector::Import(import_index) => self + .with_import_export_ports(network_path, |import_export_ports| import_export_ports.output_port_position(*import_index)) + .flatten(), + } + } + + /// Get the combined bounding box of the click targets of the selected nodes in the node graph in viewport space + pub fn selected_nodes_bounding_box_viewport(&self, network_path: &[NodeId]) -> Option<[DVec2; 2]> { + // Always get the bounding box for nodes in the currently viewed network + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in selected_nodes_bounding_box_viewport"); + return None; + }; + let node_graph_to_viewport = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport; + self.selected_nodes_bounding_box(network_path) + .map(|[a, b]| [node_graph_to_viewport.transform_point2(a), node_graph_to_viewport.transform_point2(b)]) + } + + pub fn selected_layers_artwork_bounding_box_viewport(&self) -> Option<[DVec2; 2]> { + self.selected_nodes() + .0 + .iter() + .filter(|node| self.is_layer(node, &[])) + .filter_map(|layer| self.document_metadata.bounding_box_viewport(LayerNodeIdentifier::new(*layer, self))) + .reduce(Quad::combine_bounds) + } + + pub fn selected_unlocked_layers_bounding_box_viewport(&self) -> Option<[DVec2; 2]> { + self.selected_nodes() + .0 + .iter() + .filter(|node| self.is_layer(node, &[]) && !self.is_locked(node, &[])) + .filter_map(|layer| self.document_metadata.bounding_box_viewport(LayerNodeIdentifier::new(*layer, self))) + .reduce(Quad::combine_bounds) + } + + /// Get the combined bounding box of the click targets of the selected nodes in the node graph in layer space + pub fn selected_nodes_bounding_box(&self, network_path: &[NodeId]) -> Option<[DVec2; 2]> { + let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { + log::error!("Could not get selected nodes in selected_nodes_bounding_box_viewport"); + return None; + }; + selected_nodes + .selected_nodes() + .cloned() + .collect::>() + .iter() + .filter_map(|node_id| self.node_bounding_box(node_id, network_path)) + .reduce(graphene_std::renderer::Quad::combine_bounds) + } + + /// Gets the bounding box in viewport coordinates for each node in the node graph + pub fn graph_bounds_viewport_space(&self, network_path: &[NodeId]) -> Option<[DVec2; 2]> { + let bounds = self.all_nodes_bounding_box(network_path)?; + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in graph_bounds_viewport_space"); + return None; + }; + + let node_graph_to_viewport = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport; + Some((node_graph_to_viewport * Quad::from_box(bounds)).bounding_box()) + } + + pub fn collect_layer_widths(&self, network_path: &[NodeId]) -> (HashMap, HashMap, HashMap) { + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in collect_layer_widths"); + return (HashMap::new(), HashMap::new(), HashMap::new()); + }; + let nodes = network_metadata + .persistent_metadata + .node_metadata + .keys() + .filter_map(|node_id| if self.is_layer(node_id, network_path) { Some(*node_id) } else { None }) + .collect::>(); + let layer_widths = nodes + .iter() + .filter_map(|node_id| self.layer_width(node_id, network_path).map(|layer_width| (*node_id, layer_width))) + .collect::>(); + let chain_widths = nodes.iter().map(|node_id| (*node_id, self.chain_width(node_id, network_path))).collect::>(); + let has_left_input_wire = nodes + .iter() + .map(|node_id| { + ( + *node_id, + !self + .upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalFlow) + .skip(1) + .all(|node_id| self.is_chain(&node_id, network_path)), + ) + }) + .collect::>(); + + (layer_widths, chain_widths, has_left_input_wire) + } +} diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/layout.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/layout.rs new file mode 100644 index 0000000000..bba723ae2f --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/layout.rs @@ -0,0 +1,1107 @@ +use super::*; + +impl NodeNetworkInterface { + /// Sets the position of a node to an absolute position + pub(crate) fn set_absolute_position(&mut self, node_id: &NodeId, position: IVec2, network_path: &[NodeId]) { + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get node_metadata for node {node_id}"); + return; + }; + + if let NodeTypePersistentMetadata::Node(node_metadata) = &mut node_metadata.persistent_metadata.node_type_metadata { + if node_metadata.position == NodePosition::Absolute(position) { + return; + } + node_metadata.position = NodePosition::Absolute(position); + self.transaction_modified(); + } else if let NodeTypePersistentMetadata::Layer(layer_metadata) = &mut node_metadata.persistent_metadata.node_type_metadata { + if layer_metadata.position == LayerPosition::Absolute(position) { + return; + } + layer_metadata.position = LayerPosition::Absolute(position); + self.transaction_modified(); + } + } + + /// Sets the position of a layer to a stack position + pub fn set_stack_position(&mut self, node_id: &NodeId, y_offset: u32, network_path: &[NodeId]) { + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get node_metadata for node {node_id}"); + return; + }; + match &mut node_metadata.persistent_metadata.node_type_metadata { + NodeTypePersistentMetadata::Layer(layer_metadata) => { + if layer_metadata.position == LayerPosition::Stack(y_offset) { + return; + } + layer_metadata.position = LayerPosition::Stack(y_offset); + self.transaction_modified(); + } + _ => { + log::error!("Could not set stack position for non layer node {node_id}"); + } + } + self.unload_upstream_node_click_targets(vec![*node_id], network_path); + } + + /// Sets the position of a node to a stack position without changing its y offset + pub fn set_stack_position_calculated_offset(&mut self, node_id: &NodeId, downstream_layer: &NodeId, network_path: &[NodeId]) { + let Some(node_position) = self.position(node_id, network_path) else { + log::error!("Could not get node position for node {node_id}"); + return; + }; + let Some(downstream_position) = self.position(downstream_layer, network_path) else { + log::error!("Could not get downstream position for node {downstream_layer}"); + return; + }; + + self.set_stack_position(node_id, (node_position.y - downstream_position.y - STACK_VERTICAL_GAP).max(0) as u32, network_path); + } + + /// Sets the position of a node to a chain position + pub fn set_chain_position(&mut self, node_id: &NodeId, network_path: &[NodeId]) { + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get node_metadata for node {node_id}"); + return; + }; + // Set any absolute nodes to chain positioning + if let NodeTypePersistentMetadata::Node(NodePersistentMetadata { position }) = &mut node_metadata.persistent_metadata.node_type_metadata { + if *position == NodePosition::Chain { + return; + } + *position = NodePosition::Chain; + self.transaction_modified(); + } + // If there is an upstream layer then stop breaking the chain + else { + log::error!("Could not set chain position for layer node {node_id}"); + } + self.unload_upstream_node_click_targets(vec![*node_id], network_path); + // Reload click target of the layer which encapsulate the chain + if let Some(downstream_layer) = self.downstream_layer_for_chain_node(node_id, network_path) { + self.unload_node_click_targets(&downstream_layer, network_path); + } + self.unload_all_nodes_bounding_box(network_path); + } + + pub(crate) fn valid_upstream_chain_nodes(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> Vec { + let InputConnector::Node { + node_id: input_connector_node_id, + input_index, + } = input_connector + else { + return Vec::new(); + }; + let mut set_position_to_chain = Vec::new(); + if self.is_layer(input_connector_node_id, network_path) && *input_index == 1 || self.is_chain(input_connector_node_id, network_path) && *input_index == 0 { + let mut downstream_id = *input_connector_node_id; + for upstream_node in self + .upstream_flow_back_from_nodes(vec![*input_connector_node_id], network_path, FlowType::HorizontalFlow) + .skip(1) + .collect::>() + { + if self.is_layer(&upstream_node, network_path) || self.hidden_primary_output(&upstream_node, network_path) { + break; + } + let downstream_connection_count = self + .with_outward_wires(network_path, |outward_wires| { + outward_wires.get(&OutputConnector::primary_output(upstream_node)).map(|connections| connections.len()) + }) + .flatten(); + let Some(downstream_connection_count) = downstream_connection_count else { + log::error!("Could not get outward wires in try_set_upstream_to_chain"); + break; + }; + if downstream_connection_count != 1 { + break; + } + let downstream_position = self.position(&downstream_id, network_path); + let upstream_node_position = self.position(&upstream_node, network_path); + if let (Some(input_connector_position), Some(new_upstream_node_position)) = (downstream_position, upstream_node_position) { + if input_connector_position.y == new_upstream_node_position.y + && new_upstream_node_position.x >= input_connector_position.x - 9 + && new_upstream_node_position.x <= input_connector_position.x + { + set_position_to_chain.push(upstream_node); + } else { + break; + } + } else { + break; + } + downstream_id = upstream_node; + } + } + set_position_to_chain + } + + /// Input connector is the input to the layer + pub fn try_set_upstream_to_chain(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) { + // If the new input is to a non layer node on the same y position as the input connector, or the input connector is the side input of a layer, then set it to chain position + let valid_upstream_chain_nodes = self.valid_upstream_chain_nodes(input_connector, network_path); + + for node_id in &valid_upstream_chain_nodes { + self.set_chain_position(node_id, network_path); + } + + // Reload click target of the layer which used to encapsulate the node + if !valid_upstream_chain_nodes.is_empty() { + let mut downstream_layer = Some(input_connector.node_id().unwrap()); + while let Some(downstream_layer_id) = downstream_layer { + if downstream_layer_id == input_connector.node_id().unwrap() || !self.is_layer(&downstream_layer_id, network_path) { + let Some(outward_wires) = self.outward_wires(network_path) else { + log::error!("Could not get outward wires in try_set_upstream_to_chain"); + downstream_layer = None; + break; + }; + downstream_layer = outward_wires + .get(&OutputConnector::primary_output(downstream_layer_id)) + .and_then(|outward_wires| if outward_wires.len() == 1 { outward_wires[0].node_id() } else { None }); + } else { + break; + } + } + if let Some(downstream_layer) = downstream_layer { + self.unload_node_click_targets(&downstream_layer, network_path); + } + } + } + + pub(crate) fn try_set_node_to_chain(&mut self, node_id: &NodeId, network_path: &[NodeId]) { + if let Some(outward_wires) = self + .outward_wires(network_path) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::primary_output(*node_id))) + .cloned() && outward_wires.len() == 1 + { + self.try_set_upstream_to_chain(&outward_wires[0], network_path) + } + } + + pub fn force_set_upstream_to_chain(&mut self, node_id: &NodeId, network_path: &[NodeId]) { + for upstream_id in self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalFlow).collect::>().iter() { + if !self.is_layer(upstream_id, network_path) + && self + .outward_wires(network_path) + .is_some_and(|outward_wires| outward_wires.get(&OutputConnector::primary_output(*upstream_id)).is_some_and(|outward_wires| outward_wires.len() == 1)) + { + self.set_chain_position(upstream_id, network_path); + } + // If there is an upstream layer then stop breaking the chain + else { + break; + } + } + } + + /// node_id is the first chain node, not the layer + pub(crate) fn set_upstream_chain_to_absolute(&mut self, node_id: &NodeId, network_path: &[NodeId]) { + let Some(downstream_layer) = self.downstream_layer_for_chain_node(node_id, network_path) else { + log::error!("Could not get downstream layer in set_upstream_chain_to_absolute"); + return; + }; + for upstream_id in self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalFlow).collect::>().iter() { + let Some(previous_position) = self.position(upstream_id, network_path) else { + log::error!("Could not get position in set_upstream_chain_to_absolute"); + return; + }; + // Set any chain nodes to absolute positioning + if self.is_chain(upstream_id, network_path) { + self.set_absolute_position(upstream_id, previous_position, network_path); + // Reload click target of the layer which used to encapsulate the chain + self.unload_node_click_targets(&downstream_layer, network_path); + } + // If there is an upstream layer then stop breaking the chain + else { + break; + } + } + } + + pub fn nodes_sorted_top_to_bottom<'a>(&mut self, node_ids: impl Iterator, network_path: &[NodeId]) -> Option> { + let mut node_ids_with_position = node_ids + .filter_map(|&node_id| { + let Some(position) = self.position(&node_id, network_path) else { + log::error!("Could not get position for node {node_id} in shift_selected_nodes"); + return None; + }; + Some((node_id, position.y)) + }) + .collect::>(); + + node_ids_with_position.sort_unstable_by(|a, b| a.1.cmp(&b.1)); + Some(node_ids_with_position.into_iter().map(|(node_id, _)| node_id).collect::>()) + } + + /// Used when moving layer by the layer panel, does not run any pushing logic. Moves all sole dependents of the layer as well. + /// Ensure that the layer is absolute position. + pub fn shift_absolute_node_position(&mut self, layer: &NodeId, shift: IVec2, network_path: &[NodeId]) { + if shift == IVec2::ZERO { + return; + } + let mut nodes_to_shift = self.upstream_nodes_below_layer(layer, network_path); + nodes_to_shift.insert(*layer); + + for node_id in nodes_to_shift { + let Some(node_to_shift_metadata) = self.node_metadata_mut(&node_id, network_path) else { + log::error!("Could not get node metadata for node {node_id} in set_layer_position"); + continue; + }; + match &mut node_to_shift_metadata.persistent_metadata.node_type_metadata { + NodeTypePersistentMetadata::Layer(layer_metadata) => { + if let LayerPosition::Absolute(layer_position) = &mut layer_metadata.position { + *layer_position += shift; + } + } + NodeTypePersistentMetadata::Node(node_metadata) => { + if let NodePosition::Absolute(node_position) = &mut node_metadata.position { + *node_position += shift; + } + } + } + } + self.transaction_modified(); + self.unload_upstream_node_click_targets(vec![*layer], network_path); + } + + pub fn shift_selected_nodes(&mut self, direction: Direction, shift_without_push: bool, network_path: &[NodeId]) { + let Some(node_ids) = self + .selected_nodes_in_nested_network(network_path) + .map(|selected_nodes| selected_nodes.selected_nodes().cloned().collect::>()) + else { + log::error!("Could not get selected nodes in shift_selected_nodes"); + return; + }; + self.shift_nodes(node_ids, direction, shift_without_push, network_path); + } + + pub(crate) fn shift_nodes(&mut self, mut node_ids: HashSet, direction: Direction, shift_without_push: bool, network_path: &[NodeId]) { + let seed_nodes = node_ids.clone(); + if !shift_without_push { + // The owned nodes of each layer are populated by the stack dependents load, which otherwise may not run until after this filter + self.try_load_stack_dependents(network_path); + for node_id in node_ids.clone() { + if self.is_layer(&node_id, network_path) { + self.with_owned_nodes_if_loaded(&node_id, network_path, |owned_nodes| { + for owned_node in owned_nodes { + node_ids.remove(owned_node); + } + }); + }; + } + } + + for selected_node in &node_ids.clone() { + // Deselect chain nodes upstream from a selected layer + if self.is_chain(selected_node, network_path) + && self + .downstream_layer_for_chain_node(selected_node, network_path) + .is_some_and(|downstream_layer| node_ids.contains(&downstream_layer)) + { + node_ids.remove(selected_node); + } + } + + // If shifting up without a push, cancel the shift if there is a stack node that cannot move up + if direction == Direction::Up && shift_without_push { + for node_id in &node_ids { + let Some(node_metadata) = self.node_metadata(node_id, network_path) else { + log::error!("Could not get node metadata for node {node_id} in shift_selected_nodes"); + return; + }; + if let NodeTypePersistentMetadata::Layer(layer_metadata) = &node_metadata.persistent_metadata.node_type_metadata + && let LayerPosition::Stack(offset) = layer_metadata.position + { + // If the upstream layer is selected, then skip + let Some(outward_wires) = self.outward_wires(network_path).and_then(|outward_wires| outward_wires.get(&OutputConnector::primary_output(*node_id))) else { + log::error!("Could not get outward wires in shift_selected_nodes"); + return; + }; + if let Some(downstream_node_id) = outward_wires.first().and_then(|input_connector| input_connector.node_id()) + && node_ids.contains(&downstream_node_id) + { + continue; + } + // Offset cannot be negative, so cancel the shift + if offset == 0 { + return; + } + } + } + } + + let Some(mut sorted_node_ids) = self.nodes_sorted_top_to_bottom(node_ids.iter(), network_path) else { + return; + }; + + if sorted_node_ids.len() != node_ids.len() { + log::error!("Could not get position for all nodes in shift_selected_nodes"); + return; + } + + // If shifting down, then the lowest node (greatest y value) should be shifted first + if direction == Direction::Down { + sorted_node_ids.reverse(); + } + + // Ensure the top of each stack is only shifted left/right once (this is only for performance) + let mut shifted_absolute_layers = Vec::new(); + + let mut shifted_nodes = HashSet::new(); + + let shift_sign = if direction == Direction::Left || direction == Direction::Up { -1 } else { 1 }; + + for node_id in &sorted_node_ids { + match direction { + Direction::Left | Direction::Right => { + // If the node is a non layer, then directly shift it + if !self.is_layer(node_id, network_path) { + self.try_shift_node(node_id, IVec2::new(shift_sign, 0), &mut shifted_nodes, network_path); + } else { + // Get the downstream absolute layer (inclusive) + let mut downstream_absolute_layer = *node_id; + loop { + if self.is_absolute(&downstream_absolute_layer, network_path) { + break; + } + let Some(downstream_node) = self + .outward_wires(network_path) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::primary_output(downstream_absolute_layer))) + .and_then(|downstream_nodes| downstream_nodes.first()) + .and_then(|downstream_node| downstream_node.node_id()) + else { + log::error!("Could not get downstream node when deselecting stack layer in shift_selected_nodes"); + break; + }; + downstream_absolute_layer = downstream_node; + } + + // Shift the upstream nodes below the stack layers only once + if !shifted_absolute_layers.contains(&downstream_absolute_layer) { + shifted_absolute_layers.push(downstream_absolute_layer); + + self.try_shift_node(&downstream_absolute_layer, IVec2::new(shift_sign, 0), &mut shifted_nodes, network_path); + + if !shift_without_push { + for stack_nodes in self + .upstream_flow_back_from_nodes(vec![downstream_absolute_layer], network_path, FlowType::PrimaryFlow) + .take_while(|layer| self.is_layer(layer, network_path)) + .collect::>() + { + for sole_dependent in &self.upstream_nodes_below_layer(&stack_nodes, network_path) { + if self.is_absolute(sole_dependent, network_path) { + self.try_shift_node(sole_dependent, IVec2::new(shift_sign, 0), &mut shifted_nodes, network_path); + } + } + } + } + } + } + } + Direction::Up | Direction::Down => { + if !shift_without_push && self.is_layer(node_id, network_path) { + self.shift_node_or_parent(node_id, shift_sign, &mut shifted_nodes, network_path); + } else if !shifted_nodes.contains(node_id) { + shifted_nodes.insert(*node_id); + self.shift_node(node_id, IVec2::new(0, shift_sign), network_path); + + if self.with_stack_dependents_if_loaded(network_path, |stack_dependents| matches!(stack_dependents.get(node_id), Some(LayerOwner::None))) == Some(true) { + self.add_drag_offset(node_id, shift_sign, network_path); + } + + // Shift the upstream layer so that it stays in the same place + if self.is_layer(node_id, network_path) { + let upstream_layer = { + self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::PrimaryFlow) + .nth(1) + .filter(|upstream_node| self.is_stack(upstream_node, network_path)) + }; + if let Some(upstream_layer) = upstream_layer { + self.shift_node(&upstream_layer, IVec2::new(0, -shift_sign), network_path); + } + } + } + } + } + } + + let Some(stack_dependents) = self + .stack_dependents(network_path) + .map(|stack_dependents| stack_dependents.iter().map(|(node_id, owner)| (*node_id, owner.clone())).collect::>()) + else { + log::error!("Could not load stack dependents in shift_selected_nodes"); + return; + }; + + let mut stack_dependents_with_position = stack_dependents + .iter() + .filter_map(|(node_id, owner)| { + let LayerOwner::None = owner else { + return None; + }; + let offset = self.drag_offset(node_id, network_path); + if offset == 0 { + return None; + } + if seed_nodes + .iter() + .any(|seed_node| seed_node == node_id || self.with_owned_nodes_if_loaded(node_id, network_path, |owned_nodes| owned_nodes.contains(seed_node)) == Some(true)) + { + return None; + }; + let Some(position) = self.position(node_id, network_path) else { + log::error!("Could not get position for node {node_id} in shift_selected_nodes"); + return None; + }; + Some((*node_id, offset, position.y)) + }) + .collect::>(); + + stack_dependents_with_position.sort_unstable_by(|a, b| { + a.1.signum().cmp(&b.1.signum()).then_with(|| { + // If the node has a positive offset, then it is shifted up, so shift the top nodes first + if a.1.signum() == 1 { a.2.cmp(&b.2) } else { b.2.cmp(&a.2) } + }) + }); + + // Try shift every node that is offset from its original position + for &(ref node_id, mut offset, _) in stack_dependents_with_position.iter() { + while offset != 0 { + if self.check_collision_with_stack_dependents(node_id, -offset.signum(), network_path).is_empty() { + self.vertical_shift_with_push(node_id, -offset.signum(), &mut HashSet::new(), network_path); + offset += -offset.signum(); + } else { + break; + } + } + } + } + + fn try_shift_node(&mut self, node_id: &NodeId, shift: IVec2, shifted_nodes: &mut HashSet, network_path: &[NodeId]) { + if !shifted_nodes.contains(node_id) { + self.shift_node(node_id, shift, network_path); + shifted_nodes.insert(*node_id); + } + } + + fn vertical_shift_with_push(&mut self, node_id: &NodeId, shift_sign: i32, shifted_nodes: &mut HashSet, network_path: &[NodeId]) { + // Do not shift a node more than once + if shifted_nodes.contains(node_id) { + return; + } + shifted_nodes.insert(*node_id); + + let nodes_to_shift = self.check_collision_with_stack_dependents(node_id, shift_sign, network_path); + + for node_to_shift in nodes_to_shift { + self.shift_node_or_parent(&node_to_shift.0, shift_sign, shifted_nodes, network_path); + } + + self.shift_node(node_id, IVec2::new(0, shift_sign), network_path); + + match self.with_stack_dependents_if_loaded(network_path, |stack_dependents| stack_dependents.get(node_id).cloned()) { + Some(Some(LayerOwner::None)) => self.add_drag_offset(node_id, shift_sign, network_path), + Some(Some(LayerOwner::Layer(_))) => log::error!("Node being shifted with a push should not be owned"), + Some(None) => log::error!("Could not get layer owner in vertical_shift_with_push for node {node_id}"), + None => log::error!("Stack dependents should be loaded in vertical_shift_with_push"), + } + + // Shift the upstream layer so that it stays in the same place + if self.is_layer(node_id, network_path) { + let upstream_layer = { + self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::PrimaryFlow) + .nth(1) + .filter(|upstream_node| self.is_stack(upstream_node, network_path)) + }; + if let Some(upstream_layer) = upstream_layer { + self.shift_node(&upstream_layer, IVec2::new(0, -shift_sign), network_path); + } + } + + // Shift the nodes that are owned by the layer (if any) + if let Some(owned_nodes) = self.with_owned_nodes_if_loaded(node_id, network_path, |owned_nodes| owned_nodes.clone()) { + for owned_node in owned_nodes { + if self.is_absolute(&owned_node, network_path) { + self.try_shift_node(&owned_node, IVec2::new(0, shift_sign), shifted_nodes, network_path); + } + } + } + } + + pub(crate) fn check_collision_with_stack_dependents(&mut self, node_id: &NodeId, shift_sign: i32, network_path: &[NodeId]) -> Vec<(NodeId, LayerOwner)> { + self.try_load_all_node_click_targets(network_path); + self.try_load_stack_dependents(network_path); + + // Check collisions and for all owned nodes and recursively shift them + let nodes_to_shift = self.with_stack_dependents_if_loaded(network_path, |stack_dependents| { + // Hot path during drags: borrow the owned nodes for the sweep rather than cloning them per call + let collect_collisions = |owned_nodes: &HashSet| { + let mut nodes_to_shift = Vec::new(); + + for current_node in owned_nodes.iter().chain(std::iter::once(node_id)) { + for node_to_check_collision in stack_dependents { + // Do not check collision between any of the owned nodes or the shifted node + if owned_nodes.contains(node_to_check_collision.0) || node_to_check_collision.0 == node_id { + continue; + } + + if node_to_check_collision.0 == current_node { + continue; + } + let Some(mut current_node_bounding_box) = self.try_get_node_bounding_box(current_node, network_path) else { + log::error!("Could not get bounding box for node {node_id} in shift_selected_nodes"); + continue; + }; + + let Some(node_bounding_box) = self.try_get_node_bounding_box(node_to_check_collision.0, network_path) else { + log::error!("Could not get bounding box for node {node_to_check_collision:?} in shift_selected_nodes"); + continue; + }; + // If the nodes do not intersect horizontally, then there is no collision + if current_node_bounding_box[1].x < node_bounding_box[0].x || current_node_bounding_box[0].x > node_bounding_box[1].x { + continue; + } + // Do not check collision if the nodes are currently intersecting + if current_node_bounding_box[1].y >= node_bounding_box[0].y - 0.1 && current_node_bounding_box[0].y <= node_bounding_box[1].y + 0.1 { + continue; + } + + current_node_bounding_box[1].y += GRID_SIZE as f64 * shift_sign as f64; + current_node_bounding_box[0].y += GRID_SIZE as f64 * shift_sign as f64; + + let collision = current_node_bounding_box[1].y >= node_bounding_box[0].y - 0.1 && current_node_bounding_box[0].y <= node_bounding_box[1].y + 0.1; + if collision { + nodes_to_shift.push((*node_to_check_collision.0, node_to_check_collision.1.clone())); + } + } + } + + nodes_to_shift + }; + + self.with_owned_nodes_if_loaded(node_id, network_path, collect_collisions) + .unwrap_or_else(|| collect_collisions(&HashSet::new())) + }); + + let Some(nodes_to_shift) = nodes_to_shift else { + log::error!("Could not load stack dependents in shift_selected_nodes"); + return Vec::new(); + }; + nodes_to_shift + } + + fn shift_node_or_parent(&mut self, node_id: &NodeId, shift_sign: i32, shifted_nodes: &mut HashSet, network_path: &[NodeId]) { + let Some(stack_dependents) = self.stack_dependents(network_path) else { + log::error!("Could not load stack dependents in shift_selected_nodes"); + return; + }; + let Some(layer_owner) = stack_dependents.get(node_id) else { + log::error!("Could not get layer owner in shift_node_or_parent for node {node_id}"); + return; + }; + match layer_owner { + LayerOwner::Layer(layer_owner) => { + let layer_owner = *layer_owner; + self.shift_node_or_parent(&layer_owner, shift_sign, shifted_nodes, network_path) + } + LayerOwner::None => self.vertical_shift_with_push(node_id, shift_sign, shifted_nodes, network_path), + } + } + + /// Shifts a node by a certain offset without the auto layout system. If the node is a layer in a stack, the y_offset is shifted. If the node is a node in a chain, its position gets set to absolute. + // TODO: Check for unnecessary unloading of click targets + pub fn shift_node(&mut self, node_id: &NodeId, shift: IVec2, network_path: &[NodeId]) { + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get node_metadata for node {node_id}"); + return; + }; + if let NodeTypePersistentMetadata::Layer(layer_metadata) = &mut node_metadata.persistent_metadata.node_type_metadata { + if let LayerPosition::Absolute(layer_position) = &mut layer_metadata.position { + *layer_position += shift; + self.transaction_modified(); + } else if let LayerPosition::Stack(y_offset) = &mut layer_metadata.position { + let shifted_y_offset = *y_offset as i32 + shift.y; + + // A layer can only be shifted to a positive y_offset + if shifted_y_offset < 0 { + log::error!( + "Space should be made above the layer before shifting it up. Layer {node_id} current y_offset: {y_offset} shift: {}", + shift.y + ); + } + if shift.x != 0 { + log::error!("Stack layer {node_id} cannot be shifted horizontally."); + } + + let new_y_offset = shifted_y_offset.max(0) as u32; + if *y_offset == new_y_offset { + return; + } + *y_offset = new_y_offset; + self.transaction_modified(); + } + // Unload click targets for all upstream nodes, since they may have been derived from the node that was shifted + self.unload_upstream_node_click_targets(vec![*node_id], network_path); + } else if let NodeTypePersistentMetadata::Node(node_metadata) = &mut node_metadata.persistent_metadata.node_type_metadata { + if let NodePosition::Absolute(node_metadata) = &mut node_metadata.position { + *node_metadata += shift; + self.transaction_modified(); + // Unload click targets for all upstream nodes, since they may have been derived from the node that was shifted + self.unload_upstream_node_click_targets(vec![*node_id], network_path); + self.try_set_node_to_chain(node_id, network_path); + } else if let NodePosition::Chain = node_metadata.position { + self.set_upstream_chain_to_absolute(node_id, network_path); + self.shift_node(node_id, shift, network_path); + } + } + // Unload click targets for all upstream nodes, since they may have been derived from the node that was shifted + self.unload_upstream_node_click_targets(vec![*node_id], network_path); + self.unload_all_nodes_bounding_box(network_path); + } + + /// Lightweight version of `move_layer_to_stack` for SVG import. Performs only the wiring + /// (connecting the layer into the stack) without any position calculation or push/collision logic. + /// Positions should be set separately after the full import tree is built. + pub fn move_layer_to_stack_for_import(&mut self, layer: LayerNodeIdentifier, mut parent: LayerNodeIdentifier, mut insert_index: usize, network_path: &[NodeId]) { + // Artboard redirection: if a non-artboard layer targets ROOT_PARENT and an artboard exists, redirect into the artboard + if let Some(first_layer) = LayerNodeIdentifier::ROOT_PARENT.children(&self.document_metadata).next() + && parent == LayerNodeIdentifier::ROOT_PARENT + && self + .reference(&layer.to_node(), network_path) + .is_none_or(|reference| reference != DefinitionIdentifier::Network("Artboard".into())) + && self.is_artboard(&first_layer.to_node(), network_path) + { + parent = first_layer; + insert_index = 0; + } + + let post_node = self.post_node_with_index(parent, insert_index, network_path); + let Some(post_node_input) = self.input_from_connector(&post_node, network_path).cloned() else { + log::error!("Could not get previous input in move_layer_to_stack_for_import"); + return; + }; + + let layer_output = NodeInput::node(layer.to_node(), 0); + + match post_node_input { + NodeInput::Value { .. } | NodeInput::Scope(_) | NodeInput::Inline(_) | NodeInput::Reflection(_) => { + // First child in the stack: wire layer output to the post_node input + self.set_input_for_import(&post_node, layer_output, network_path); + } + NodeInput::Node { .. } => { + // Subsequent child: insert layer between post_node and its current upstream... + // 1. Disconnect old upstream from post_node, wire layer output to post_node + self.set_input_for_import(&post_node, layer_output, network_path); + // 2. Wire old upstream into layer's primary (stack) input + self.set_input_for_import(&InputConnector::primary_input(layer.to_node()), post_node_input, network_path); + } + NodeInput::Import { .. } => { + log::error!("Cannot insert import layer into a parent that connects to the imports"); + } + } + } + + /// Sets a layer's position directly without triggering per-node cache invalidation. + /// Used for bulk import operations where caches are invalidated once at the end. + pub fn set_layer_position_for_import(&mut self, node_id: &NodeId, position: LayerPosition, network_path: &[NodeId]) { + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get node_metadata for node {node_id} in set_layer_position_for_import"); + return; + }; + if let NodeTypePersistentMetadata::Layer(layer_metadata) = &mut node_metadata.persistent_metadata.node_type_metadata { + layer_metadata.position = position; + self.transaction_modified(); + } + } + + /// Disconnect the layers primary output and the input to the last non layer node feeding into it through primary flow, reconnects, then moves the layer to the new layer and stack index + pub fn move_layer_to_stack(&mut self, layer: LayerNodeIdentifier, mut parent: LayerNodeIdentifier, mut insert_index: usize, network_path: &[NodeId]) { + // Prevent moving an artboard anywhere but to the ROOT_PARENT child stack + if self.is_artboard(&layer.to_node(), network_path) && parent != LayerNodeIdentifier::ROOT_PARENT { + log::error!("Artboard can only be moved to the root parent stack"); + return; + } + + // A layer is considered to be the height of that layer plus the height to the upstream layer sibling + // If a non artboard layer is attempted to be connected to the exports, and there is already an artboard connected, then connect the layer to the artboard. + if let Some(first_layer) = LayerNodeIdentifier::ROOT_PARENT.children(&self.document_metadata).next() + && parent == LayerNodeIdentifier::ROOT_PARENT + && self + .reference(&layer.to_node(), network_path) + .is_none_or(|reference| reference != DefinitionIdentifier::Network("Artboard".into())) + && self.is_artboard(&first_layer.to_node(), network_path) + { + parent = first_layer; + insert_index = 0; + } + + let Some(layer_to_move_position) = self.position(&layer.to_node(), network_path) else { + log::error!("Could not get layer_to_move_position in move_layer_to_stack"); + return; + }; + + let mut lowest_upstream_node_height = 0; + for upstream_node in self + .upstream_flow_back_from_nodes(vec![layer.to_node()], network_path, FlowType::LayerChildrenUpstreamFlow) + .collect::>() + { + let Some(upstream_node_position) = self.position(&upstream_node, network_path) else { + log::error!("Could not get upstream node position in move_layer_to_stack"); + return; + }; + lowest_upstream_node_height = lowest_upstream_node_height.max((upstream_node_position.y - layer_to_move_position.y).max(0) as u32); + } + + // If the moved layer is a child of the new parent, then get its index after the disconnect + if let Some(moved_layer_previous_index) = parent.children(&self.document_metadata).position(|child| child == layer) { + // Adjust the insert index if the layer's previous index is less than the insert index + if moved_layer_previous_index < insert_index { + insert_index -= 1; + } + } + + // Disconnect layer to move + self.remove_references_from_network(&layer.to_node(), network_path); + + let post_node = self.post_node_with_index(parent, insert_index, network_path); + + // Get the previous input to the post node before inserting the layer + let Some(post_node_input) = self.input_from_connector(&post_node, network_path).cloned() else { + log::error!("Could not get previous input in move_layer_to_stack for parent {parent:?} and insert_index {insert_index}"); + return; + }; + + let Some(previous_layer_position) = self.position(&layer.to_node(), network_path) else { + log::error!("Could not get previous layer position in move_layer_to_stack"); + return; + }; + + let after_move_post_layer_position = if let Some(post_node_id) = post_node.node_id() { + self.position(&post_node_id, network_path) + } else { + Some(IVec2::new(LAYER_INDENT_OFFSET, -STACK_VERTICAL_GAP)) + }; + + let Some(after_move_post_layer_position) = after_move_post_layer_position else { + log::error!("Could not get post node position in move_layer_to_stack"); + return; + }; + + // Get the height of the downstream node if inserting into a stack + let mut downstream_height = 0; + let inserting_into_stack = + !(post_node.input_index() == 1 || matches!(post_node, InputConnector::Export(_)) || !post_node.node_id().is_some_and(|post_node_id| self.is_layer(&post_node_id, network_path))); + if inserting_into_stack && let Some(downstream_node) = post_node.node_id() { + let Some(downstream_node_position) = self.position(&downstream_node, network_path) else { + log::error!("Could not get downstream node position in move_layer_to_stack"); + return; + }; + let mut lowest_y_position = downstream_node_position.y + STACK_VERTICAL_GAP; + + for bottom_position in self.upstream_nodes_below_layer(&downstream_node, network_path).iter().filter_map(|node_id| { + let is_layer = self.is_layer(node_id, network_path); + self.position(node_id, network_path).map(|position| position.y + if is_layer { STACK_VERTICAL_GAP } else { 2 }) + }) { + lowest_y_position = lowest_y_position.max(bottom_position); + } + downstream_height = lowest_y_position - (downstream_node_position.y + STACK_VERTICAL_GAP); + } + + let mut highest_y_position = layer_to_move_position.y; + let mut lowest_y_position = layer_to_move_position.y; + + for (bottom_position, top_position) in self.upstream_nodes_below_layer(&layer.to_node(), network_path).iter().filter_map(|node_id| { + let is_layer = self.is_layer(node_id, network_path); + let bottom_position = self.position(node_id, network_path).map(|position| position.y + if is_layer { STACK_VERTICAL_GAP } else { 2 }); + let top_position = self.position(node_id, network_path).map(|position| if is_layer { position.y - 1 } else { position.y }); + bottom_position.zip(top_position) + }) { + highest_y_position = highest_y_position.min(top_position); + lowest_y_position = lowest_y_position.max(bottom_position); + } + let height_above_layer = layer_to_move_position.y - highest_y_position + downstream_height; + let height_below_layer = lowest_y_position - layer_to_move_position.y - STACK_VERTICAL_GAP; + + // If there is an upstream node in the new location for the layer, create space for the moved layer by shifting the upstream node down + if let Some(upstream_node_id) = post_node_input.as_node() { + // Build the stack dependents from the upstream node rather than the selection so the shifting works correctly + self.unload_stack_dependents(network_path); + self.load_stack_dependents_for_nodes(vec![upstream_node_id], network_path); + + // Create the minimum amount space for the moved layer + for _ in 0..STACK_VERTICAL_GAP { + self.vertical_shift_with_push(&upstream_node_id, 1, &mut HashSet::new(), network_path); + } + + let Some(stack_position) = self.position(&upstream_node_id, network_path) else { + log::error!("Could not get stack position in move_layer_to_stack"); + self.unload_stack_dependents(network_path); + return; + }; + + let current_gap = stack_position.y - (after_move_post_layer_position.y + 2); + let target_gap = 1 + height_above_layer + 2 + height_below_layer + 1; + + for _ in 0..(target_gap - current_gap).max(0) { + self.vertical_shift_with_push(&upstream_node_id, 1, &mut HashSet::new(), network_path); + } + + self.unload_stack_dependents(network_path); + } + + // If true, this node should be inserted before the post node (toward root from the layer), and all outward wires from the pre node should be moved to its output. + let mut insert_node_after_post = false; + + // Connect the layer to a parent layer/node at the top of the stack, or a non layer node midway down the stack + if !inserting_into_stack { + match post_node_input { + // Create a new stack + NodeInput::Value { .. } | NodeInput::Scope(_) | NodeInput::Inline(_) | NodeInput::Reflection(_) => { + self.create_wire(&OutputConnector::primary_output(layer.to_node()), &post_node, network_path); + + let final_layer_position = after_move_post_layer_position + IVec2::new(-LAYER_INDENT_OFFSET, STACK_VERTICAL_GAP); + let shift = final_layer_position - previous_layer_position; + self.shift_absolute_node_position(&layer.to_node(), shift, network_path); + } + // Move to the top of a stack. + NodeInput::Node { node_id, .. } => { + let Some(stack_top_position) = self.position(&node_id, network_path) else { + log::error!("Could not get stack x position in move_layer_to_stack"); + return; + }; + + let final_layer_position = IVec2::new(stack_top_position.x, after_move_post_layer_position.y + STACK_VERTICAL_GAP + height_above_layer); + let shift = final_layer_position - previous_layer_position; + self.shift_absolute_node_position(&layer.to_node(), shift, network_path); + insert_node_after_post = true; + } + NodeInput::Import { .. } => { + log::error!("Cannot move post node to parent which connects to the imports") + } + } + } else { + match post_node_input { + // Move to the bottom of the stack + NodeInput::Value { .. } | NodeInput::Scope(_) | NodeInput::Inline(_) | NodeInput::Reflection(_) => { + let offset = after_move_post_layer_position - previous_layer_position + IVec2::new(0, STACK_VERTICAL_GAP + height_above_layer); + self.shift_absolute_node_position(&layer.to_node(), offset, network_path); + self.create_wire(&OutputConnector::primary_output(layer.to_node()), &post_node, network_path); + } + // Insert into the stack + NodeInput::Node { .. } => { + let final_layer_position = after_move_post_layer_position + IVec2::new(0, STACK_VERTICAL_GAP + height_above_layer); + let shift = final_layer_position - previous_layer_position; + self.shift_absolute_node_position(&layer.to_node(), shift, network_path); + insert_node_after_post = true; + } + NodeInput::Import { .. } => { + log::error!("Cannot move post node to parent which connects to the imports") + } + } + } + + if insert_node_after_post { + self.insert_node_between(&layer.to_node(), &post_node, 0, network_path); + + // Get the other wires which need to be moved to the output of the moved layer + let layer_input_connector = InputConnector::primary_input(layer.to_node()); + let other_outward_wires = self + .upstream_output_connector(&layer_input_connector, network_path) + .and_then(|pre_node_output| self.outward_wires(network_path).and_then(|wires| wires.get(&pre_node_output))) + .map(|other| { + other + .iter() + .filter(|other_input_connector| **other_input_connector != layer_input_connector) + .cloned() + .collect::>() + }) + .unwrap_or_default(); + + // Disconnect and reconnect + for other_outward_wire in &other_outward_wires { + self.disconnect_input(other_outward_wire, network_path); + self.create_wire(&OutputConnector::primary_output(layer.to_node()), other_outward_wire, network_path); + } + } + self.unload_upstream_node_click_targets(vec![layer.to_node()], network_path); + } + + // Insert a node onto a wire. Ensure insert_node_input_index is an exposed input + pub fn insert_node_between(&mut self, node_id: &NodeId, input_connector: &InputConnector, insert_node_input_index: usize, network_path: &[NodeId]) { + if self.number_of_displayed_inputs(node_id, network_path) == 0 { + log::error!("Cannot insert a node onto a wire with no exposed inputs"); + return; + } + + let Some(upstream_output) = self.upstream_output_connector(input_connector, network_path) else { + log::error!("Could not get upstream output in insert_node_between"); + return; + }; + + // Disconnect the previous input + self.disconnect_input(input_connector, network_path); + + // Connect the input connector to the new node + self.create_wire(&OutputConnector::primary_output(*node_id), input_connector, network_path); + + // Connect the new node to the previous node + self.create_wire(&upstream_output, &InputConnector::node_at_index(*node_id, insert_node_input_index), network_path); + } + + /// Inserts the freshly-created `node_id` onto the wire feeding `input_connector`: the previous upstream becomes the + /// new node's primary (index 0) input, and the new node feeds `input_connector`. + /// + /// When the wire is part of a layer's encapsulated primary chain, `set_input` chain-positions the new node + /// automatically. On an unencapsulated secondary-input branch (e.g. a 'Fill' node's fill input) chain positioning + /// doesn't apply, so the node would otherwise land at the graph origin; instead it's placed on the displaced + /// upstream node's spot and that whole branch is shifted left (in absolute graph space) to make room. + pub fn insert_node_before_input(&mut self, node_id: &NodeId, input_connector: &InputConnector, network_path: &[NodeId]) { + let feeder = self.upstream_output_connector(input_connector, network_path).and_then(|output| output.node_id()); + + let Some(current_input) = self.input_from_connector(input_connector, network_path).cloned() else { + log::error!("Could not get input in insert_node_before_input"); + return; + }; + + if self.input_from_connector(&InputConnector::primary_input(*node_id), network_path).is_none() { + return; + } + + self.set_input(&InputConnector::primary_input(*node_id), current_input, network_path); + self.set_input(input_connector, NodeInput::node(*node_id, 0), network_path); + + // If `set_input` chain-positioned the node (it joined a layer chain), there's nothing more to do. + if !self.is_absolute(node_id, network_path) { + return; + } + + // Otherwise place the node where the displaced feeder was, then shift the feeder's branch left to make room. + let Some(feeder) = feeder else { return }; + let Some(node_position) = self.position(node_id, network_path) else { return }; + let Some(feeder_position) = self.position(&feeder, network_path) else { return }; + + self.shift_node(node_id, feeder_position - node_position, network_path); + + // A chain feeder derives its position from its distance to the layer, which this insertion already grew, + // so shifting it would move it twice and cost it its place in the chain + if !self.is_absolute(&feeder, network_path) { + return; + } + + // Deduplicate, since `UpstreamFlow` can yield a shared node more than once and we must shift each node only once. + let upstream_nodes: HashSet = self.upstream_flow_back_from_nodes(vec![feeder], network_path, FlowType::UpstreamFlow).collect(); + for upstream_node in &upstream_nodes { + self.shift_node(upstream_node, IVec2::new(-NODE_CHAIN_WIDTH, 0), network_path); + } + } + + /// Moves a node to the start of a layer chain (feeding into the secondary input of the layer). + /// When `import` is true, uses lightweight wiring that skips `is_acyclic` checks and per-node cache invalidation. + pub fn move_node_to_chain_start(&mut self, node_id: &NodeId, parent: LayerNodeIdentifier, network_path: &[NodeId], import: bool) { + let parent_input = InputConnector::layer_secondary_input(parent.to_node()); + let Some(current_input) = self.input_from_connector(&parent_input, network_path).cloned() else { + log::error!("Could not get input for node {node_id}"); + return; + }; + + // Chain is empty: wire the node as the first (and only) entry in the chain + if matches!(current_input, NodeInput::Value { .. }) { + // A node whose exposed primary defaults to no value inherits the layer's content value, so the chain keeps producing the layer's content type + let node_primary = InputConnector::primary_input(*node_id); + let default_is_valueless = self + .input_from_connector(&node_primary, network_path) + .is_some_and(|input| matches!(input, NodeInput::Value { tagged_value, exposed: true } if matches!(**tagged_value, TaggedValue::None))); + if default_is_valueless { + if import { + self.set_input_for_import(&node_primary, current_input.clone(), network_path); + } else { + self.set_input(&node_primary, current_input.clone(), network_path); + } + } + + // Wire: [parent] -> [new node] + if import { + self.set_input_for_import(&parent_input, NodeInput::node(*node_id, 0), network_path); + } else { + self.create_wire(&OutputConnector::primary_output(*node_id), &parent_input, network_path); + } + + // Mark this lone node as chain-positioned + self.set_chain_position(node_id, network_path); + } + // Chain already has nodes: splice this node between the parent and the chain's existing final downstream node + else { + // Wire: [parent] -> [new node] -> [existing node] + if import { + self.set_input_for_import(&parent_input, NodeInput::node(*node_id, 0), network_path); + self.set_input_for_import(&InputConnector::primary_input(*node_id), current_input, network_path); + } else { + self.insert_node_between(node_id, &parent_input, 0, network_path); + } + + // Ensure all upstream nodes from here are marked as chain-positioned + self.force_set_upstream_to_chain(node_id, network_path); + } + } + + /// Reorders a node within its layer's horizontal chain so it ends up at `insert_index` among the chain's nodes, + /// where index 0 is the node closest to the layer. The connection feeding the top (most-upstream end) of the chain + /// is preserved, as are each node's other (non-primary) inputs. + pub fn reorder_chain_node(&mut self, node_id: NodeId, insert_index: usize, network_path: &[NodeId]) { + let Some(layer) = self.downstream_layer_for_chain_node(&node_id, network_path) else { + log::error!("Could not find downstream layer for chain node {node_id} in reorder_chain_node"); + return; + }; + + // The nodes in the layer's chain, ordered from closest-to-layer outward, stopping at the next layer + let chain = self + .upstream_flow_back_from_nodes(vec![layer], network_path, FlowType::HorizontalFlow) + .skip(1) + .take_while(|upstream_id| !self.is_layer(upstream_id, network_path)) + .collect::>(); + + // A source node (no primary input) stays pinned at the most-upstream end; only the nodes below it reorder + let pinned_source = chain.last().copied().filter(|last| !self.has_primary_input(last, network_path)); + let reorderable = &chain[..chain.len() - pinned_source.is_some() as usize]; + + let Some(from) = reorderable.iter().position(|id| *id == node_id) else { + log::error!("Node {node_id} is not a reorderable node in its layer's chain in reorder_chain_node"); + return; + }; + + // The drop gap is measured against the reorderable nodes that still include the dragged node, so shift it down by one if the node is being removed from before the gap + let to = (if insert_index > from { insert_index - 1 } else { insert_index }).min(reorderable.len() - 1); + if to == from { + return; + } + + let mut new_order = reorderable.to_vec(); + new_order.remove(from); + new_order.insert(to, node_id); + + // The most-upstream reorderable node connects up to the pinned source, or else whatever fed the top of the chain + let tail_input = if let Some(source) = pinned_source { + NodeInput::node(source, 0) + } else { + let Some(input) = self.input_from_connector(&InputConnector::primary_input(*chain.last().unwrap()), network_path).cloned() else { + log::error!("Could not get the upstream input of the chain in reorder_chain_node"); + return; + }; + input + }; + + // Disconnect first so the rewiring can't transiently form a cycle (the pinned source keeps its wiring) + for &chain_node in reorderable { + self.disconnect_input(&InputConnector::primary_input(chain_node), network_path); + } + + // Rewire in the new order: layer's secondary input -> new_order[0] -> ... -> new_order[last] -> tail input + self.set_input(&InputConnector::layer_secondary_input(layer), NodeInput::node(new_order[0], 0), network_path); + for pair in new_order.windows(2) { + self.set_input(&InputConnector::primary_input(pair[0]), NodeInput::node(pair[1], 0), network_path); + } + self.set_input(&InputConnector::primary_input(*new_order.last().unwrap()), tail_input, network_path); + + // Re-establish chain positioning for the reordered nodes + self.force_set_upstream_to_chain(&new_order[0], network_path); + } +} diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/mutations.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/mutations.rs new file mode 100644 index 0000000000..1b2b873985 --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/mutations.rs @@ -0,0 +1,1628 @@ +use super::*; + +// Public mutable methods +impl NodeNetworkInterface { + /// Walk every network at every nesting level, invoking `visit` with each network's path and a mutable + /// reference to its metadata. Only nodes that contain a nested network are recursed into. + fn for_each_network_metadata_mut(&mut self, mut visit: impl FnMut(&[NodeId], &mut NodeNetworkMetadata)) { + let mut stack = vec![vec![]]; + while let Some(path) = stack.pop() { + let Some(self_network_metadata) = self.network_metadata_mut(&path) else { + continue; + }; + + visit(&path, self_network_metadata); + + // Only nodes that contain a nested network have metadata to recurse into, so skip leaf nodes. + stack.extend( + self_network_metadata + .persistent_metadata + .node_metadata + .iter() + .filter(|(_, node_metadata)| node_metadata.persistent_metadata.network_metadata.is_some()) + .map(|(node_id, _)| { + let mut current_path: Vec = path.clone(); + current_path.push(*node_id); + current_path + }), + ); + } + } + + pub fn copy_all_navigation_metadata(&mut self, other_interface: &NodeNetworkInterface) { + self.for_each_network_metadata_mut(|path, self_network_metadata| { + if let Some(other_network_metadata) = other_interface.network_metadata(path) { + self_network_metadata.persistent_metadata.navigation_metadata = other_network_metadata.persistent_metadata.navigation_metadata.clone(); + } + }); + } + + /// Copy all transient view and selection state from `other_interface` onto `self` at every nesting level: + /// navigation metadata (pan/zoom), selection undo/redo history, and the document-to-viewport camera. Lets + /// an interface rebuilt from storage keep the user's current view rather than reset it. `resolved_types` + /// is a separate runtime cache the caller handles. + pub fn copy_all_transient_view_state(&mut self, other_interface: &NodeNetworkInterface) { + self.for_each_network_metadata_mut(|path, self_network_metadata| { + if let Some(other_network_metadata) = other_interface.network_metadata(path) { + let self_persistent = &mut self_network_metadata.persistent_metadata; + let other_persistent = &other_network_metadata.persistent_metadata; + self_persistent.navigation_metadata = other_persistent.navigation_metadata.clone(); + + // The live preview root may name a node that the rebuilt-from-storage network no longer contains + // (e.g. after a storage undo), so only carry it over when the root still exists; otherwise drop it. + self_persistent.previewing = match other_persistent.previewing { + Previewing::Yes { + root_node_to_restore: Some(root_node), + } if !self_persistent.node_metadata.contains_key(&root_node.node_id) => Previewing::No, + previewing => previewing, + }; + + self_persistent.selection_undo_history = other_persistent.selection_undo_history.clone(); + self_persistent.selection_redo_history = other_persistent.selection_redo_history.clone(); + } + }); + + self.document_metadata.document_to_viewport = other_interface.document_metadata.document_to_viewport; + } + + pub fn set_transform(&mut self, transform: DAffine2, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network in set_transform"); + return; + }; + network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport = transform; + self.unload_import_export_ports(network_path); + self.unload_modify_import_export(network_path); + } + + // This should be run whenever the pan ends, a zoom occurs, or the network is opened + pub fn set_node_graph_width(&mut self, node_graph_width: f64, network_path: &[NodeId]) { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network in set_transform"); + return; + }; + network_metadata.persistent_metadata.navigation_metadata.node_graph_width = node_graph_width; + self.unload_import_export_ports(network_path); + self.unload_modify_import_export(network_path); + } + + pub fn vector_modify(&mut self, node_id: &NodeId, modification_type: VectorModificationType) { + let Some(node) = self.network_mut(&[]).and_then(|network| network.nodes.get_mut(node_id)) else { + log::error!("Could not get node in vector_modification"); + return; + }; + { + let mut value = node.inputs.get_mut(1).and_then(|input| input.as_value_mut()); + let Some(TaggedValue::VectorModification(modification)) = value.as_deref_mut() else { + log::error!("Path node {node_id} does not have a modification input"); + return; + }; + + modification.modify(&modification_type); + } + self.transaction_modified(); + } + + /// Inserts a new export at insert index. If the insert index is -1 it is inserted at the end. The output_name is used by the encapsulating node. + pub fn add_export(&mut self, default_value: TaggedValue, insert_index: isize, output_name: &str, network_path: &[NodeId]) { + let Some(network) = self.network_mut(network_path) else { + log::error!("Could not get nested network in add_export"); + return; + }; + + let input = NodeInput::value(default_value, true); + let inserted_index = if insert_index == -1 { network.exports.len() } else { insert_index as usize }; + if insert_index == -1 { + network.exports.push(input); + } else { + network.exports.insert(insert_index as usize, input); + } + + self.transaction_modified(); + + let mut encapsulating_path = network_path.to_vec(); + // Set the parent node (if it exists) to be a non layer if it is no longer eligible to be a layer + if let Some(parent_id) = encapsulating_path.pop() + && !self.is_eligible_to_be_layer(&parent_id, &encapsulating_path) + && self.is_layer(&parent_id, &encapsulating_path) + { + self.set_to_node_or_layer(&parent_id, &encapsulating_path, false); + }; + + // There will not be an encapsulating node if the network is the document network + if let Some(encapsulating_node_metadata) = self.encapsulating_node_metadata_mut(network_path) { + if insert_index == -1 { + encapsulating_node_metadata.persistent_metadata.output_names.push(output_name.to_string()); + } else { + encapsulating_node_metadata.persistent_metadata.output_names.insert(insert_index as usize, output_name.to_string()); + } + // Clear the reference to the nodes definition + if let Some(network_metadata) = encapsulating_node_metadata.persistent_metadata.network_metadata.as_mut() { + network_metadata.persistent_metadata.reference = None + } + }; + + // Update the export ports and outward wires for the current network + self.unload_import_export_ports(network_path); + self.unload_modify_import_export(network_path); + self.unload_outward_wires(network_path); + + // Update the outward wires and bounding box for all nodes in the encapsulating network + if let Some(encapsulating_network_metadata) = self.encapsulating_network_metadata_mut(network_path) { + encapsulating_network_metadata.transient_metadata.outward_wires.unload(); + encapsulating_network_metadata.transient_metadata.all_nodes_bounding_box.unload(); + } + + // Update the click targets for the encapsulating node, if it exists. There is no encapsulating node if the network is the document network + let mut path = network_path.to_vec(); + if let Some(encapsulating_node) = path.pop() { + self.unload_node_click_targets(&encapsulating_node, &path); + } + + // If the export is inserted as the first input or second input, and the parent network is the document_network, then it may have affected the document metadata structure + if network_path.len() == 1 && inserted_index <= 1 { + self.load_structure(); + } + } + + /// Inserts a new input at insert index. If the insert index is -1 it is inserted at the end. The output_name is used by the encapsulating node. + pub fn add_import(&mut self, default_value: TaggedValue, exposed: bool, insert_index: isize, input_name: &str, input_description: &str, network_path: &[NodeId]) { + let mut encapsulating_network_path = network_path.to_vec(); + let Some(node_id) = encapsulating_network_path.pop() else { + log::error!("Cannot add import for document network"); + return; + }; + + let Some(network) = self.network_mut(&encapsulating_network_path) else { + log::error!("Could not get nested network in insert_input"); + return; + }; + let Some(node) = network.nodes.get_mut(&node_id) else { + log::error!("Could not get node in insert_input"); + return; + }; + + let input = NodeInput::value(default_value, exposed); + let inserted_index = if insert_index == -1 { node.inputs.len() } else { insert_index as usize }; + if insert_index == -1 { + node.inputs.push(input); + } else { + node.inputs.insert(insert_index as usize, input); + } + + self.transaction_modified(); + + // Set the node to be a non layer if it is no longer eligible to be a layer + if !self.is_eligible_to_be_layer(&node_id, &encapsulating_network_path) && self.is_layer(&node_id, &encapsulating_network_path) { + self.set_to_node_or_layer(&node_id, &encapsulating_network_path, false); + } + + let Some(node_metadata) = self.node_metadata_mut(&node_id, &encapsulating_network_path) else { + log::error!("Could not get node_metadata in insert_input"); + return; + }; + let new_input = (input_name, input_description).into(); + if insert_index == -1 { + node_metadata.persistent_metadata.input_metadata.push(new_input); + } else { + node_metadata.persistent_metadata.input_metadata.insert(insert_index as usize, new_input); + } + + // Clear the reference to the nodes definition + if let Some(network_metadata) = node_metadata.persistent_metadata.network_metadata.as_mut() { + network_metadata.persistent_metadata.reference = None + } + + // Update the metadata for the encapsulating node + self.unload_node_click_targets(&node_id, &encapsulating_network_path); + self.unload_all_nodes_bounding_box(&encapsulating_network_path); + if encapsulating_network_path.is_empty() && inserted_index <= 1 { + self.load_structure(); + } + + // Unload the metadata for the nested network + self.unload_outward_wires(network_path); + self.unload_import_export_ports(network_path); + self.unload_modify_import_export(network_path); + } + + /// Disconnects every wire fed by the given import within the network. Returns false without mutating if the import's wires cannot be resolved. + pub(crate) fn disconnect_import_wires(&mut self, import_index: usize, network_path: &[NodeId]) -> bool { + self.disconnect_output_wires(&OutputConnector::Import(import_index), network_path) + } + + /// Disconnects every wire fed by the given output within the network. Returns false without mutating if the output's wires cannot be resolved. + pub(crate) fn disconnect_output_wires(&mut self, output_connector: &OutputConnector, network_path: &[NodeId]) -> bool { + let Some(downstream_connections) = self.with_outward_wires(network_path, |outward_wires| outward_wires.get(output_connector).cloned()) else { + log::error!("Could not get outward wires in disconnect_output_wires"); + return false; + }; + let Some(downstream_connections) = downstream_connections else { + log::error!("Could not get downstream connections for {output_connector:?} in disconnect_output_wires"); + return false; + }; + for downstream_connection in downstream_connections { + self.disconnect_input(&downstream_connection, network_path); + } + + true + } + + /// Refreshes the metadata invalidated when the encapsulating node's signature changes, demoting it from a layer if it is no longer eligible. + fn finish_signature_edit(&mut self, parent_id: NodeId, encapsulating_network_path: &[NodeId], network_path: &[NodeId]) { + // Update the metadata for the encapsulating node + self.unload_outward_wires(encapsulating_network_path); + self.unload_node_click_targets(&parent_id, encapsulating_network_path); + self.unload_all_nodes_bounding_box(encapsulating_network_path); + if !self.is_eligible_to_be_layer(&parent_id, encapsulating_network_path) && self.is_layer(&parent_id, encapsulating_network_path) { + self.set_to_node_or_layer(&parent_id, encapsulating_network_path, false); + } + if encapsulating_network_path.is_empty() { + self.load_structure(); + } + + // Unload the metadata for the nested network + self.unload_outward_wires(network_path); + self.unload_import_export_ports(network_path); + self.unload_modify_import_export(network_path); + } + + // First disconnects the export, then removes it + pub fn remove_export(&mut self, export_index: usize, network_path: &[NodeId]) { + let mut encapsulating_network_path = network_path.to_vec(); + let Some(parent_id) = encapsulating_network_path.pop() else { + log::error!("Cannot remove export for document network"); + return; + }; + + // Disconnect the removed export, and handle connections to the node which had its output removed + self.disconnect_input(&InputConnector::Export(export_index), network_path); + let number_of_outputs = self.number_of_outputs(&parent_id, &encapsulating_network_path); + for shifted_export in export_index..number_of_outputs { + let Some(encapsulating_outward_wires) = self.outward_wires(&encapsulating_network_path) else { + log::error!("Could not get outward wires in remove_export"); + return; + }; + let Some(downstream_connections_for_shifted_export) = encapsulating_outward_wires.get(&OutputConnector::node(parent_id, shifted_export)).cloned() else { + log::error!("Could not get downstream connections for shifted export in remove_export"); + return; + }; + for downstream_connection in downstream_connections_for_shifted_export { + self.disconnect_input(&downstream_connection, &encapsulating_network_path); + if shifted_export != export_index { + self.create_wire(&OutputConnector::node(parent_id, shifted_export - 1), &downstream_connection, &encapsulating_network_path); + } + } + } + + let Some(network) = self.network_mut(network_path) else { + log::error!("Could not get nested network in add_export"); + return; + }; + network.exports.remove(export_index); + + self.transaction_modified(); + + let Some(encapsulating_node_metadata) = self.node_metadata_mut(&parent_id, &encapsulating_network_path) else { + log::error!("Could not get encapsulating node metadata in remove_export"); + return; + }; + encapsulating_node_metadata.persistent_metadata.output_names.remove(export_index); + if let Some(network_metadata) = encapsulating_node_metadata.persistent_metadata.network_metadata.as_mut() { + network_metadata.persistent_metadata.reference = None; + } + + self.finish_signature_edit(parent_id, &encapsulating_network_path, network_path); + } + + // First disconnects the import, then removes it + pub fn remove_import(&mut self, import_index: usize, network_path: &[NodeId]) { + let Some((parent_id, encapsulating_network_path)) = network_path.split_last() else { + log::error!("Cannot remove export for document network"); + return; + }; + + let number_of_inputs = self.number_of_inputs(parent_id, encapsulating_network_path); + let Some(outward_wires) = self.outward_wires(network_path) else { + log::error!("Could not get outward wires in remove_import"); + return; + }; + let mut new_import_mapping = Vec::new(); + for i in (import_index + 1)..number_of_inputs { + let Some(outward_wires_for_import) = outward_wires.get(&OutputConnector::Import(i)).cloned() else { + log::error!("Could not get outward wires for import in remove_import"); + return; + }; + for upstream_input_wire in outward_wires_for_import { + new_import_mapping.push((OutputConnector::Import(i - 1), upstream_input_wire)); + } + } + + // Disconnect all upstream connections, aborting before any mutation if the import's wires cannot be resolved + if !self.disconnect_import_wires(import_index, network_path) { + return; + } + // Shift inputs connected to imports at a higher index down one + for (output_connector, input_wire) in new_import_mapping { + self.create_wire(&output_connector, &input_wire, network_path); + } + + let Some(network) = self.network_mut(encapsulating_network_path) else { + log::error!("Could not get parent node in remove_import"); + return; + }; + let Some(node) = network.nodes.get_mut(parent_id) else { + log::error!("Could not get node in remove_import"); + return; + }; + + node.inputs.remove(import_index); + + self.transaction_modified(); + + // There will not be an encapsulating node if the network is the document network + let Some(encapsulating_node_metadata) = self.node_metadata_mut(parent_id, encapsulating_network_path) else { + log::error!("Could not get encapsulating node metadata in remove_export"); + return; + }; + encapsulating_node_metadata.persistent_metadata.input_metadata.remove(import_index); + if let Some(network_metadata) = encapsulating_node_metadata.persistent_metadata.network_metadata.as_mut() { + network_metadata.persistent_metadata.reference = None; + } + + self.finish_signature_edit(*parent_id, encapsulating_network_path, network_path); + } + + /// The end index is before the export is removed, so moving to the end is the length of the current exports + pub fn reorder_export(&mut self, start_index: usize, mut end_index: usize, network_path: &[NodeId]) { + let mut encapsulating_network_path = network_path.to_vec(); + let Some(parent_id) = encapsulating_network_path.pop() else { + log::error!("Could not reorder export for document network"); + return; + }; + + let Some(network) = self.network_mut(network_path) else { + log::error!("Could not get nested network in reorder_export"); + return; + }; + if end_index > start_index { + end_index -= 1; + } + let export = network.exports.remove(start_index); + network.exports.insert(end_index, export); + + self.transaction_modified(); + + let Some(encapsulating_node_metadata) = self.node_metadata_mut(&parent_id, &encapsulating_network_path) else { + log::error!("Could not get encapsulating network_metadata in reorder_export"); + return; + }; + + let name = encapsulating_node_metadata.persistent_metadata.output_names.remove(start_index); + encapsulating_node_metadata.persistent_metadata.output_names.insert(end_index, name); + if let Some(network_metadata) = encapsulating_node_metadata.persistent_metadata.network_metadata.as_mut() { + network_metadata.persistent_metadata.reference = None; + } + + // Update the metadata for the encapsulating network + self.unload_outward_wires(&encapsulating_network_path); + self.unload_stack_dependents(&encapsulating_network_path); + + // Node input at the start index is now at the end index + let Some(move_to_end_index) = self + .outward_wires(&encapsulating_network_path) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(parent_id, start_index))) + .cloned() + else { + log::error!("Could not get outward wires in reorder_export"); + return; + }; + // Node inputs above the start index should be shifted down one + let last_output_index = self.number_of_outputs(&parent_id, &encapsulating_network_path) - 1; + for shift_output_down in (start_index + 1)..=last_output_index { + let Some(outward_wires) = self + .outward_wires(&encapsulating_network_path) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(parent_id, shift_output_down))) + .cloned() + else { + log::error!("Could not get outward wires in reorder_export"); + return; + }; + for downstream_connection in &outward_wires { + self.disconnect_input(downstream_connection, &encapsulating_network_path); + self.create_wire(&OutputConnector::node(parent_id, shift_output_down - 1), downstream_connection, &encapsulating_network_path); + } + } + // Node inputs at or above the end index should be shifted up one + for shift_output_up in (end_index..last_output_index).rev() { + let Some(outward_wires) = self + .outward_wires(&encapsulating_network_path) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(parent_id, shift_output_up))) + .cloned() + else { + log::error!("Could not get outward wires in reorder_export"); + return; + }; + for downstream_connection in &outward_wires { + self.disconnect_input(downstream_connection, &encapsulating_network_path); + self.create_wire(&OutputConnector::node(parent_id, shift_output_up + 1), downstream_connection, &encapsulating_network_path); + } + } + + // Move the connections to the moved export after all other ones have been shifted + for downstream_connection in &move_to_end_index { + self.disconnect_input(downstream_connection, &encapsulating_network_path); + self.create_wire(&OutputConnector::node(parent_id, end_index), downstream_connection, &encapsulating_network_path); + } + + // Update the metadata for the current network + self.unload_outward_wires(network_path); + self.unload_import_export_ports(network_path); + self.unload_modify_import_export(network_path); + self.unload_stack_dependents(network_path); + } + + /// The end index is before the import is removed, so moving to the end is the length of the current imports + pub fn reorder_import(&mut self, start_index: usize, mut end_index: usize, network_path: &[NodeId]) { + let mut encapsulating_network_path = network_path.to_vec(); + let Some(parent_id) = encapsulating_network_path.pop() else { + log::error!("Could not reorder import for document network"); + return; + }; + + let Some(encapsulating_network) = self.network_mut(&encapsulating_network_path) else { + log::error!("Could not get nested network in reorder_import"); + return; + }; + let Some(encapsulating_node) = encapsulating_network.nodes.get_mut(&parent_id) else { + log::error!("Could not get encapsulating node in reorder_import"); + return; + }; + + if end_index > start_index { + end_index -= 1; + } + let import = encapsulating_node.inputs.remove(start_index); + encapsulating_node.inputs.insert(end_index, import); + + self.transaction_modified(); + + let Some(encapsulating_node_metadata) = self.node_metadata_mut(&parent_id, &encapsulating_network_path) else { + log::error!("Could not get encapsulating network_metadata in reorder_import"); + return; + }; + + let properties_row = encapsulating_node_metadata.persistent_metadata.input_metadata.remove(start_index); + encapsulating_node_metadata.persistent_metadata.input_metadata.insert(end_index, properties_row); + if let Some(network_metadata) = encapsulating_node_metadata.persistent_metadata.network_metadata.as_mut() { + network_metadata.persistent_metadata.reference = None; + } + + // Update the metadata for the outer network + self.unload_outward_wires(&encapsulating_network_path); + self.unload_stack_dependents(&encapsulating_network_path); + + // Node input at the start index is now at the end index + let Some(move_to_end_index) = self + .outward_wires(network_path) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::Import(start_index))) + .cloned() + else { + log::error!("Could not get outward wires in reorder_import"); + return; + }; + // Node inputs above the start index should be shifted down one + let last_import_index = self.number_of_imports(network_path) - 1; + for shift_output_down in (start_index + 1)..=last_import_index { + let Some(outward_wires) = self + .outward_wires(network_path) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::Import(shift_output_down))) + .cloned() + else { + log::error!("Could not get outward wires in reorder_import"); + return; + }; + for downstream_connection in &outward_wires { + self.disconnect_input(downstream_connection, network_path); + self.create_wire(&OutputConnector::Import(shift_output_down - 1), downstream_connection, network_path); + } + } + // Node inputs at or above the end index should be shifted up one + for shift_output_up in (end_index..last_import_index).rev() { + let Some(outward_wires) = self + .outward_wires(network_path) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::Import(shift_output_up))) + .cloned() + else { + log::error!("Could not get outward wires in reorder_import"); + return; + }; + for downstream_connection in &outward_wires { + self.disconnect_input(downstream_connection, network_path); + self.create_wire(&OutputConnector::Import(shift_output_up + 1), downstream_connection, network_path); + } + } + + // Move the connections to the moved export after all other ones have been shifted + for downstream_connection in &move_to_end_index { + self.disconnect_input(downstream_connection, network_path); + self.create_wire(&OutputConnector::Import(end_index), downstream_connection, network_path); + } + + // Update the metadata for the current network + self.unload_outward_wires(network_path); + self.unload_import_export_ports(network_path); + self.unload_modify_import_export(network_path); + self.unload_stack_dependents(network_path); + } + + /// Replaces the implementation and corresponding metadata. + pub fn replace_implementation(&mut self, node_id: &NodeId, network_path: &[NodeId], new_template: &mut NodeTemplate) { + let Some(network) = self.network_mut(network_path) else { + log::error!("Could not get nested network in set_implementation"); + return; + }; + let Some(node) = network.nodes.get_mut(node_id) else { + log::error!("Could not get node in set_implementation"); + return; + }; + let (new_implementation, new_network_metadata) = std::mem::take(&mut new_template.implementation).into_parts(); + node.implementation = new_implementation; + let Some(metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get metadata in set_implementation"); + return; + }; + metadata.persistent_metadata.network_metadata = new_network_metadata; + } + + /// Replaces the inputs and corresponding metadata. + pub fn replace_inputs(&mut self, node_id: &NodeId, network_path: &[NodeId], new_template: &mut NodeTemplate) -> Option> { + let Some(network) = self.network_mut(network_path) else { + log::error!("Could not get nested network in set_implementation"); + return None; + }; + let Some(node) = network.nodes.get_mut(node_id) else { + log::error!("Could not get node in set_implementation"); + return None; + }; + let new_inputs = std::mem::take(&mut new_template.inputs); + let old_inputs = std::mem::replace(&mut node.inputs, new_inputs); + let Some(metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get metadata in set_implementation"); + return None; + }; + let new_metadata = std::mem::take(&mut new_template.input_metadata); + let _ = std::mem::replace(&mut metadata.persistent_metadata.input_metadata, new_metadata); + Some(old_inputs) + } + + /// Used when opening an old document to add the persistent metadata for each input if it doesnt exist, which is where the name/description are saved. + pub fn validate_input_metadata(&mut self, node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId]) { + let number_of_inputs = node.inputs.len(); + let Some(metadata) = self.node_metadata_mut(node_id, network_path) else { return }; + for added_input_index in metadata.persistent_metadata.input_metadata.len()..number_of_inputs { + let input_metadata = self + .reference(node_id, network_path) + .as_ref() + .and_then(resolve_document_node_type) + .and_then(|definition| definition.node_template.input_metadata.get(added_input_index)) + .cloned(); + let Some(metadata) = self.node_metadata_mut(node_id, network_path) else { return }; + metadata.persistent_metadata.input_metadata.push(input_metadata.unwrap_or_default()); + } + } + + // When opening an old document to ensure the output names match the number of exports + pub fn validate_output_names(&mut self, node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId]) { + if let DocumentNodeImplementation::Network(network) = &node.implementation { + let number_of_exports = network.exports.len(); + let Some(metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get metadata for node: {node_id:?}"); + return; + }; + metadata.persistent_metadata.output_names.resize(number_of_exports, "".to_string()); + } + } + + /// Keep metadata in sync with the new implementation if this is used by anything other than the upgrade scripts. + /// Only works with network nodes. Proto nodes use their ID as the reference. + pub fn set_reference(&mut self, node_id: &NodeId, network_path: &[NodeId], reference_name: Option) { + let Some(node_network_metadata) = self + .node_metadata_mut(node_id, network_path) + .and_then(|node_metadata| node_metadata.persistent_metadata.network_metadata.as_mut()) + else { + log::error!("Could not get network metadata in replace_reference_name"); + return; + }; + node_network_metadata.persistent_metadata.reference = reference_name; + } + + /// Keep metadata in sync with the new implementation if this is used by anything other than the upgrade scripts + pub fn set_call_argument(&mut self, node_id: &NodeId, network_path: &[NodeId], call_argument: Type) { + let Some(network) = self.network_mut(network_path) else { + log::error!("Could not get nested network in set_implementation"); + return; + }; + let Some(node) = network.nodes.get_mut(node_id) else { + log::error!("Could not get node in set_implementation"); + return; + }; + node.call_argument = call_argument; + } + + pub fn set_context_features(&mut self, node_id: &NodeId, network_path: &[NodeId], context_features: ContextDependencies) { + let Some(network) = self.network_mut(network_path) else { + log::error!("Could not get nested network in set_context_features"); + return; + }; + let Some(node) = network.nodes.get_mut(node_id) else { + log::error!("Could not get node in set_context_features"); + return; + }; + node.context_features = context_features; + } + + /// Lightweight version of `set_input` for bulk import operations. + /// Directly sets the input without `is_acyclic` checks, `load_structure`, position conversions, + /// or per-node cache invalidation. Call `load_structure`, `unload_all_nodes_click_targets`, and + /// `unload_all_nodes_bounding_box` once after all import wiring is complete. + pub fn set_input_for_import(&mut self, input_connector: &InputConnector, new_input: NodeInput, network_path: &[NodeId]) { + if matches!(input_connector, InputConnector::Export(_)) && matches!(new_input, NodeInput::Import { .. }) { + log::error!("Cannot connect a network to an export, see https://github.com/GraphiteEditor/Graphite/issues/1762"); + return; + } + + let Some(network) = self.network_mut(network_path) else { + log::error!("Could not get nested network in set_input_for_import"); + return; + }; + + let old_input = match input_connector { + InputConnector::Node { node_id, input_index } => { + let Some(node) = network.nodes.get_mut(node_id) else { + log::error!("Could not get node in set_input_for_import"); + return; + }; + let Some(input) = node.inputs.get_mut(*input_index) else { + log::error!("Could not get input in set_input_for_import"); + return; + }; + std::mem::replace(input, new_input.clone()) + } + InputConnector::Export(export_index) => { + let Some(export) = network.exports.get_mut(*export_index) else { + log::error!("Could not get export in set_input_for_import"); + return; + }; + std::mem::replace(export, new_input.clone()) + } + }; + + self.transaction_modified(); + self.update_outward_wires(network_path, input_connector, &old_input, &new_input); + } + + pub fn set_input(&mut self, input_connector: &InputConnector, new_input: NodeInput, network_path: &[NodeId]) { + if matches!(input_connector, InputConnector::Export(_)) && matches!(new_input, NodeInput::Import { .. }) { + // TODO: Add support for flattening NodeInput::Import exports in flatten_with_fns https://github.com/GraphiteEditor/Graphite/issues/1762 + log::error!("Cannot connect a network to an export, see https://github.com/GraphiteEditor/Graphite/issues/1762"); + return; + } + let Some(previous_input) = self.input_from_connector(input_connector, network_path).cloned() else { + log::error!("Could not get previous input in set_input"); + return; + }; + + // Reject a change that would create a cycle before any side effects run (only Node connections can create cycles). + // The new input is swapped in just for this test, then restored so the disconnect and layout logic below sees the unmodified network. + if matches!(new_input, NodeInput::Node { .. }) { + let Some(network) = self.network_mut(network_path) else { + log::error!("Could not get nested network in set_input"); + return; + }; + fn get_input<'a>(network: &'a mut NodeNetwork, input_connector: &InputConnector) -> Option<&'a mut NodeInput> { + match input_connector { + InputConnector::Node { node_id, input_index } => network.nodes.get_mut(node_id).and_then(|node| node.inputs.get_mut(*input_index)), + InputConnector::Export(export_index) => network.exports.get_mut(*export_index), + } + } + + let Some(input) = get_input(network, input_connector) else { + log::error!("Could not get input in set_input"); + return; + }; + let old_input = std::mem::replace(input, new_input.clone()); + let is_acyclic = network.is_acyclic(); + let Some(input) = get_input(network, input_connector) else { + log::error!("Could not get input in set_input"); + return; + }; + *input = old_input; + + if !is_acyclic { + return; + } + } + + // When changing a NodeInput::Node to a NodeInput::Node, the input should first be disconnected to ensure proper side effects + if (matches!(previous_input, NodeInput::Node { .. }) && matches!(new_input, NodeInput::Node { .. })) { + self.disconnect_input(input_connector, network_path); + self.set_input(input_connector, new_input, network_path); + return; + } + + // If the previous input is connected to a chain node, then set all upstream chain nodes to absolute position + if let NodeInput::Node { node_id: previous_upstream_id, .. } = &previous_input + && self.is_chain(previous_upstream_id, network_path) + { + self.set_upstream_chain_to_absolute(previous_upstream_id, network_path); + } + if let NodeInput::Node { node_id: new_upstream_id, .. } = &new_input { + // If the new input is connected to a chain node, then break its chain + if self.is_chain(new_upstream_id, network_path) { + self.set_upstream_chain_to_absolute(new_upstream_id, network_path); + } + } + + let Some(network) = self.network_mut(network_path) else { + log::error!("Could not get nested network in set_input"); + return; + }; + + let old_input = match input_connector { + InputConnector::Node { node_id, input_index } => { + let Some(node) = network.nodes.get_mut(node_id) else { + log::error!("Could not get node in set_input"); + return; + }; + let Some(input) = node.inputs.get_mut(*input_index) else { + log::error!("Could not get input in set_input"); + return; + }; + std::mem::replace(input, new_input.clone()) + } + InputConnector::Export(export_index) => { + let Some(export) = network.exports.get_mut(*export_index) else { + log::error!("Could not get export in set_input"); + return; + }; + std::mem::replace(export, new_input.clone()) + } + }; + + if old_input == new_input { + return; + }; + + // It is necessary to ensure the graph is acyclic before calling `self.position` as it sometimes crashes with cyclic graphs #3227 + let previous_metadata = match &previous_input { + NodeInput::Node { node_id, .. } => self.position(node_id, network_path).map(|position| (*node_id, position)), + _ => None, + }; + + self.transaction_modified(); + + // Ensure layer is toggled to non layer if it is no longer eligible to be a layer + let layer_node_path = match input_connector { + InputConnector::Node { node_id, .. } => Some((node_id, network_path)), + InputConnector::Export(_) => network_path.split_last(), + }; + + if let Some((layer_id, layer_path)) = layer_node_path + && !self.is_eligible_to_be_layer(layer_id, layer_path) + && self.is_layer(layer_id, layer_path) + { + self.set_to_node_or_layer(layer_id, layer_path, false); + } + + // Side effects + match (&old_input, &new_input) { + // If a node input is exposed or hidden reload the click targets and update the bounding box for all nodes + (NodeInput::Value { exposed: old_exposed, .. }, NodeInput::Value { exposed: new_exposed, .. }) => { + if let InputConnector::Node { node_id, .. } = input_connector { + if new_exposed != old_exposed { + self.unload_upstream_node_click_targets(vec![*node_id], network_path); + self.unload_all_nodes_bounding_box(network_path); + + // Unload the interior import/export ports if this node has a nested network + if matches!(self.implementation(node_id, network_path), Some(DocumentNodeImplementation::Network(_))) { + let nested_path = [network_path, &[*node_id]].concat(); + self.unload_import_export_ports(&nested_path); + self.unload_modify_import_export(&nested_path); + } + } + } else { + self.unload_import_export_ports(network_path); + self.unload_modify_import_export(network_path); + } + } + (_, NodeInput::Node { node_id: upstream_node_id, .. }) => { + // If the old input wasn't exposed but the new one is (`Node` inputs are always exposed), + // the node's port count changed, so its click targets need to be recomputed + if !old_input.is_exposed() + && let InputConnector::Node { node_id, .. } = input_connector + { + self.unload_node_click_targets(node_id, network_path); + } + + // Load structure if the change is to the document network and to the first or second + if network_path.is_empty() { + if matches!(input_connector, InputConnector::Export(0)) { + self.load_structure(); + } else if let InputConnector::Node { node_id, input_index } = &input_connector { + // If the connection is made to the first or second input of a node connected to the output, then load the structure + if self.connected_to_output(node_id, network_path) && (*input_index == 0 || *input_index == 1) { + self.load_structure(); + } + } + } + self.update_outward_wires(network_path, input_connector, &old_input, &new_input); + // Layout system + let Some(current_node_position) = self.position(upstream_node_id, network_path) else { + log::error!("Could not get current node position in set_input for node {upstream_node_id}"); + return; + }; + let Some(node_metadata) = self.node_metadata(upstream_node_id, network_path) else { + log::error!("Could not get node_metadata in set_input"); + return; + }; + match &node_metadata.persistent_metadata.node_type_metadata { + NodeTypePersistentMetadata::Layer(_) => { + match &input_connector { + InputConnector::Export(_) => { + // If a layer is connected to the exports, it should be set to absolute position without being moved. + self.set_absolute_position(upstream_node_id, current_node_position, network_path) + } + InputConnector::Node { + node_id: downstream_node_id, + input_index, + } => { + // If a layer has a single connection to the bottom of another layer, it should be set to stack positioning + let Some(downstream_node_metadata) = self.node_metadata(downstream_node_id, network_path) else { + log::error!("Could not get downstream node_metadata in set_input"); + return; + }; + match &downstream_node_metadata.persistent_metadata.node_type_metadata { + NodeTypePersistentMetadata::Layer(_) => { + // If the layer feeds into the bottom input of layer, and has no other outputs, set its position to stack at its previous y position + let multiple_outward_wires = self + .outward_wires(network_path) + .and_then(|all_outward_wires| all_outward_wires.get(&OutputConnector::primary_output(*upstream_node_id))) + .is_some_and(|outward_wires| outward_wires.len() > 1); + if *input_index == 0 && !multiple_outward_wires { + self.set_stack_position_calculated_offset(upstream_node_id, downstream_node_id, network_path); + } else { + self.set_absolute_position(upstream_node_id, current_node_position, network_path); + } + } + NodeTypePersistentMetadata::Node(_) => { + // If the layer feeds into a node, set its y offset to 0 + self.set_absolute_position(upstream_node_id, current_node_position, network_path); + } + } + } + } + } + NodeTypePersistentMetadata::Node(_) => {} + } + // Altering an export may move the connectors meaning the ports must be refreshed. + if matches!(input_connector, InputConnector::Export(_)) { + self.unload_import_export_ports(network_path); + } + self.unload_upstream_node_click_targets(vec![*upstream_node_id], network_path); + self.unload_stack_dependents(network_path); + self.try_set_upstream_to_chain(input_connector, network_path); + } + // If a connection is made to the imports + (NodeInput::Value { .. } | NodeInput::Scope { .. } | NodeInput::Inline { .. }, NodeInput::Import { .. }) => { + self.update_outward_wires(network_path, input_connector, &old_input, &new_input); + self.unload_wire(input_connector, network_path); + } + // If a connection to the imports is disconnected + (NodeInput::Import { .. }, NodeInput::Value { .. } | NodeInput::Scope { .. } | NodeInput::Inline { .. }) => { + self.update_outward_wires(network_path, input_connector, &old_input, &new_input); + self.unload_wire(input_connector, network_path); + } + // If a node is disconnected. + (NodeInput::Node { .. }, NodeInput::Value { .. } | NodeInput::Scope { .. } | NodeInput::Inline { .. }) => { + self.update_outward_wires(network_path, input_connector, &old_input, &new_input); + self.unload_wire(input_connector, network_path); + + if let Some((old_upstream_node_id, previous_position)) = previous_metadata { + let old_upstream_node_is_layer = self.is_layer(&old_upstream_node_id, network_path); + let Some(outward_wires) = self + .outward_wires(network_path) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::primary_output(old_upstream_node_id))) + else { + log::error!("Could not get outward wires in set_input"); + return; + }; + // If it is a layer and is connected to a single layer, set its position to stack at its previous y position + if old_upstream_node_is_layer && outward_wires.len() == 1 && outward_wires[0].input_index() == 0 { + if let Some(downstream_node_id) = outward_wires[0].node_id() + && self.is_layer(&downstream_node_id, network_path) + { + self.set_stack_position_calculated_offset(&old_upstream_node_id, &downstream_node_id, network_path); + self.unload_upstream_node_click_targets(vec![old_upstream_node_id], network_path); + } + } + // If it is a node and is eligible to be in a chain, then set it to chain positioning + else if !old_upstream_node_is_layer { + self.try_set_node_to_chain(&old_upstream_node_id, network_path); + } + // If a node was previously connected, and it is no longer connected to any nodes, then set its position to absolute at its previous position + else { + self.set_absolute_position(&old_upstream_node_id, previous_position, network_path); + } + } + // Load structure if the change is to the document network and to the first or second + if network_path.is_empty() { + if matches!(input_connector, InputConnector::Export(0)) { + self.load_structure(); + } else if let InputConnector::Node { node_id, input_index } = &input_connector { + // If the connection is made to the first or second input of a node connected to the output, then load the structure + if self.connected_to_output(node_id, network_path) && (*input_index == 0 || *input_index == 1) { + self.load_structure(); + } + } + } + self.unload_stack_dependents(network_path); + } + _ => {} + } + } + + /// Ensure network metadata, positions, and other metadata is kept in sync + pub fn disconnect_input(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) { + let Some(current_input) = self.input_from_connector(input_connector, network_path).cloned() else { + log::error!("Could not get current input in disconnect_input"); + return; + }; + // Only disconnect inputs that are actual wire connections (Node or Import) + if !matches!(current_input, NodeInput::Node { .. } | NodeInput::Import { .. }) { + return; + } + + if let NodeInput::Node { + node_id: upstream_node_id, + output_index, + .. + } = ¤t_input + { + // If the node upstream from the disconnected input is a chain, then break the chain by setting it to absolute positioning + if self.is_chain(upstream_node_id, network_path) { + self.set_upstream_chain_to_absolute(upstream_node_id, network_path); + } + // If the node upstream from the disconnected input has an outward wire to the bottom of a layer, set it back to stack positioning + if self.is_layer(upstream_node_id, network_path) { + let Some(outward_wires) = self + .outward_wires(network_path) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(*upstream_node_id, *output_index))) + else { + log::error!("Could not get outward wires in disconnect_input"); + return; + }; + let mut other_outward_wires = outward_wires.iter().filter(|outward_wire| *outward_wire != input_connector); + if let Some(other_outward_wire) = other_outward_wires.next().cloned() + && other_outward_wires.next().is_none() + && let InputConnector::Node { + node_id: downstream_node_id, + input_index, + } = other_outward_wire + && self.is_layer(&downstream_node_id, network_path) + && input_index == 0 + { + self.set_stack_position_calculated_offset(upstream_node_id, &downstream_node_id, network_path); + } + } + } + + let tagged_value = self.tagged_value_from_input(input_connector, network_path); + + let value_input = NodeInput::value(tagged_value, true); + + self.set_input(input_connector, value_input, network_path); + } + + pub fn create_wire(&mut self, output_connector: &OutputConnector, input_connector: &InputConnector, network_path: &[NodeId]) { + let input = match output_connector { + OutputConnector::Node { node_id, output_index } => NodeInput::node(*node_id, *output_index), + OutputConnector::Import(import_index) => NodeInput::Import { + import_type: graph_craft::generic!(T), + import_index: *import_index, + }, + }; + + self.set_input(input_connector, input, network_path); + } + + /// Used to insert a group of nodes into the network + pub fn insert_node_group(&mut self, nodes: Vec<(NodeId, NodeTemplate)>, new_ids: HashMap, network_path: &[NodeId]) { + for (old_node_id, mut node_template) in nodes { + // Get the new node template + node_template = self.map_ids(node_template, &old_node_id, &new_ids, network_path); + // Insert node into network + let node_id = *new_ids.get(&old_node_id).unwrap(); + let (document_node, persistent_metadata) = node_template.into_parts(); + let Some(network) = self.network_mut(network_path) else { + log::error!("Network not found in insert_node"); + return; + }; + + network.nodes.insert(node_id, document_node); + self.transaction_modified(); + + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Network not found in insert_node"); + return; + }; + let node_metadata = DocumentNodeMetadata { + persistent_metadata, + transient_metadata: DocumentNodeTransientMetadata::default(), + }; + network_metadata.persistent_metadata.node_metadata.insert(node_id, node_metadata); + } + for new_node_id in new_ids.values() { + self.unload_node_click_targets(new_node_id, network_path); + } + self.unload_all_nodes_bounding_box(network_path); + self.unload_outward_wires(network_path); + } + + /// Used to insert a node template with no node/network inputs into the network and returns the a NodeTemplate with information from the previous node, if it existed. + pub fn insert_node(&mut self, node_id: NodeId, node_template: NodeTemplate, network_path: &[NodeId]) -> Option { + let has_node_or_network_input = node_template + .inputs + .iter() + .all(|input| !(matches!(input, NodeInput::Node { .. }) || matches!(input, NodeInput::Import { .. }))); + assert!(has_node_or_network_input, "Cannot insert node with node or network inputs. Use insert_node_group instead"); + let (document_node, persistent_metadata) = node_template.into_parts(); + let Some(network) = self.network_mut(network_path) else { + log::error!("Network not found in insert_node"); + return None; + }; + + let previous_node = network.nodes.insert(node_id, document_node); + self.transaction_modified(); + + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Network not found in insert_node"); + return None; + }; + let node_metadata = DocumentNodeMetadata { + persistent_metadata, + transient_metadata: DocumentNodeTransientMetadata::default(), + }; + let previous_metadata = network_metadata.persistent_metadata.node_metadata.insert(node_id, node_metadata); + + self.unload_all_nodes_bounding_box(network_path); + self.unload_node_click_targets(&node_id, network_path); + + previous_node + .zip(previous_metadata) + .map(|(document_node, node_metadata)| NodeTemplate::from_parts(document_node, node_metadata.persistent_metadata)) + } + + /// Deletes all nodes in `node_ids` and any sole dependents in the horizontal chain if the node to delete is a layer node. + pub fn delete_nodes(&mut self, nodes_to_delete: Vec, delete_children: bool, network_path: &[NodeId]) { + if self.outward_wires(network_path).is_none() { + log::error!("Could not get outward wires in delete_nodes"); + return; + } + + // Layer membership is fixed during the expansion phase, so gather it once for the sole-dependent closure + let layer_nodes = if delete_children { + self.nested_network(network_path) + .map(|network| network.nodes.keys().copied().collect::>()) + .unwrap_or_default() + .into_iter() + .filter(|candidate| self.is_layer(candidate, network_path)) + .collect::>() + } else { + HashSet::new() + }; + + let mut delete_nodes = HashSet::new(); + for node_id in &nodes_to_delete { + delete_nodes.insert(*node_id); + + if !delete_children { + continue; + }; + + // Perform an upstream traversal to try delete children for secondary inputs + let mut upstream_nodes = (1..self.number_of_inputs(node_id, network_path)) + .filter_map(|input_index| { + self.upstream_output_connector(&InputConnector::node_at_index(*node_id, input_index), network_path) + .and_then(|oc| oc.node_id()) + }) + .collect::>(); + while let Some(upstream_node) = upstream_nodes.pop() { + // Add the upstream nodes to the traversal + for input_connector in (0..self.number_of_inputs(&upstream_node, network_path)).map(|input_index| InputConnector::node_at_index(upstream_node, input_index)) { + if let Some(upstream_node) = self.upstream_output_connector(&input_connector, network_path).and_then(|oc| oc.node_id()) { + upstream_nodes.push(upstream_node); + } + } + + // A path terminates when absorbed by another node marked for deletion, except through a layer's bottom input, which is stack flow to walk through. + // Reaching the primary input of the node being deleted means this is the stack continuation rather than a child, so it must survive. + let can_delete = self.is_sole_dependent(upstream_node, network_path, |downstream_node, input_index| { + if downstream_node == *node_id && input_index == 0 { + SoleDependentStep::Escape + } else if delete_nodes.contains(&downstream_node) && !(input_index == 0 && layer_nodes.contains(&downstream_node)) { + SoleDependentStep::Terminate + } else { + SoleDependentStep::Continue + } + }); + + if can_delete { + delete_nodes.insert(upstream_node); + } + } + } + + for delete_node_id in &delete_nodes { + let upstream_chain_nodes = self + .upstream_flow_back_from_nodes(vec![*delete_node_id], network_path, FlowType::PrimaryFlow) + .skip(1) + .take_while(|upstream_node| self.is_chain(upstream_node, network_path)) + .collect::>(); + + if !self.remove_references_from_network(delete_node_id, network_path) { + log::error!("could not remove references from network"); + continue; + } + + // Disconnect every input by position, since hidden inputs make the displayed count undershoot the index of a later exposed wire + for input_index in 0..self.number_of_inputs(delete_node_id, network_path) { + self.disconnect_input(&InputConnector::node_at_index(*delete_node_id, input_index), network_path); + } + + let Some(network) = self.network_mut(network_path) else { + log::error!("Could not get nested network in delete_nodes"); + continue; + }; + + network.nodes.remove(delete_node_id); + self.transaction_modified(); + + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in delete_nodes"); + continue; + }; + network_metadata.persistent_metadata.node_metadata.remove(delete_node_id); + for previous_chain_node in upstream_chain_nodes { + self.set_chain_position(&previous_chain_node, network_path); + } + } + + // Prune this network's pinned display order down to the nodes that still exist, dropping any that were actually removed + let surviving_nodes = self.nested_network(network_path).map(|network| network.nodes.keys().copied().collect::>()); + if let Some(surviving_nodes) = surviving_nodes + && let Some(network_metadata) = self.network_metadata_mut(network_path) + { + network_metadata.persistent_metadata.pinned_node_order.retain(|node_id| surviving_nodes.contains(node_id)); + } + + // Purge the deleted nodes' cached wire paths, since the per-node unload can no longer reach them once the nodes are gone + if let Some(network_metadata) = self.network_metadata(network_path) { + network_metadata + .transient_metadata + .wires + .borrow_mut() + .retain(|connector, _| connector.node_id().is_none_or(|node_id| !delete_nodes.contains(&node_id))); + } + + self.unload_all_nodes_bounding_box(network_path); + // Instead of unloaded all node click targets, just unload the nodes upstream from the deleted nodes. unload_upstream_node_click_targets will not work since the nodes have been deleted. + self.unload_all_nodes_click_targets(network_path); + let Some(selected_nodes) = self.selected_nodes_mut(network_path) else { + log::error!("Could not get selected nodes in NodeGraphMessage::DeleteNodes"); + return; + }; + selected_nodes.retain_selected_nodes(|node_id| !delete_nodes.contains(node_id)); + } + + /// Removes all references to the node with the given id from the network, and reconnects the input to the node below. + pub fn remove_references_from_network(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + // TODO: Add more logic to support retaining preview when removing references. Since there are so many edge cases/possible crashes, for now the preview is ended. + self.stop_previewing(network_path); + + // Check whether the being-deleted node's first (primary) input is a node + let reconnect_to_input = self.document_node(node_id, network_path).and_then(|node| { + node.inputs + .iter() + .find(|input| input.is_exposed()) + .filter(|input| matches!(input, NodeInput::Node { .. } | NodeInput::Import { .. })) + .cloned() + }); + // Get all upstream references + let number_of_outputs = self.number_of_outputs(node_id, network_path); + let Some(all_outward_wires) = self.outward_wires(network_path) else { + log::error!("Could not get outward wires in remove_references_from_network"); + return false; + }; + let mut downstream_inputs_to_disconnect = Vec::new(); + for output_index in 0..number_of_outputs { + if let Some(outward_wires) = all_outward_wires.get(&OutputConnector::node(*node_id, output_index)) { + downstream_inputs_to_disconnect.extend(outward_wires.clone()); + } + } + + let mut reconnect_node = None; + + for downstream_input in &downstream_inputs_to_disconnect { + self.disconnect_input(downstream_input, network_path); + // Prevent reconnecting export to import until https://github.com/GraphiteEditor/Graphite/issues/1762 is solved + if !(matches!(reconnect_to_input, Some(NodeInput::Import { .. })) && matches!(downstream_input, InputConnector::Export(_))) + && let Some(reconnect_input) = &reconnect_to_input + { + reconnect_node = reconnect_input.as_node().and_then(|node_id| if self.is_stack(&node_id, network_path) { Some(node_id) } else { None }); + self.disconnect_input(&InputConnector::primary_input(*node_id), network_path); + self.set_input(downstream_input, reconnect_input.clone(), network_path); + } + } + + // Shift the reconnected node up to collapse space + if let Some(reconnect_node) = &reconnect_node { + let Some(reconnected_node_position) = self.position(reconnect_node, network_path) else { + log::error!("Could not get reconnected node position in remove_references_from_network"); + return false; + }; + let Some(disconnected_node_position) = self.position(node_id, network_path) else { + log::error!("Could not get disconnected node position in remove_references_from_network"); + return false; + }; + let max_shift_distance = reconnected_node_position.y - disconnected_node_position.y; + + let upstream_nodes = self.upstream_flow_back_from_nodes(vec![*reconnect_node], network_path, FlowType::PrimaryFlow).collect::>(); + + // Build the stack dependents from the reconnected flow rather than the selection so the shifting works correctly + self.unload_stack_dependents(network_path); + self.load_stack_dependents_for_nodes(upstream_nodes.iter().copied().collect(), network_path); + + // Shift up until there is either a collision or the disconnected node position is reached + let mut current_shift_distance = 0; + while self.check_collision_with_stack_dependents(reconnect_node, -1, network_path).is_empty() && max_shift_distance > current_shift_distance { + self.shift_nodes(upstream_nodes.clone(), Direction::Up, false, network_path); + current_shift_distance += 1; + } + + self.unload_stack_dependents(network_path); + } + + true + } + + pub fn start_previewing_without_restore(&mut self, network_path: &[NodeId]) { + // Some logic will have to be performed to prevent the graph positions from being completely changed when the export changes to some previewed node + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in start_previewing_without_restore"); + return; + }; + network_metadata.persistent_metadata.previewing = Previewing::Yes { root_node_to_restore: None }; + } + + fn stop_previewing(&mut self, network_path: &[NodeId]) { + if let Previewing::Yes { + root_node_to_restore: Some(root_node_to_restore), + } = self.previewing(network_path) + { + self.set_input( + &InputConnector::Export(0), + NodeInput::node(root_node_to_restore.node_id, root_node_to_restore.output_index), + network_path, + ); + } + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata in stop_previewing"); + return; + }; + network_metadata.persistent_metadata.previewing = Previewing::No; + } + + pub fn set_display_name(&mut self, node_id: &NodeId, display_name: String, network_path: &[NodeId]) { + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get node {node_id} in set_visibility"); + return; + }; + + if node_metadata.persistent_metadata.display_name == display_name { + return; + } + + node_metadata.persistent_metadata.display_name = display_name; + + self.transaction_modified(); + self.try_unload_layer_width(node_id, network_path); + self.unload_node_click_targets(node_id, network_path); + } + + pub fn set_import_export_name(&mut self, mut name: String, index: ImportOrExport, network_path: &[NodeId]) { + let Some(encapsulating_node) = self.encapsulating_node_metadata_mut(network_path) else { + log::error!("Could not get encapsulating network in set_import_export_name"); + return; + }; + + let name_changed = match index { + ImportOrExport::Import(import_index) => { + let Some(input_properties) = encapsulating_node.persistent_metadata.input_metadata.get_mut(import_index) else { + log::error!("Could not get input properties in set_import_export_name"); + return; + }; + // Only return false if the previous value is the same as the current value + std::mem::swap(&mut input_properties.persistent_metadata.input_name, &mut name); + input_properties.persistent_metadata.input_name != name + } + ImportOrExport::Export(export_index) => { + let Some(export_name) = encapsulating_node.persistent_metadata.output_names.get_mut(export_index) else { + log::error!("Could not get export_name in set_import_export_name"); + return; + }; + std::mem::swap(export_name, &mut name); + *export_name != name + } + }; + if name_changed { + self.transaction_modified(); + } + } + + pub fn set_pinned(&mut self, node_id: &NodeId, network_path: &[NodeId], pinned: bool) { + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get node {node_id} in set_pinned"); + return; + }; + + node_metadata.persistent_metadata.pinned = pinned; + + // Track the node in this network's pinned display order: append when newly pinned, prune when unpinned + if let Some(network_metadata) = self.network_metadata_mut(network_path) { + let order = &mut network_metadata.persistent_metadata.pinned_node_order; + if pinned { + if !order.contains(node_id) { + order.push(*node_id); + } + } else { + order.retain(|id| id != node_id); + } + } + + self.transaction_modified(); + } + + /// Reorders a pinned node within its network's Properties panel display order so it ends up at `insert_index` among the + /// pinned nodes (0 being the topmost). Rebuilds the order from the list as currently shown, which also drops stale entries. + pub fn reorder_pinned_node(&mut self, node_id: NodeId, insert_index: usize, network_path: &[NodeId]) { + let shown = self.ordered_pinned_nodes(network_path); + + let Some(from) = shown.iter().position(|id| *id == node_id) else { return }; + let to = (if insert_index > from { insert_index - 1 } else { insert_index }).min(shown.len().saturating_sub(1)); + if to == from { + return; + } + + let mut new_order = shown; + let moved = new_order.remove(from); + new_order.insert(to, moved); + + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get network_metadata in reorder_pinned_node"); + return; + }; + network_metadata.persistent_metadata.pinned_node_order = new_order; + + self.transaction_modified(); + } + + pub fn set_visibility(&mut self, node_id: &NodeId, network_path: &[NodeId], is_visible: bool) { + let Some(network) = self.network_mut(network_path) else { + return; + }; + let Some(node) = network.nodes.get_mut(node_id) else { + log::error!("Could not get node {node_id} in set_visibility"); + return; + }; + + node.visible = is_visible; + self.transaction_modified(); + } + + pub fn set_locked(&mut self, node_id: &NodeId, network_path: &[NodeId], locked: bool) { + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get node {node_id} in set_visibility"); + return; + }; + + node_metadata.persistent_metadata.locked = locked; + self.transaction_modified(); + self.try_unload_layer_width(node_id, network_path); + self.unload_node_click_targets(node_id, network_path); + } + + pub fn set_to_node_or_layer(&mut self, node_id: &NodeId, network_path: &[NodeId], is_layer: bool) { + // If a layer is set to a node, set upstream nodes to absolute position, and upstream siblings to absolute position + let child_id = { self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalFlow).nth(1) }; + let upstream_sibling_id = { self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::PrimaryFlow).nth(1) }; + match (self.is_layer(node_id, network_path), is_layer) { + (true, false) => { + if let Some(child_id) = child_id { + self.set_upstream_chain_to_absolute(&child_id, network_path); + } + if let Some(upstream_sibling_id) = upstream_sibling_id { + let Some(upstream_sibling_position) = self.position(&upstream_sibling_id, network_path) else { + log::error!("Could not get upstream sibling position in set_to_node_or_layer"); + return; + }; + self.set_absolute_position(&upstream_sibling_id, upstream_sibling_position, network_path); + } + } + (false, true) => { + // If a node is set to a layer + if let Some(upstream_sibling_id) = upstream_sibling_id { + // If the upstream sibling layer has a single output, then set it to stack position + if self.is_layer(&upstream_sibling_id, network_path) + && self + .outward_wires(network_path) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::primary_output(upstream_sibling_id))) + .is_some_and(|outward_wires| outward_wires.len() == 1) + { + self.set_stack_position_calculated_offset(&upstream_sibling_id, node_id, network_path); + } else { + self.set_upstream_chain_to_absolute(&upstream_sibling_id, network_path); + } + } + } + _ => return, + }; + + let Some(position) = self.position(node_id, network_path) else { + log::error!("Could not get position in set_to_node_or_layer"); + return; + }; + + let single_downstream_layer_position = self + .outward_wires(network_path) + .and_then(|outward_wires| { + outward_wires + .get(&OutputConnector::primary_output(*node_id)) + .and_then(|outward_wires| (outward_wires.len() == 1).then(|| outward_wires[0])) + .and_then(|downstream_connector| if downstream_connector.input_index() == 0 { downstream_connector.node_id() } else { None }) + }) + .filter(|downstream_node_id| self.is_layer(downstream_node_id, network_path)) + .and_then(|downstream_layer| self.position(&downstream_layer, network_path)); + + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get node_metadata for node {node_id}"); + return; + }; + + // First set the position to absolute + node_metadata.persistent_metadata.node_type_metadata = if is_layer { + NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { + position: LayerPosition::Absolute(position), + }) + } else { + NodeTypePersistentMetadata::Node(NodePersistentMetadata { + position: NodePosition::Absolute(position), + }) + }; + + // Try build the chain + if is_layer { + self.try_set_upstream_to_chain(&InputConnector::layer_secondary_input(*node_id), network_path); + } else { + self.try_set_node_to_chain(node_id, network_path); + } + + let Some(node_metadata) = self.node_metadata_mut(node_id, network_path) else { + log::error!("Could not get node_metadata for node {node_id}"); + return; + }; + // Set the position to stack if necessary + if let Some(downstream_position) = is_layer.then_some(single_downstream_layer_position).flatten() { + node_metadata.persistent_metadata.node_type_metadata = NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { + position: LayerPosition::Stack((position.y - downstream_position.y - STACK_VERTICAL_GAP).max(0) as u32), + }) + } + + node_metadata.transient_metadata.layer_width.unload(); + node_metadata.transient_metadata.owned_nodes.unload(); + + self.transaction_modified(); + self.unload_stack_dependents(network_path); + self.unload_upstream_node_click_targets(vec![*node_id], network_path); + self.unload_all_nodes_bounding_box(network_path); + self.unload_import_export_ports(network_path); + self.unload_modify_import_export(network_path); + self.load_structure(); + } + + pub fn toggle_preview(&mut self, toggle_id: NodeId, network_path: &[NodeId]) { + let Some(network) = self.nested_network(network_path) else { + return; + }; + // If new_export is None then disconnect + let mut new_export = None; + let mut new_previewing_state = Previewing::No; + if let Some(export) = network.exports.first() { + // If there currently an export + if let NodeInput::Node { node_id, output_index, .. } = export { + let previous_export_id = *node_id; + let previous_output_index = *output_index; + + // The export is clicked + if *node_id == toggle_id { + // If the current export is clicked and is being previewed end the preview and set either export back to root node or disconnect + if let Previewing::Yes { root_node_to_restore } = self.previewing(network_path) { + new_export = root_node_to_restore.map(|root_node| root_node.to_connector()); + new_previewing_state = Previewing::No; + } + // The export is clicked and there is no preview + else { + new_previewing_state = Previewing::Yes { + root_node_to_restore: Some(RootNode { + node_id: previous_export_id, + output_index: previous_output_index, + }), + }; + } + } + // The export is not clicked + else { + new_export = Some(OutputConnector::primary_output(toggle_id)); + + // There is currently a dashed line being drawn + if let Previewing::Yes { root_node_to_restore } = self.previewing(network_path) { + // There is also a solid line being drawn + if let Some(root_node_to_restore) = root_node_to_restore { + // If the node with the solid line is clicked, then start previewing that node without restore + if root_node_to_restore.node_id == toggle_id { + new_export = Some(OutputConnector::primary_output(toggle_id)); + new_previewing_state = Previewing::Yes { root_node_to_restore: None }; + } else { + // Root node to restore does not change + new_previewing_state = Previewing::Yes { + root_node_to_restore: Some(root_node_to_restore), + }; + } + } + // There is a dashed line without a solid line. + else { + new_previewing_state = Previewing::Yes { root_node_to_restore: None }; + } + } + // Not previewing, there is no dashed line being drawn + else { + new_export = Some(OutputConnector::primary_output(toggle_id)); + new_previewing_state = Previewing::Yes { + root_node_to_restore: Some(RootNode { + node_id: previous_export_id, + output_index: previous_output_index, + }), + }; + } + } + } + // The primary export is disconnected, so preview the node with nothing to restore, which disconnects the export again when the preview ends + else { + new_export = Some(OutputConnector::primary_output(toggle_id)); + new_previewing_state = Previewing::Yes { root_node_to_restore: None }; + } + } + match new_export { + Some(new_export) => { + self.create_wire(&new_export, &InputConnector::Export(0), network_path); + } + None => { + self.disconnect_input(&InputConnector::Export(0), network_path); + } + } + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + return; + }; + network_metadata.persistent_metadata.previewing = new_previewing_state; + } +} diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/queries.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/queries.rs new file mode 100644 index 0000000000..b4b577ed56 --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/queries.rs @@ -0,0 +1,1236 @@ +use super::*; + +/// Index of the Artboard definition's Clip input, which must match the input order authored in document_node_definitions.rs. +pub(crate) const ARTBOARD_CLIP_INPUT_INDEX: usize = 5; + +impl NodeNetworkInterface { + /// Runs a query against a resolved [`NetworkView`], logging any error at this message-boundary wrapper and mapping it to None. + pub(crate) fn query<'a, 'p, T>(&'a self, network_path: &'p [NodeId], caller: &str, query: impl FnOnce(NetworkView<'a, 'p>) -> Result) -> Option { + match self.view(network_path).and_then(query) { + Ok(value) => Some(value), + Err(error) => { + log::error!("{error} in {caller}"); + None + } + } + } +} + +// Public immutable getters for the network interface +impl NodeNetworkInterface { + /// Gets the network of the root document + pub fn document_network(&self) -> &NodeNetwork { + self.network.network() + } + pub fn document_network_mut(&mut self) -> &mut NodeNetwork { + self.network.network_mut() + } + + /// Gets the nested network based on network_path + pub fn nested_network(&self, network_path: &[NodeId]) -> Option<&NodeNetwork> { + let Some(network) = self.document_network().nested_network(network_path) else { + log::error!("Could not get nested network with path {network_path:?} in NodeNetworkInterface::network"); + return None; + }; + Some(network) + } + + pub fn network_hash(&self) -> u64 { + self.network.current_hash() + } + + /// Get the specified document node in the nested network based on node_id and network_path + pub fn document_node(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&DocumentNode> { + self.query(network_path, "document_node", |view| view.node(node_id)) + } + + pub fn node_metadata(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&DocumentNodeMetadata> { + self.query(network_path, "node_metadata", |view| view.node_metadata(node_id)) + } + + pub fn document_network_metadata(&self) -> &NodeNetworkMetadata { + &self.network_metadata + } + + /// The network metadata should always exist for the current network + pub fn network_metadata(&self, network_path: &[NodeId]) -> Option<&NodeNetworkMetadata> { + let Some(network_metadata) = self.network_metadata.nested_metadata(network_path) else { + log::error!("Could not get nested network_metadata with path {network_path:?}"); + return None; + }; + Some(network_metadata) + } + + pub fn document_metadata(&self) -> &DocumentMetadata { + &self.document_metadata + } + + pub fn transaction_status(&self) -> TransactionStatus { + self.transaction_status + } + + pub fn selected_nodes(&self) -> SelectedNodes { + self.selected_nodes_in_nested_network(&[]).unwrap_or_default() + } + + /// Get the selected nodes for the network at the network_path + pub fn selected_nodes_in_nested_network(&self, network_path: &[NodeId]) -> Option { + self.query(network_path, "selected_nodes_in_nested_network", |view| Ok(view.selected_nodes())) + } + + /// Runs an encapsulating-node query, staying silent for the document network which has no encapsulating node. + fn query_encapsulating<'a, 'p, T>(&'a self, network_path: &'p [NodeId], caller: &str, query: impl FnOnce(NetworkView<'a, 'p>) -> Result) -> Option { + self.query(network_path, caller, |view| match query(view) { + Err(NetworkError::NoEncapsulatingNode) => Ok(None), + result => result.map(Some), + }) + .flatten() + } + + /// Get the network which the encapsulating node of the currently viewed network is part of. Will always be None in the document network. + pub fn encapsulating_network_metadata(&self, network_path: &[NodeId]) -> Option<&NodeNetworkMetadata> { + self.query_encapsulating(network_path, "encapsulating_network_metadata", |view| view.encapsulating().map(|parent| parent.network_metadata())) + } + + /// Get the node which encapsulates the currently viewed network. Will always be None in the document network. + pub fn encapsulating_node(&self, network_path: &[NodeId]) -> Option<&DocumentNode> { + self.query_encapsulating(network_path, "encapsulating_node", |view| view.encapsulating_node()) + } + + /// Get the node metadata for the node which encapsulates the currently viewed network. Will always be None in the document network. + pub fn encapsulating_node_metadata(&self, network_path: &[NodeId]) -> Option<&DocumentNodeMetadata> { + self.query_encapsulating(network_path, "encapsulating_node_metadata", |view| view.encapsulating_node_metadata()) + } + + /// Returns the first downstream layer(inclusive) from a node. If the node is a layer, it will return itself. + pub fn downstream_layer_for_chain_node(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option { + let mut id = *node_id; + while !self.is_layer(&id, network_path) { + id = self.with_outward_wires(network_path, |outward_wires| { + outward_wires + .get(&OutputConnector::primary_output(id)) + .and_then(|connections| connections.first()) + .and_then(|connector| connector.node_id()) + })??; + } + Some(id) + } + + /// Returns all downstream layers (inclusive) from a node. If the node is a layer, it will return itself. + pub fn downstream_layers(&self, node_id: &NodeId, network_path: &[NodeId]) -> Vec { + let mut stack = vec![*node_id]; + let mut layers = Vec::new(); + while let Some(current_node) = stack.pop() { + if self.is_layer(¤t_node, network_path) { + layers.push(current_node); + } else { + let downstream_found = self.with_outward_wires(network_path, |outward_wires| { + let Some(connections) = outward_wires.get(&OutputConnector::primary_output(current_node)) else { + return false; + }; + stack.extend(connections.iter().filter_map(|input_connector| input_connector.node_id())); + true + }); + if downstream_found != Some(true) { + log::error!("Could not get outward wires in downstream_layer"); + return Vec::new(); + } + } + } + layers + } + + pub fn chain_width(&self, node_id: &NodeId, network_path: &[NodeId]) -> u32 { + self.query(network_path, "chain_width", |view| Ok(view.chain_width(node_id))).unwrap_or_default() + } + + /// Check if the specified node id is connected to the output + pub fn connected_to_output(&self, target_node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "connected_to_output", |view| Ok(view.connected_to_output(target_node_id))).unwrap_or_default() + } + + pub fn number_of_imports(&self, network_path: &[NodeId]) -> usize { + self.query(network_path, "number_of_imports", |view| Ok(view.number_of_imports())).unwrap_or_default() + } + + pub fn number_of_exports(&self, network_path: &[NodeId]) -> usize { + self.query(network_path, "number_of_exports", |view| Ok(view.number_of_exports())).unwrap_or_default() + } + + pub(crate) fn number_of_displayed_inputs(&self, node_id: &NodeId, network_path: &[NodeId]) -> usize { + self.query(network_path, "number_of_displayed_inputs", |view| view.number_of_displayed_inputs(node_id)) + .unwrap_or_default() + } + + pub fn number_of_inputs(&self, node_id: &NodeId, network_path: &[NodeId]) -> usize { + self.query(network_path, "number_of_inputs", |view| view.number_of_inputs(node_id)).unwrap_or_default() + } + + /// Whether the node has an exposed input at index 0 to accept the horizontal flow from upstream. + /// A node without one (e.g. a generator) can only be the most-upstream node in a chain. + pub fn has_primary_input(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "has_primary_input", |view| view.has_primary_input(node_id)).unwrap_or_default() + } + + pub fn number_of_outputs(&self, node_id: &NodeId, network_path: &[NodeId]) -> usize { + self.query(network_path, "number_of_outputs", |view| view.number_of_outputs(node_id)).unwrap_or_default() + } + + /// Creates a copy for each node by disconnecting nodes which are not connected to other copied nodes. + /// Returns an iterator of all persistent metadata for a node and their ids + pub fn copy_nodes<'a>(&'a self, new_ids: &'a HashMap, network_path: &'a [NodeId]) -> impl Iterator + 'a { + let mut new_nodes = new_ids + .iter() + .filter_map(|(node_id, &new)| { + self.create_node_template(node_id, network_path).and_then(|mut node_template| { + // TODO: Get downstream connections from all outputs + let Some(has_selected_node_downstream) = self.with_outward_wires(network_path, |outward_wires| { + outward_wires.get(&OutputConnector::primary_output(*node_id)).is_some_and(|outputs| { + outputs + .iter() + .any(|input_connector| input_connector.node_id().is_some_and(|upstream_id| new_ids.keys().any(|key| *key == upstream_id))) + }) + }) else { + log::error!("Could not get outward wires in copy_nodes"); + return None; + }; + // If the copied node does not have a downstream connection to another copied node, then set the position to absolute + if !has_selected_node_downstream { + let Some(position) = self.position(node_id, network_path) else { + log::error!("Could not get position in create_node_template"); + return None; + }; + match &mut node_template.node_type_metadata { + NodeTypePersistentMetadata::Layer(layer_metadata) => layer_metadata.position = LayerPosition::Absolute(position), + NodeTypePersistentMetadata::Node(node_metadata) => node_metadata.position = NodePosition::Absolute(position), + }; + } + + // If a chain node does not have a selected downstream layer, then set the position to absolute + let downstream_layer = self.downstream_layer_for_chain_node(node_id, network_path); + if downstream_layer.is_none_or(|downstream_layer| new_ids.keys().all(|key| *key != downstream_layer)) { + let Some(position) = self.position(node_id, network_path) else { + log::error!("Could not get position in create_node_template"); + return None; + }; + node_template.node_type_metadata = NodeTypePersistentMetadata::Node(NodePersistentMetadata { + position: NodePosition::Absolute(position), + }); + } + + // Shift all absolute nodes 2 to the right and 2 down + // TODO: Remove 2x2 offset and replace with layout system to find space for new node + match &mut node_template.node_type_metadata { + NodeTypePersistentMetadata::Layer(layer_metadata) => { + if let LayerPosition::Absolute(position) = &mut layer_metadata.position { + *position += IVec2::new(2, 2) + } + } + NodeTypePersistentMetadata::Node(node_metadata) => { + if let NodePosition::Absolute(position) = &mut node_metadata.position { + *position += IVec2::new(2, 2) + } + } + } + + Some((new, *node_id, node_template)) + }) + }) + .collect::>(); + + for old_id in new_nodes.iter().map(|(_, old_id, _)| *old_id).collect::>() { + // Try set all selected nodes upstream of a layer to be chain nodes + if self.is_layer(&old_id, network_path) { + for valid_upstream_chain_node in self.valid_upstream_chain_nodes(&InputConnector::layer_secondary_input(old_id), network_path) { + if let Some(node_template) = new_nodes.iter_mut().find_map(|(_, old_id, template)| (*old_id == valid_upstream_chain_node).then_some(template)) { + match &mut node_template.node_type_metadata { + NodeTypePersistentMetadata::Node(node_metadata) => node_metadata.position = NodePosition::Chain, + NodeTypePersistentMetadata::Layer(_) => log::error!("Node cannot be a layer"), + }; + } + } + } + } + new_nodes.into_iter().map(move |(new, node_id, node)| (new, self.map_ids(node, &node_id, new_ids, network_path))) + } + + /// Create a node template from an existing node. + pub fn create_node_template(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option { + self.query(network_path, "create_node_template", |view| view.create_node_template(node_id)) + } + + /// Converts all node id inputs to a new id based on a HashMap. + /// + /// If the node is not in the hashmap then a default input is found based on the compiled network, using the node_id passed as a parameter + pub fn map_ids(&self, mut node_template: NodeTemplate, node_id: &NodeId, new_ids: &HashMap, network_path: &[NodeId]) -> NodeTemplate { + for (input_index, input) in node_template.inputs.iter_mut().enumerate() { + if let &mut NodeInput::Node { node_id: id, output_index } = input { + if let Some(&new_id) = new_ids.get(&id) { + *input = NodeInput::Node { node_id: new_id, output_index }; + } else { + // Disconnect node input if it is not connected to another node in new_ids + let tagged_value = self.tagged_value_from_input(&InputConnector::node_at_index(*node_id, input_index), network_path); + *input = NodeInput::value(tagged_value, true); + } + } else if let &mut NodeInput::Import { .. } = input { + // Always disconnect network node input + let tagged_value = self.tagged_value_from_input(&InputConnector::node_at_index(*node_id, input_index), network_path); + *input = NodeInput::value(tagged_value, true); + } + } + node_template + } + + pub fn input_from_connector(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> Option<&NodeInput> { + match self.view(network_path).and_then(|view| view.input(input_connector)) { + Ok(input) => Some(input), + // An out-of-range input index is an expected lookup miss, not an error worth logging + Err(NetworkError::InputNotFound { .. }) => None, + Err(error) => { + log::error!("{error} in input_from_connector"); + None + } + } + } + + pub fn position(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option { + self.try_load_node_click_targets(node_id, network_path); + let top_left_position = self.try_get_node_bounding_box(node_id, network_path).map(|mut bounding_box| { + if !self.is_layer(node_id, network_path) { + bounding_box[0] -= DVec2::new(0., 12.); + } + (bounding_box[0] / 24.).as_ivec2() + }); + top_left_position.map(|position| { + if self.is_layer(node_id, network_path) { + position + IVec2::new(self.chain_width(node_id, network_path) as i32, 0) + } else { + position + } + }) + } + + pub fn collect_used_resources(&self, target: &mut HashSet) { + collect_network_resources(self.document_network(), target); + } + + pub fn frontend_imports(&self, network_path: &[NodeId]) -> Vec> { + match network_path.split_last() { + Some((node_id, encapsulating_network_path)) => { + let Some(node) = self.document_node(node_id, encapsulating_network_path) else { + log::error!("Could not get node {node_id} in network {encapsulating_network_path:?}"); + return Vec::new(); + }; + let mut frontend_imports = (0..node.inputs.len()) + .map(|import_index| self.frontend_output_from_connector(&OutputConnector::Import(import_index), network_path)) + .collect::>(); + if frontend_imports.is_empty() { + frontend_imports.push(None); + } + frontend_imports + } + // In the document network display no imports + None => Vec::new(), + } + } + + pub fn frontend_exports(&self, network_path: &[NodeId]) -> Vec> { + let Some(network) = self.nested_network(network_path) else { return Vec::new() }; + let mut frontend_exports = ((0..network.exports.len()).map(|export_index| self.frontend_input_from_connector(&InputConnector::Export(export_index), network_path))).collect::>(); + if frontend_exports.is_empty() { + frontend_exports.push(None); + } + frontend_exports + } + + pub fn import_export_position(&self, network_path: &[NodeId]) -> Option<(IVec2, IVec2)> { + let Some(all_nodes_bounding_box) = self.all_nodes_bounding_box(network_path) else { + log::error!("Could not get all nodes bounding box in load_export_ports"); + return None; + }; + let Some(network) = self.nested_network(network_path) else { + log::error!("Could not get current network in load_export_ports"); + return None; + }; + + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in load_export_ports"); + return None; + }; + let node_graph_to_viewport = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport; + let target_viewport_top_left = DVec2::new(IMPORTS_TO_LEFT_EDGE_PIXEL_GAP as f64, IMPORTS_TO_TOP_EDGE_PIXEL_GAP as f64); + + let node_graph_pixel_offset_top_left = node_graph_to_viewport.inverse().transform_point2(target_viewport_top_left); + + // A 5x5 grid offset from the top left corner + let node_graph_grid_space_offset_top_left = node_graph_to_viewport.inverse().transform_point2(DVec2::ZERO) + DVec2::new(5. * GRID_SIZE as f64, 4. * GRID_SIZE as f64); + + // The inner bound of the import is the highest/furthest left of the two offsets + let top_left_inner_bound = DVec2::new( + node_graph_pixel_offset_top_left.x.min(node_graph_grid_space_offset_top_left.x), + node_graph_pixel_offset_top_left.y.min(node_graph_grid_space_offset_top_left.y), + ); + + let offset_from_top_left = if network + .exports + .first() + .is_some_and(|export| export.as_node().is_some_and(|export_node| self.is_layer(&export_node, network_path))) + { + DVec2::new(-4. * GRID_SIZE as f64, -2. * GRID_SIZE as f64) + } else { + DVec2::new(-4. * GRID_SIZE as f64, 0.) + }; + + let bounding_box_top_left = DVec2::new((all_nodes_bounding_box[0].x / 24. + 0.5).floor() * 24., (all_nodes_bounding_box[0].y / 24. + 0.5).floor() * 24.) + offset_from_top_left; + let import_top_left = DVec2::new(top_left_inner_bound.x.min(bounding_box_top_left.x), top_left_inner_bound.y.min(bounding_box_top_left.y)); + let rounded_import_top_left = DVec2::new((import_top_left.x / 24.).round() * 24., (import_top_left.y / 24.).round() * 24.); + + let viewport_width = network_metadata.persistent_metadata.navigation_metadata.node_graph_width; + + let target_viewport_top_right = DVec2::new(viewport_width - EXPORTS_TO_RIGHT_EDGE_PIXEL_GAP as f64, EXPORTS_TO_TOP_EDGE_PIXEL_GAP as f64); + + // An offset from the right edge in viewport pixels + let node_graph_pixel_offset_top_right = node_graph_to_viewport.inverse().transform_point2(target_viewport_top_right); + + // A 5x5 grid offset from the right corner + let node_graph_grid_space_offset_top_right = node_graph_to_viewport.inverse().transform_point2(DVec2::new(viewport_width, 0.)) + DVec2::new(-5. * GRID_SIZE as f64, 4. * GRID_SIZE as f64); + + // The inner bound of the export is the highest/furthest right of the two offsets. + // When zoomed out this keeps it a constant grid space away from the edge, but when zoomed in it prevents the exports from getting too far in + let top_right_inner_bound = DVec2::new( + node_graph_pixel_offset_top_right.x.max(node_graph_grid_space_offset_top_right.x), + node_graph_pixel_offset_top_right.y.min(node_graph_grid_space_offset_top_right.y), + ); + + let offset_from_top_right = if network + .exports + .first() + .is_some_and(|export| export.as_node().is_some_and(|export_node| self.is_layer(&export_node, network_path))) + { + DVec2::new(2. * GRID_SIZE as f64, -2. * GRID_SIZE as f64) + } else { + DVec2::new(4. * GRID_SIZE as f64, 0.) + }; + + let mut bounding_box_top_right = DVec2::new((all_nodes_bounding_box[1].x / 24. + 0.5).floor() * 24., (all_nodes_bounding_box[0].y / 24. + 0.5).floor() * 24.); + bounding_box_top_right += offset_from_top_right; + let export_top_right = DVec2::new(top_right_inner_bound.x.max(bounding_box_top_right.x), top_right_inner_bound.y.min(bounding_box_top_right.y)); + let rounded_export_top_right = DVec2::new((export_top_right.x / 24.).round() * 24., (export_top_right.y / 24.).round() * 24.); + + Some((rounded_import_top_left.as_ivec2(), rounded_export_top_right.as_ivec2())) + } + + /// Returns None if there is an error, it is a hidden primary export, or a hidden input + pub fn frontend_input_from_connector(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> Option { + // Return None if it is a hidden input + if self.input_from_connector(input_connector, network_path).is_some_and(|input| !input.is_exposed()) { + return None; + } + let input_type = self.input_type(input_connector, network_path); + let data_type = input_type.displayed_type(); + let resolved_type = input_type.resolved_type_node_string(); + + let connected_to = self + .upstream_output_connector(input_connector, network_path) + .map(|output_connector| match output_connector { + OutputConnector::Node { node_id, output_index } => { + let name = self.display_name(&node_id, network_path); + format!("Connected to output #{output_index} of \"{name}\", ID: {node_id}.") + } + OutputConnector::Import(import_index) => format!("Connected to import #{import_index}."), + }) + .unwrap_or("Connected to nothing.".to_string()); + + let (name, description) = match input_connector { + InputConnector::Node { node_id, input_index } => self.displayed_input_name_and_description(node_id, *input_index, network_path), + InputConnector::Export(export_index) => { + // Get export name from parent node metadata input, which must match the number of exports. + // Empty string means to use type, or "Export + index" if type is empty determined + let export_name = if network_path.is_empty() { + "Canvas".to_string() + } else { + self.encapsulating_node_metadata(network_path) + .and_then(|encapsulating_metadata| encapsulating_metadata.persistent_metadata.output_names.get(*export_index).cloned()) + .unwrap_or_default() + }; + + let export_name = if !export_name.is_empty() { + export_name + } else if let Some(export_type_name) = input_type.compiled_nested_type().map(ToString::to_string) { + export_type_name + } else { + format!("Export #{}", export_index) + }; + + (export_name, String::new()) + } + }; + + let valid_types = self.potential_valid_input_types(input_connector, network_path).iter().map(ToString::to_string).collect::>(); + let valid_types = { + // Dedupe while preserving order + let mut found = HashSet::new(); + valid_types.into_iter().filter(|s| found.insert(s.clone())).collect::>() + }; + + Some(FrontendGraphInput { + data_type, + resolved_type, + name, + description, + valid_types, + connected_to, + }) + } + + /// Returns None if there is an error, it is the document network, a hidden primary output or import + pub fn frontend_output_from_connector(&self, output_connector: &OutputConnector, network_path: &[NodeId]) -> Option { + let output_type = self.output_type(output_connector, network_path); + let (name, description) = match output_connector { + OutputConnector::Node { node_id, output_index } => { + // Do not display the primary output port for a node if it is a network node with a hidden primary export + if *output_index == 0 && self.hidden_primary_output(node_id, network_path) { + return None; + }; + // Get the output name from the interior network export name + let node_metadata = self.node_metadata(node_id, network_path)?; + let output_name = node_metadata.persistent_metadata.output_names.get(*output_index).cloned().unwrap_or_default(); + + let output_name = if !output_name.is_empty() { output_name } else { output_type.resolved_type_node_string() }; + (output_name, String::new()) + } + OutputConnector::Import(import_index) => { + // Get the import name from the encapsulating node input metadata + let Some((encapsulating_node_id, encapsulating_path)) = network_path.split_last() else { + // Return None if it is an import in the document network + return None; + }; + // Return None if the primary input is hidden and this is the primary import + if *import_index == 0 && self.hidden_primary_import(network_path) { + return None; + }; + let (import_name, description) = self.displayed_input_name_and_description(encapsulating_node_id, *import_index, encapsulating_path); + + let import_name = if !import_name.is_empty() { + import_name + } else if let Some(import_type_name) = output_type.compiled_nested_type().map(ToString::to_string) { + import_type_name + } else { + format!("Import #{}", import_index) + }; + + (import_name, description) + } + }; + let data_type = output_type.displayed_type(); + let resolved_type = output_type.resolved_type_node_string(); + let mut connected_to = self + .with_outward_wires(network_path, |outward_wires| outward_wires.get(output_connector).cloned()) + .flatten() + .unwrap_or_default() + .iter() + .map(|input| match input { + &InputConnector::Node { node_id, input_index } => { + let name = self.display_name(&node_id, network_path); + format!("Connected to input #{input_index} of \"{name}\", ID: {node_id}.") + } + InputConnector::Export(export_index) => format!("Connected to export #{export_index}."), + }) + .collect::>(); + + if connected_to.is_empty() { + connected_to.push("Connected to nothing.".to_string()); + } + + Some(FrontendGraphOutput { + data_type, + resolved_type, + name, + description, + connected_to, + }) + } + + pub fn height_from_click_target(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option { + self.try_load_node_click_targets(node_id, network_path); + let mut node_height: Option = self + .try_get_node_bounding_box(node_id, network_path) + .map(|bounding_box| ((bounding_box[1].y - bounding_box[0].y) / 24.) as u32); + if !self.is_layer(node_id, network_path) { + node_height = node_height.map(|height| height + 1); + } + node_height + } + + /// Returns whether every downstream path from the node's outputs stays within the dependent set defined by `classify`, meaning nothing else in the graph depends on this node. + /// Reaching an export or a dead end (a walked node with no outward wires) always escapes. O(nodes + wires) per call. + pub(crate) fn is_sole_dependent(&self, node_id: NodeId, network_path: &[NodeId], classify: impl Fn(NodeId, usize) -> SoleDependentStep) -> bool { + let mut visited = HashSet::new(); + let mut stack = vec![node_id]; + + while let Some(current_node) = stack.pop() { + if !visited.insert(current_node) { + continue; + } + + // Classify every downstream connection of this node, collecting the ones to keep walking through + let number_of_outputs = self.number_of_outputs(¤t_node, network_path); + let keeps_within_set = self.with_outward_wires(network_path, |outward_wires| { + let mut has_downstream_connections = false; + let mut nodes_to_walk_through = Vec::new(); + for output_index in 0..number_of_outputs { + let Some(downstream_connections) = outward_wires.get(&OutputConnector::node(current_node, output_index)) else { + continue; + }; + for downstream_connection in downstream_connections { + has_downstream_connections = true; + let InputConnector::Node { + node_id: downstream_node, + input_index, + } = downstream_connection + else { + return false; + }; + match classify(*downstream_node, *input_index) { + SoleDependentStep::Terminate => {} + SoleDependentStep::Continue => nodes_to_walk_through.push(*downstream_node), + SoleDependentStep::Escape => return false, + } + } + } + + if !has_downstream_connections { + return false; + } + stack.extend(nodes_to_walk_through); + true + }); + + match keeps_within_set { + Some(true) => {} + Some(false) => return false, + None => { + log::error!("Could not get outward wires in is_sole_dependent"); + return false; + } + } + } + + true + } + + /// The input connector into which a layer should be inserted for the given parent and stack index. + pub(crate) fn post_node_with_index(&self, parent: LayerNodeIdentifier, insert_index: usize, network_path: &[NodeId]) -> InputConnector { + let mut post_node_input_connector = if parent == LayerNodeIdentifier::ROOT_PARENT { + InputConnector::Export(0) + } else { + InputConnector::layer_secondary_input(parent.to_node()) + }; + // Skip layers based on skip_layer_nodes, which inserts the new layer at a certain index of the layer stack. + let mut current_index = 0; + + // Set the post node to the layer node at insert_index + loop { + if current_index == insert_index { + break; + } + let next_node_in_stack_id = self + .input_from_connector(&post_node_input_connector, network_path) + .and_then(|input_from_connector| if let NodeInput::Node { node_id, .. } = input_from_connector { Some(node_id) } else { None }); + + if let Some(next_node_in_stack_id) = next_node_in_stack_id { + // Only increment index for layer nodes + if self.is_layer(next_node_in_stack_id, network_path) { + current_index += 1; + } + // Input as a sibling to the Layer node above + post_node_input_connector = InputConnector::primary_input(*next_node_in_stack_id); + } else { + log::error!("Error getting post node: insert_index out of bounds"); + break; + }; + } + + let layer_input_connector = post_node_input_connector; + + // Sink post_node down to the end of the non layer chain that feeds into post_node, such that pre_node is the layer node at insert_index + 1, or None if insert_index is the last layer + loop { + let pre_node_output_connector = self.upstream_output_connector(&post_node_input_connector, network_path); + + match pre_node_output_connector { + Some(OutputConnector::Node { node_id: pre_node_id, .. }) if !self.is_layer(&pre_node_id, network_path) => { + // Update post_node_input_connector for the next iteration + post_node_input_connector = InputConnector::primary_input(pre_node_id); + // Insert directly under layer if moving to the end of a layer stack that ends with a non layer node that does not have an exposed primary input + let primary_is_exposed = self.input_from_connector(&post_node_input_connector, network_path).is_some_and(|input| input.is_exposed()); + if !primary_is_exposed { + return layer_input_connector; + } + } + _ => break, // Break if pre_node_output_connector is None or if pre_node_id is a layer + } + } + + post_node_input_connector + } + + // All chain nodes and branches from the chain which are sole dependents of the layer + pub fn upstream_nodes_below_layer(&self, node_id: &NodeId, network_path: &[NodeId]) -> HashSet { + // Every upstream node below layer must be a sole dependent + let mut upstream_nodes_below_layer = HashSet::new(); + + let mut potential_upstream_nodes = HashSet::new(); + for chain_node in self + .upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalFlow) + .skip(1) + .take_while(|node_id| self.is_chain(node_id, network_path)) + .collect::>() + { + upstream_nodes_below_layer.insert(chain_node); + let Some(chain_node) = self.document_node(&chain_node, network_path) else { + log::error!("Could not get node {node_id} in upstream_nodes_below_layer"); + continue; + }; + potential_upstream_nodes.extend(chain_node.inputs.iter().filter(|input| input.is_exposed()).skip(1).filter_map(|node_input| node_input.as_node())) + } + + // Get the node feeding into the left input of the chain + let mut current_node_id = *node_id; + loop { + let Some(current_node) = self.document_node(¤t_node_id, network_path) else { + log::error!("Could not get node {node_id} in upstream_nodes_below_layer"); + break; + }; + if let Some(primary_node_id) = current_node + .inputs + .iter() + .filter(|input| input.is_exposed()) + .nth(if self.is_layer(¤t_node_id, network_path) { 1 } else { 0 }) + .and_then(|left_input| left_input.as_node()) + { + if self.is_chain(&primary_node_id, network_path) { + current_node_id = primary_node_id; + } else { + potential_upstream_nodes.insert(primary_node_id); + break; + } + } else { + break; + } + } + + for potential_upstream_node in potential_upstream_nodes { + // The upstream chain cannot be added if there is some node upstream from an input that is not a sole dependent + let mut upstream_chain_can_be_added = true; + // Collect a vec of nodes that are sole dependents while iterating + let mut sole_dependents = HashSet::new(); + + for upstream_node_from_input in self + .upstream_flow_back_from_nodes(vec![potential_upstream_node], network_path, FlowType::UpstreamFlow) + .collect::>() + { + // A path terminates at an already-verified sole dependent or at the left input to the chain + let is_sole_dependent = self.is_sole_dependent(upstream_node_from_input, network_path, |downstream_node, input_index| { + if sole_dependents.contains(&downstream_node) || downstream_node == *node_id && input_index == 1 { + SoleDependentStep::Terminate + } else { + SoleDependentStep::Continue + } + }); + + if is_sole_dependent { + sole_dependents.insert(upstream_node_from_input); + } else { + upstream_chain_can_be_added = false; + break; + } + } + + if upstream_chain_can_be_added { + upstream_nodes_below_layer.extend(sole_dependents) + } + } + upstream_nodes_below_layer + } + + pub fn previewing(&self, network_path: &[NodeId]) -> Previewing { + self.query(network_path, "previewing", |view| Ok(view.previewing())).unwrap_or(Previewing::No) + } + + /// Returns the root node (the node that the solid line is connect to), or None if no nodes are connected to the output + pub fn root_node(&self, network_path: &[NodeId]) -> Option { + self.query(network_path, "root_node", |view| Ok(view.root_node())).flatten() + } + + pub fn reference(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option { + self.query(network_path, "reference", |view| view.reference(node_id)).flatten() + } + + pub fn implementation(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&DocumentNodeImplementation> { + self.query(network_path, "implementation", |view| view.implementation(node_id)) + } + + pub fn input_data(&self, node_id: &NodeId, index: usize, key: &str, network_path: &[NodeId]) -> Option<&Value> { + match self.view(network_path).and_then(|view| view.input_data(node_id, index, key)) { + Ok(value) => value, + // A missing input slot is the caller probing optional data, but any other failure is a corrupt network worth logging + Err(NetworkError::InputNotFound { .. }) => None, + Err(error) => { + log::error!("{error} in input_data"); + None + } + } + } + + pub fn persistent_input_metadata(&self, node_id: &NodeId, index: usize, network_path: &[NodeId]) -> Option<&InputPersistentMetadata> { + self.view(network_path).ok().and_then(|view| view.persistent_input_metadata(node_id, index).ok()) + } + + pub fn set_input_override(&mut self, node_id: &NodeId, index: usize, widget_override: Option, network_path: &[NodeId]) { + let Some(metadata) = self + .node_metadata_mut(node_id, network_path) + .and_then(|node_metadata| node_metadata.persistent_metadata.input_metadata.get_mut(index)) + else { + log::error!("Could not get input metadata for {node_id} index {index} in set_input_override"); + return; + }; + metadata.persistent_metadata.widget_override = widget_override; + } + + /// Returns the input name to display in the properties panel. If the name is empty then the type is used. + pub fn displayed_input_name_and_description(&self, node_id: &NodeId, input_index: usize, network_path: &[NodeId]) -> (String, String) { + let Some(input_metadata) = self.persistent_input_metadata(node_id, input_index, network_path) else { + log::warn!("input metadata not found in displayed_input_name_and_description"); + return (String::new(), String::new()); + }; + let description = input_metadata.input_description.to_string(); + let name = if input_metadata.input_name.is_empty() { + self.input_type(&InputConnector::node_at_index(*node_id, input_index), network_path).resolved_type_node_string() + } else { + input_metadata.input_name.to_string() + }; + (name, description) + } + + /// Returns the display name of the node. If the display name is empty, it will return "Untitled Node" or "Untitled Layer" depending on the node type. + pub fn display_name(&self, node_id: &NodeId, network_path: &[NodeId]) -> String { + self.query(network_path, "display_name", |view| Ok(view.display_name(node_id))) + .unwrap_or_else(|| "Custom Node".to_string()) + } + + /// The uneditable name in the Properties panel which represents the function name of the node implementation. + pub fn implementation_name(&self, node_id: &NodeId, network_path: &[NodeId]) -> String { + self.query(network_path, "implementation_name", |view| Ok(view.implementation_name(node_id))) + .unwrap_or_else(|| "Custom Node".to_string()) + } + + pub fn is_locked(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "is_locked", |view| view.is_locked(node_id)).unwrap_or_default() + } + + pub fn is_pinned(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "is_pinned", |view| view.is_pinned(node_id)).unwrap_or_default() + } + + /// The given network's pinned nodes in display order: pinning appends, dragging rearranges, and any not yet recorded go last. + pub fn ordered_pinned_nodes(&self, network_path: &[NodeId]) -> Vec { + self.query(network_path, "ordered_pinned_nodes", |view| Ok(view.ordered_pinned_nodes())).unwrap_or_default() + } + + pub fn is_visible(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "is_visible", |view| view.is_visible(node_id)).unwrap_or_default() + } + + /// Whether a layer in the document network is visible, which also requires every ancestor to be visible. + pub fn is_layer_visible(&self, layer: LayerNodeIdentifier) -> bool { + layer + .ancestors(self.document_metadata()) + .all(|ancestor| ancestor == LayerNodeIdentifier::ROOT_PARENT || self.is_visible(&ancestor.to_node(), &[])) + } + + pub fn is_layer(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "is_layer", |view| view.is_layer(node_id)).unwrap_or_default() + } + + pub fn primary_output_connected_to_layer(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + let Some(downstream_connectors) = self.with_outward_wires(network_path, |outward_wires| outward_wires.get(&OutputConnector::primary_output(*node_id)).cloned()) else { + log::error!("Could not get outward_wires in primary_output_connected_to_layer"); + return false; + }; + let Some(downstream_connectors) = downstream_connectors else { + log::error!("Could not get downstream_connectors in primary_output_connected_to_layer"); + return false; + }; + + let downstream_nodes = downstream_connectors + .iter() + .filter_map(|connector| connector.node_id().filter(|_| connector.input_index() == 0)) + .collect::>(); + downstream_nodes.iter().any(|node_id| self.is_layer(node_id, network_path)) + } + + pub fn primary_input_connected_to_layer(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "primary_input_connected_to_layer", |view| Ok(view.primary_input_connected_to_layer(node_id))) + .unwrap_or_default() + } + + pub fn hidden_primary_export(&self, network_path: &[NodeId]) -> bool { + self.query(network_path, "hidden_primary_export", |view| Ok(view.hidden_primary_export())).unwrap_or_default() + } + + pub fn hidden_primary_output(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "hidden_primary_output", |view| view.hidden_primary_output(node_id)).unwrap_or_default() + } + + pub fn hidden_primary_import(&self, network_path: &[NodeId]) -> bool { + self.query(network_path, "hidden_primary_import", |view| Ok(view.hidden_primary_import())).unwrap_or_default() + } + + pub fn is_absolute(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "is_absolute", |view| view.is_absolute(node_id)).unwrap_or_default() + } + + pub fn is_chain(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "is_chain", |view| view.is_chain(node_id)).unwrap_or_default() + } + + pub fn is_stack(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "is_stack", |view| view.is_stack(node_id)).unwrap_or_default() + } + + /// Whether the node is an Artboard node by identity, regardless of whether it currently participates in the scene. + /// Callers that care about scene membership should source their layers from the document structure or check connectivity separately. + pub fn is_artboard(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "is_artboard", |view| Ok(view.is_artboard(node_id))).unwrap_or_default() + } + + /// Whether the node is a Merge node by identity, meaning it is the generic layer wrapper rather than a specialized node displayed as a layer. + pub fn is_merge(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.query(network_path, "is_merge", |view| Ok(view.is_merge(node_id))).unwrap_or_default() + } + + /// All artboard layers that participate in the scene, excluding disconnected Artboard nodes. + pub fn all_artboards(&self) -> HashSet { + // O(n * (nodes + wires)) since connected_to_output performs a graph walk per artboard candidate + self.document_network_metadata() + .persistent_metadata + .node_metadata + .iter() + .filter_map(|(node_id, node_metadata)| { + if node_metadata.persistent_metadata.network_metadata.as_ref().is_some_and(|network_metadata| { + network_metadata + .persistent_metadata + .reference + .as_ref() + .is_some_and(|reference| reference == "Artboard" && self.connected_to_output(node_id, &[]) && self.is_layer(node_id, &[])) + }) { + Some(LayerNodeIdentifier::new(*node_id, self)) + } else { + None + } + }) + .collect() + } + + /// Folders sorted from most nested to least nested + pub fn folders_sorted_by_most_nested(&self, network_path: &[NodeId]) -> Vec { + if !network_path.is_empty() { + log::error!("Currently can only get deepest common ancestor in the document network"); + return Vec::new(); + } + let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { + log::error!("Could not get selected nodes in deepest_common_ancestor"); + return Vec::new(); + }; + let mut folders: Vec<_> = selected_nodes + .selected_layers(self.document_metadata()) + .filter(|layer| layer.has_children(self.document_metadata())) + .collect(); + folders.sort_by_cached_key(|a| std::cmp::Reverse(a.ancestors(self.document_metadata()).count())); + folders + } + + /// Calculates the document bounds in document space + pub fn document_bounds_document_space(&self, include_artboards: bool) -> Option<[DVec2; 2]> { + self.combined_document_bounds(include_artboards, |metadata, layer| metadata.bounding_box_document(layer)) + } + + fn combined_document_bounds(&self, include_artboards: bool, layer_bounds: impl Fn(&DocumentMetadata, LayerNodeIdentifier) -> Option<[DVec2; 2]>) -> Option<[DVec2; 2]> { + self.document_metadata + .all_layers() + .filter(|layer| include_artboards || !self.is_artboard(&layer.to_node(), &[])) + .filter_map(|layer| { + // A layer clipped by its artboard contributes only the intersection of the two bounds + if !self.is_artboard(&layer.to_node(), &[]) + && let Some(artboard_node_identifier) = layer + .ancestors(self.document_metadata()) + .find(|ancestor| *ancestor != LayerNodeIdentifier::ROOT_PARENT && self.is_artboard(&ancestor.to_node(), &[])) + && let Some(artboard) = self.document_node(&artboard_node_identifier.to_node(), &[]) + && let Some(clip_input) = artboard.inputs.get(ARTBOARD_CLIP_INPUT_INDEX) + && let NodeInput::Value { tagged_value, .. } = clip_input + && tagged_value.clone().deref() == &TaggedValue::Bool(true) + { + return Some(Quad::clip( + layer_bounds(&self.document_metadata, layer).unwrap_or_default(), + self.document_metadata.bounding_box_document(artboard_node_identifier).unwrap_or_default(), + )); + } + layer_bounds(&self.document_metadata, layer) + }) + // Skip any layer bounds containing NaN to avoid poisoning the combined result + .filter(|[min, max]| min.is_finite() && max.is_finite()) + .reduce(Quad::combine_bounds) + } + + pub fn document_bounds_viewport_space(&self, include_artboards: bool) -> Option<[DVec2; 2]> { + let [min, max] = self.document_bounds_document_space(include_artboards)?; + let quad = Quad::from_box([min, max]); + let transformed = self.document_metadata.document_to_viewport * quad; + Some(transformed.bounding_box()) + } + + /// Calculates the document bounds in document space, expanding vector layer bounds to include the rendered + /// stroke width. Used for export so the output canvas captures strokes that overflow the path geometry. + pub fn document_bounds_document_space_with_stroke(&self, include_artboards: bool) -> Option<[DVec2; 2]> { + self.combined_document_bounds(include_artboards, |metadata, layer| metadata.bounding_box_document_with_stroke(layer)) + } + + /// Calculates the selected layer bounds in document space + pub fn selected_bounds_document_space(&self, include_artboards: bool, network_path: &[NodeId]) -> Option<[DVec2; 2]> { + let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { + log::error!("Could not get selected nodes in shallowest_unique_layers"); + return None; + }; + selected_nodes + .selected_layers(&self.document_metadata) + .filter(|&layer| include_artboards || !self.is_artboard(&layer.to_node(), &[])) + .filter_map(|layer| self.document_metadata.bounding_box_document(layer)) + .reduce(Quad::combine_bounds) + } + + /// Calculates the selected layer bounds in document space, expanding vector layer bounds to include the + /// rendered stroke width. Used for export so the output canvas captures strokes that overflow the path geometry. + pub fn selected_bounds_document_space_with_stroke(&self, include_artboards: bool, network_path: &[NodeId]) -> Option<[DVec2; 2]> { + let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) else { + log::error!("Could not get selected nodes in selected_bounds_document_space_with_stroke"); + return None; + }; + selected_nodes + .selected_layers(&self.document_metadata) + .filter(|&layer| include_artboards || !self.is_artboard(&layer.to_node(), &[])) + .filter_map(|layer| self.document_metadata.bounding_box_document_with_stroke(layer)) + .reduce(Quad::combine_bounds) + } + + /// Layers excluding ones that are children of other layers in the list. + // TODO: Cache this + pub fn shallowest_unique_layers(&self, network_path: &[NodeId]) -> impl Iterator + use<> { + let mut sorted_layers = if let Some(selected_nodes) = self.selected_nodes_in_nested_network(network_path) { + selected_nodes + .selected_layers(self.document_metadata()) + .map(|layer| { + let mut layer_path = layer.ancestors(&self.document_metadata).collect::>(); + layer_path.reverse(); + layer_path + }) + .collect::>() + } else { + log::error!("Could not get selected nodes in shallowest_unique_layers"); + Vec::new() + }; + + // Sorting here creates groups of similar UUID paths + sorted_layers.sort(); + sorted_layers.dedup_by(|a, b| a.starts_with(b)); + sorted_layers.into_iter().map(|mut path| { + let layer = path.pop().expect("Path should not be empty"); + assert!( + layer != LayerNodeIdentifier::ROOT_PARENT, + "The root parent cannot be selected, so it cannot be a shallowest selected layer" + ); + layer + }) + } + + pub fn shallowest_unique_layers_sorted(&self, network_path: &[NodeId]) -> Vec { + let all_layers_to_group = self.shallowest_unique_layers(network_path).collect::>(); + // Ensure nodes are grouped in the correct order + let mut all_layers_to_group_sorted = Vec::new(); + for descendant in LayerNodeIdentifier::ROOT_PARENT.descendants(self.document_metadata()) { + if all_layers_to_group.contains(&descendant) { + all_layers_to_group_sorted.push(descendant); + }; + } + all_layers_to_group_sorted + } + + /// Ancestor that is shared by all layers and that is deepest (more nested). Default may be the root. Skips selected non-folder, non-artboard layers + pub fn deepest_common_ancestor(&self, selected_nodes: &SelectedNodes, network_path: &[NodeId], include_self: bool) -> Option { + if !network_path.is_empty() { + log::error!("Currently can only get deepest common ancestor in the document network"); + return None; + } + selected_nodes + .selected_layers(&self.document_metadata) + .map(|layer| { + let mut layer_path = layer.ancestors(&self.document_metadata).collect::>(); + layer_path.reverse(); + if !include_self || !self.is_artboard(&layer.to_node(), network_path) { + layer_path.pop(); + } + + layer_path + }) + .reduce(|mut a, b| { + a.truncate(a.iter().zip(b.iter()).position(|(&a, &b)| a != b).unwrap_or_else(|| a.len().min(b.len()))); + a + }) + .and_then(|layer| layer.last().copied()) + } + + /// Gives an iterator to all nodes connected to the given nodes by all inputs (primary or primary + secondary depending on `only_follow_primary` choice), traversing backwards upstream starting from the given node's inputs. + pub fn upstream_flow_back_from_nodes<'a>(&'a self, node_ids: Vec, network_path: &'a [NodeId], flow_type: FlowType) -> impl Iterator + 'a { + match self.view(network_path) { + Ok(view) => view.upstream_flow(node_ids, flow_type), + Err(error) => { + log::error!("{error} in upstream_flow_back_from_nodes"); + FlowIter { + stack: Vec::new(), + network: self.document_network(), + network_metadata: &self.network_metadata, + flow_type: FlowType::UpstreamFlow, + } + } + } + } + + pub fn upstream_output_connector(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> Option { + let input = self.input_from_connector(input_connector, network_path); + input.and_then(|input| match input { + NodeInput::Node { node_id, output_index, .. } => Some(OutputConnector::node(*node_id, *output_index)), + NodeInput::Import { import_index, .. } => Some(OutputConnector::Import(*import_index)), + _ => None, + }) + } + + /// In the network `X -> Y -> Z`, `is_node_upstream_of_another_by_primary_flow(Z, X)` returns true. + pub fn is_node_upstream_of_another_by_horizontal_flow(&self, node: NodeId, network_path: &[NodeId], potentially_upstream_node: NodeId) -> bool { + self.upstream_flow_back_from_nodes(vec![node], network_path, FlowType::HorizontalFlow) + .any(|id| id == potentially_upstream_node) + } + + pub fn from_old_network(old_network: OldNodeNetwork) -> Self { + let mut node_network = NodeNetwork::default(); + let mut network_metadata = NodeNetworkMetadata::default(); + let mut stack = vec![(Vec::new(), old_network)]; + while let Some((network_path, old_network)) = stack.pop() { + let Some(nested_network) = node_network.nested_network_mut(&network_path) else { + log::error!("Could not get nested network in from_old_network"); + continue; + }; + nested_network.exports = old_network.exports; + nested_network.scope_injections = old_network.scope_injections.into_iter().collect(); + let Some(nested_network_metadata) = network_metadata.nested_metadata_mut(&network_path) else { + log::error!("Could not get nested network in from_old_network"); + continue; + }; + nested_network_metadata.persistent_metadata.previewing = Previewing::No; + for (node_id, old_node) in old_network.nodes { + let mut node = DocumentNode::default(); + let mut node_metadata = DocumentNodeMetadata::default(); + + node.inputs = old_node.inputs; + node.call_argument = old_node.manual_composition.unwrap_or_default(); + node.visible = old_node.visible; + node.skip_deduplication = old_node.skip_deduplication; + node.original_location = old_node.original_location; + node_metadata.persistent_metadata.display_name = old_node.alias; + node_metadata.persistent_metadata.locked = old_node.locked; + node_metadata.persistent_metadata.node_type_metadata = if old_node.is_layer { + NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { + position: LayerPosition::Absolute(old_node.metadata.position), + }) + } else { + NodeTypePersistentMetadata::Node(NodePersistentMetadata { + position: NodePosition::Absolute(old_node.metadata.position), + }) + }; + + match old_node.implementation { + OldDocumentNodeImplementation::ProtoNode(protonode) => { + node.implementation = DocumentNodeImplementation::ProtoNode(protonode); + } + OldDocumentNodeImplementation::Network(old_network) => { + node.implementation = DocumentNodeImplementation::Network(NodeNetwork::default()); + node_metadata.persistent_metadata.network_metadata = Some(NodeNetworkMetadata::default()); + let mut nested_path = network_path.clone(); + nested_path.push(node_id); + stack.push((nested_path, old_network)); + } + OldDocumentNodeImplementation::Extract => { + node.implementation = DocumentNodeImplementation::Extract; + } + } + + nested_network.nodes.insert(node_id, node); + nested_network_metadata.persistent_metadata.node_metadata.insert(node_id, node_metadata); + } + } + Self { + network: MemoNetwork::new(node_network), + network_metadata, + document_metadata: DocumentMetadata::default(), + resolved_types: ResolvedDocumentNodeTypes::default(), + transaction_status: TransactionStatus::Finished, + } + } +} + +// Private mutable getters for use within the network interface +impl NodeNetworkInterface { + pub(crate) fn network_mut(&mut self, network_path: &[NodeId]) -> Option<&mut NodeNetwork> { + self.document_network_mut().nested_network_mut(network_path) + } + + pub(crate) fn network_metadata_mut(&mut self, network_path: &[NodeId]) -> Option<&mut NodeNetworkMetadata> { + self.network_metadata.nested_metadata_mut(network_path) + } + + pub(crate) fn node_metadata_mut(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&mut DocumentNodeMetadata> { + let Some(network_metadata) = self.network_metadata_mut(network_path) else { + log::error!("Could not get nested network_metadata"); + return None; + }; + let Some(node_metadata) = network_metadata.persistent_metadata.node_metadata.get_mut(node_id) else { + log::error!("Could not get nested node_metadata for node {node_id} in network {network_path:?}"); + return None; + }; + Some(node_metadata) + } + + /// Mutably get the network which the encapsulating node of the currently viewed network is part of. Will always be None in the document network. + pub(crate) fn encapsulating_network_metadata_mut(&mut self, network_path: &[NodeId]) -> Option<&mut NodeNetworkMetadata> { + let mut encapsulating_path = network_path.to_vec(); + encapsulating_path.pop()?; + let Some(parent_metadata) = self.network_metadata_mut(&encapsulating_path) else { + log::error!("Could not get parent network in encapsulating_node_metadata"); + return None; + }; + Some(parent_metadata) + } + + /// Get the node metadata for the node which encapsulates the currently viewed network. Will always be None in the document network. + pub(crate) fn encapsulating_node_metadata_mut(&mut self, network_path: &[NodeId]) -> Option<&mut DocumentNodeMetadata> { + let mut encapsulating_path = network_path.to_vec(); + let encapsulating_node_id = encapsulating_path.pop()?; + let Some(parent_metadata) = self.network_metadata_mut(&encapsulating_path) else { + log::error!("Could not get parent network in encapsulating_node_metadata"); + return None; + }; + let Some(encapsulating_node_metadata) = parent_metadata.persistent_metadata.node_metadata.get_mut(&encapsulating_node_id) else { + log::error!("Could not get encapsulating node metadata in encapsulating_node_metadata"); + return None; + }; + Some(encapsulating_node_metadata) + } +} diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/resolved_types.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/resolved_types.rs index 8eaebc35a9..0f3e90f31d 100644 --- a/editor/src/messages/portfolio/document/utility_types/network_interface/resolved_types.rs +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/resolved_types.rs @@ -3,12 +3,8 @@ use std::collections::{HashMap, HashSet}; use graph_craft::document::value::TaggedValue; use graph_craft::document::{DocumentNodeImplementation, InlineRust, NodeInput}; use graph_craft::proto::{GraphErrorType, GraphErrors}; -use graph_craft::{Type, concrete}; -use graphene_std::list::List; -use graphene_std::raster_types::{CPU, Raster}; +use graph_craft::{ProtoNodeIdentifier, Type, concrete}; use graphene_std::uuid::NodeId; -use graphene_std::vector::Vector; -use graphene_std::{Artboard, Graphic}; use interpreted_executor::dynamic_executor::{NodeTypes, ResolvedDocumentNodeTypesDelta}; use interpreted_executor::node_registry::NODE_REGISTRY; @@ -56,28 +52,38 @@ impl TypeSource { return FrontendGraphDataType::Invalid; }; match self.compiled_nested_type() { - Some(nested_type) => match TaggedValue::from_type_or_none(nested_type) { - TaggedValue::U32(_) | TaggedValue::U64(_) | TaggedValue::F32(_) | TaggedValue::F64(_) | TaggedValue::DVec2(_) | TaggedValue::F64Array(_) | TaggedValue::DAffine2(_) => { - FrontendGraphDataType::Number - } - TaggedValue::Color(_) => FrontendGraphDataType::Color, - TaggedValue::LegacyGradient(_) | TaggedValue::Gradient(_) => FrontendGraphDataType::Gradient, - TaggedValue::String(_) => FrontendGraphDataType::Typography, - // Types whose `TaggedValue` variant has been removed are routed through `TypeDefault` and identified by the descriptor's type name. - TaggedValue::TypeDefault(td) => match td.name.as_ref() { - n if n == graphene_std::core_types::normalize_type_name(std::any::type_name::>()) => FrontendGraphDataType::Graphic, - n if n == graphene_std::core_types::normalize_type_name(std::any::type_name::>()) => FrontendGraphDataType::Artboard, - n if n == graphene_std::core_types::normalize_type_name(std::any::type_name::>>()) => FrontendGraphDataType::Raster, - n if n == graphene_std::core_types::normalize_type_name(std::any::type_name::>()) => FrontendGraphDataType::Vector, - n if n == graphene_std::core_types::normalize_type_name(std::any::type_name::>()) => FrontendGraphDataType::Typography, - _ => FrontendGraphDataType::General, - }, - _ => FrontendGraphDataType::General, - }, + Some(nested_type) => FrontendGraphDataType::from_type(nested_type), None => FrontendGraphDataType::General, } } + /// Whether the compiled type is a packed `Record` lane, as opposed to a bare rank-0 value. + pub fn is_list(&self) -> bool { + // `nested_type` peels `Record`, so the rank has to be read off the unpeeled type + fn is_record(ty: &Type) -> bool { + match ty { + Type::Fn(_, output) | Type::Future(output) => is_record(output), + Type::Record(_) => true, + _ => false, + } + } + match self { + TypeSource::Compiled(compiled_type) => is_record(compiled_type), + TypeSource::TaggedValue(value_type) => is_record(value_type), + _ => false, + } + } + + /// The element type, so semantic type checks can be rank-agnostic. + pub fn compiled_element_type(&self) -> Option<&Type> { + self.compiled_nested_type() + } + + /// The identifier name of [`Self::compiled_element_type`]. + pub fn compiled_element_name(&self) -> Option { + Some(self.compiled_element_type()?.identifier_name()) + } + pub fn compiled_nested_type(&self) -> Option<&Type> { match self { TypeSource::Compiled(compiled_type) => Some(compiled_type.nested_type()), @@ -115,7 +121,7 @@ impl TypeSource { } impl NodeNetworkInterface { - fn input_has_error(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) -> bool { + fn input_has_error(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> bool { match input_connector { InputConnector::Node { node_id, input_index } => { let Some(implementation) = self.implementation(node_id, network_path) else { @@ -125,10 +131,10 @@ impl NodeNetworkInterface { let node_path = [network_path, &[*node_id]].concat(); match implementation { DocumentNodeImplementation::Network(_) => { - let Some(map) = self.outward_wires(&node_path) else { return false }; - let Some(outward_wires) = map.get(&OutputConnector::Import(*input_index)) else { return false }; - outward_wires.clone().iter().any(|connector| match connector { - InputConnector::Node { node_id, input_index } => self.input_has_error(&InputConnector::node(*node_id, *input_index), &node_path), + let outward_wires = self.with_outward_wires(&node_path, |map| map.get(&OutputConnector::Import(*input_index)).cloned()).flatten(); + let Some(outward_wires) = outward_wires else { return false }; + outward_wires.iter().any(|connector| match connector { + InputConnector::Node { node_id, input_index } => self.input_has_error(&InputConnector::node_at_index(*node_id, *input_index), &node_path), InputConnector::Export(_) => false, }) } @@ -147,7 +153,7 @@ impl NodeNetworkInterface { } } - pub fn input_type_not_invalid(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) -> TypeSource { + pub fn input_type_not_invalid(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> TypeSource { let Some(input) = self.input_from_connector(input_connector, network_path) else { return TypeSource::Error("Could not get input from connector"); }; @@ -165,7 +171,7 @@ impl NodeNetworkInterface { let Some((encapsulating_node, encapsulating_path)) = network_path.split_last() else { return TypeSource::Error("Could not get type of import in document network since it has no imports"); }; - self.input_type(&InputConnector::node(*encapsulating_node, *import_index), encapsulating_path) + self.input_type(&InputConnector::node_at_index(*encapsulating_node, *import_index), encapsulating_path) } NodeInput::Scope(_) => TypeSource::Compiled(concrete!(())), NodeInput::Reflection(document_node_metadata) => TypeSource::Compiled(document_node_metadata.ty()), @@ -173,9 +179,42 @@ impl NodeNetworkInterface { } } + /// Whether the given node has a registered implementation accepting the layer chain's element type as its content input. + /// A chain awaiting compilation has no resolved type yet, so only a known-wrong type or a type error locks the layer out. + pub fn layer_chain_hosts_node(&self, node_id: &NodeId, network_path: &[NodeId], node: &ProtoNodeIdentifier) -> bool { + let secondary_input = InputConnector::layer_secondary_input(*node_id); + if !self.input_from_connector(&secondary_input, network_path).is_some_and(|input| input.is_exposed()) { + return false; + } + + let chain_type = self.input_type(&secondary_input, network_path); + match chain_type.compiled_element_type() { + Some(element) => { + let Some(implementations) = NODE_REGISTRY.get(node) else { + log::error!("Proto node {node:?} not found in the node registry, in layer_chain_hosts_node"); + return false; + }; + implementations.keys().any(|node_io| node_io.inputs.first().is_some_and(|content| content.nested_type() == element)) + } + None => !matches!(chain_type, TypeSource::Invalid), + } + } + + /// Whether the blending nodes (blend mode, opacity, clipping mask) can be spliced into this layer's chain. + pub fn layer_hosts_blending_nodes(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + // Blend Mode stands in for the trio since they share one implementations list + self.layer_chain_hosts_node(node_id, network_path, &graphene_std::blending_nodes::blend_mode::IDENTIFIER) + } + + /// Whether the Fill and Stroke nodes can be spliced into this layer's chain. + pub fn layer_hosts_paint_nodes(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + // Fill stands in for both since they share one implementations list + self.layer_chain_hosts_node(node_id, network_path, &graphene_std::vector_nodes::fill::IDENTIFIER) + } + /// Get the [`TypeSource`] for any InputConnector. /// If the input is not compiled, then an Unknown or default from the definition is returned. - pub fn input_type(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) -> TypeSource { + pub fn input_type(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> TypeSource { // First check if there is an error with this node or any protonodes it is connected to if self.input_has_error(input_connector, network_path) { return TypeSource::Invalid; @@ -184,7 +223,7 @@ impl NodeNetworkInterface { } /// Gets the default tagged value for an input. If its not compiled, then it tries to get a valid type. If there are no valid types, then it picks a random implementation. - pub fn tagged_value_from_input(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) -> TaggedValue { + pub fn tagged_value_from_input(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> TaggedValue { let guaranteed_type = match self.input_type(input_connector, network_path) { TypeSource::Compiled(compiled) => compiled, TypeSource::TaggedValue(value) => value, @@ -206,11 +245,13 @@ impl NodeNetworkInterface { concrete!(()) } }; + + // `TaggedValue::from_type` recurses through `Record` to the element, so a record default already drops to rank 0 TaggedValue::from_type_or_none(&guaranteed_type) } /// A list of all valid input types for this specific node. - pub fn potential_valid_input_types(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) -> Vec { + pub fn potential_valid_input_types(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> Vec { let InputConnector::Node { node_id, input_index } = input_connector else { // An export can have any type connected to it return vec![graph_craft::generic!(T)]; @@ -222,17 +263,15 @@ impl NodeNetworkInterface { match implementation { DocumentNodeImplementation::Network(_) => { let nested_path = [network_path, &[*node_id]].concat(); - let Some(outward_wires) = self.outward_wires(&nested_path) else { - log::error!("Could not get outward wires in potential_valid_input_types"); - return Vec::new(); - }; - let Some(inputs_from_import) = outward_wires.get(&OutputConnector::Import(*input_index)) else { + let inputs_from_import = self + .with_outward_wires(&nested_path, |outward_wires| outward_wires.get(&OutputConnector::Import(*input_index)).cloned()) + .flatten(); + let Some(inputs_from_import) = inputs_from_import else { log::error!("Could not get inputs from import in potential_valid_input_types"); return Vec::new(); }; let intersection: HashSet = inputs_from_import - .clone() .iter() .map(|input_connector| self.potential_valid_input_types(input_connector, &nested_path).into_iter().collect::>()) .fold(None, |acc: Option>, set| match acc { @@ -258,7 +297,7 @@ impl NodeNetworkInterface { let node_io = &entry.io; // Check if this NodeIOTypes implementation is valid for the other inputs let valid_implementation = (0..number_of_inputs).filter(|iterator_index| iterator_index != input_index).all(|iterator_index| { - let input_type = self.input_type_not_invalid(&InputConnector::node(*node_id, iterator_index), network_path); + let input_type = self.input_type_not_invalid(&InputConnector::node_at_index(*node_id, iterator_index), network_path); // TODO: Fix type checking for different call arguments // For example a node input of (Footprint) -> Vector would not be compatible with a node that is called with () and returns Vector node_io.inputs.get(iterator_index).map(|ty| ty.nested_type()) == input_type.compiled_nested_type() @@ -277,7 +316,7 @@ impl NodeNetworkInterface { } /// Performs a downstream traversal to ensure input type will work in the full context of the graph. - pub fn complete_valid_input_types(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) -> Vec { + pub fn complete_valid_input_types(&self, input_connector: &InputConnector, network_path: &[NodeId]) -> Vec { match input_connector { InputConnector::Node { node_id, input_index } => { let Some(implementation) = self.implementation(node_id, network_path) else { @@ -291,7 +330,7 @@ impl NodeNetworkInterface { log::error!("Protonode {proto_node_identifier:?} not found in registry in complete_valid_input_types"); return Vec::new(); }; - let valid_output_types = self.valid_output_types(&OutputConnector::node(*node_id, 0), network_path); + let valid_output_types = self.valid_output_types(&OutputConnector::primary_output(*node_id), network_path); implementations .iter() @@ -302,7 +341,7 @@ impl NodeNetworkInterface { } let valid_inputs = (0..node_io.inputs.len()).filter(|iterator_index| iterator_index != input_index).all(|iterator_index| { - let input_type = self.input_type_not_invalid(&InputConnector::node(*node_id, iterator_index), network_path); + let input_type = self.input_type_not_invalid(&InputConnector::node_at_index(*node_id, iterator_index), network_path); match input_type.compiled_nested_type() { Some(input_type) => node_io.inputs.get(iterator_index).is_some_and(|node_io_input_type| node_io_input_type.nested_type() == input_type), None => true, @@ -332,15 +371,24 @@ impl NodeNetworkInterface { } } - pub fn output_type(&mut self, output_connector: &OutputConnector, network_path: &[NodeId]) -> TypeSource { + pub fn output_type(&self, output_connector: &OutputConnector, network_path: &[NodeId]) -> TypeSource { match output_connector { OutputConnector::Node { node_id, output_index } => { + // A hidden node is replaced by a passthrough during flattening, so its output carries its primary input's type + if *output_index == 0 && !self.is_visible(node_id, network_path) { + return self.input_type(&InputConnector::primary_input(*node_id), network_path); + } + // First try iterating upstream to the first protonode and try get its compiled type let Some(implementation) = self.implementation(node_id, network_path) else { return TypeSource::Error("Could not get implementation"); }; match implementation { DocumentNodeImplementation::Network(_) => self.input_type(&InputConnector::Export(*output_index), &[network_path, &[*node_id]].concat()), + // The compiler removes passthrough nodes so they resolve no type of their own, but their output carries their primary input's type + DocumentNodeImplementation::ProtoNode(identifier) if *identifier == graphene_std::ops::passthrough::IDENTIFIER => { + self.input_type(&InputConnector::primary_input(*node_id), network_path) + } DocumentNodeImplementation::ProtoNode(_) => match self.resolved_types.types.get(&[network_path, &[*node_id]].concat()) { Some(resolved_type) => TypeSource::Compiled(resolved_type.output.clone()), None => TypeSource::Unknown, @@ -352,7 +400,7 @@ impl NodeNetworkInterface { let Some((encapsulating_node, encapsulating_path)) = network_path.split_last() else { return TypeSource::Error("Cannot get import type in document network since it has no imports"); }; - let mut input_type = self.input_type(&InputConnector::node(*encapsulating_node, *import_index), encapsulating_path); + let mut input_type = self.input_type(&InputConnector::node_at_index(*encapsulating_node, *import_index), encapsulating_path); if matches!(input_type, TypeSource::Invalid) { input_type = TypeSource::Unknown } @@ -362,18 +410,14 @@ impl NodeNetworkInterface { } /// The valid output types are all types that are valid for each downstream connection. - fn valid_output_types(&mut self, output_connector: &OutputConnector, network_path: &[NodeId]) -> Vec { - let Some(outward_wires) = self.outward_wires(network_path) else { - log::error!("Could not get outward wires in valid_output_types"); - return Vec::new(); - }; - let Some(inputs_from_import) = outward_wires.get(output_connector) else { + fn valid_output_types(&self, output_connector: &OutputConnector, network_path: &[NodeId]) -> Vec { + let inputs_from_import = self.with_outward_wires(network_path, |outward_wires| outward_wires.get(output_connector).cloned()).flatten(); + let Some(inputs_from_import) = inputs_from_import else { log::error!("Could not get inputs from import in valid_output_types"); return Vec::new(); }; let intersection = inputs_from_import - .clone() .iter() .map(|input_connector| self.potential_valid_input_types(input_connector, network_path).into_iter().collect::>()) .fold(None, |acc: Option>, set| match acc { diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/storage_metadata.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/storage_metadata.rs index 7085cd8d6e..cb46371cb6 100644 --- a/editor/src/messages/portfolio/document/utility_types/network_interface/storage_metadata.rs +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/storage_metadata.rs @@ -387,6 +387,5 @@ fn input_metadata_entry_to_runtime(entry: InputMetadataEntry) -> InputMetadata { widget_override: entry.widget_override, input_data: entry.input_data, }, - ..Default::default() } } diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/structure.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/structure.rs new file mode 100644 index 0000000000..72003336d7 --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/structure.rs @@ -0,0 +1,193 @@ +use super::*; + +impl NodeNetworkInterface { + pub fn compute_modified_vector(&self, layer: LayerNodeIdentifier) -> Option { + let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, self); + + if let Some(path_node) = graph_layer.upstream_visible_node_id_from_name_in_layer(&DefinitionIdentifier::Network("Path".into())) + && let Some(vector) = self.document_metadata.vector_modify.get(&path_node) + { + let mut modified = vector.clone(); + + let path_node = self.document_network().nodes.get(&path_node); + let modification_input = path_node.and_then(|node: &DocumentNode| node.inputs.get(1)).and_then(|input| input.as_value()); + if let Some(TaggedValue::VectorModification(modification)) = modification_input { + modification.apply(&mut modified); + } + return Some(modified); + } + + self.document_metadata.layer_vector_data.get(&layer).map(|arc| arc.as_ref().clone()) + } + + /// The vector geometry an upstream Path node would surface for editing. + /// This is the result of `compute_modified_vector`, but only if a visible 'Path' node is actually upstream. + /// Useful for tool overlays and snap target collection usages that want to match the Path tool's view + /// (e.g. the pre-solidified centerline for a Solidify Stroke layer) and otherwise do nothing. + pub fn upstream_path_node_vector(&self, layer: LayerNodeIdentifier) -> Option { + let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, self); + graph_layer.upstream_visible_node_id_from_name_in_layer(&DefinitionIdentifier::Network("Path".into()))?; + self.compute_modified_vector(layer) + } + + /// Outline targets for the Select tool's hover/selection overlay, mirroring the Path tool's view. + /// Returns `Some` when an upstream Path node exists so the outline matches what the Path tool edits + /// (e.g. the pre-solidified centerline for a Solidify Stroke layer); returns `None` otherwise so the + /// caller can fall back to the layer's recorded `outlines`/`click_targets`. + pub fn path_aware_outline_targets(&self, layer: LayerNodeIdentifier) -> Option> { + let vector = self.upstream_path_node_vector(layer)?; + + let mut targets = Vec::new(); + let mut combined = BezPath::new(); + for bezpath in vector.stroke_bezpath_iter() { + combined.extend(bezpath.elements().iter().copied()); + } + if !combined.is_empty() { + targets.push(ClickTargetType::Path(combined)); + } + + for &point_id in vector.point_domain.ids() { + if !vector.any_connected(point_id) { + let position = vector.point_domain.position_from_id(point_id).unwrap_or_default(); + targets.push(ClickTargetType::FreePoint(FreePoint::new(point_id, position))); + } + } + + Some(targets) + } + + /// Loads the structure of layer nodes from a node graph. + pub fn load_structure(&mut self) { + self.document_metadata.structure = HashMap::from_iter([(LayerNodeIdentifier::ROOT_PARENT, NodeRelations::default())]); + + // Only load structure if there is a root node + let Some(root_node) = self.root_node(&[]) else { return }; + + let Some(first_root_layer) = self + .upstream_flow_back_from_nodes(vec![root_node.node_id], &[], FlowType::PrimaryFlow) + .find_map(|node_id| if self.is_layer(&node_id, &[]) { Some(LayerNodeIdentifier::new(node_id, self)) } else { None }) + else { + return; + }; + // Should refer to output node + let mut awaiting_horizontal_flow = vec![(first_root_layer.to_node(), first_root_layer)]; + let mut awaiting_primary_flow = vec![]; + + while let Some((horizontal_root_node_id, mut parent_layer_node)) = awaiting_horizontal_flow.pop() { + let horizontal_flow_iter = self.upstream_flow_back_from_nodes(vec![horizontal_root_node_id], &[], FlowType::HorizontalFlow); + let mut children = Vec::new(); + + // Special handling for the root layer, since it should not be skipped + if horizontal_root_node_id == first_root_layer.to_node() { + for current_node_id in horizontal_flow_iter { + if self.is_layer(¤t_node_id, &[]) { + let current_layer_node = LayerNodeIdentifier::new(current_node_id, self); + if !self.document_metadata.structure.contains_key(¤t_layer_node) { + if current_node_id == first_root_layer.to_node() { + awaiting_primary_flow.push((current_node_id, LayerNodeIdentifier::ROOT_PARENT)); + children.push((LayerNodeIdentifier::ROOT_PARENT, current_layer_node)); + } else { + awaiting_primary_flow.push((current_node_id, parent_layer_node)); + children.push((parent_layer_node, current_layer_node)); + } + parent_layer_node = current_layer_node; + } + } + } + } else { + // Skip the horizontal_root_node_id node + for current_node_id in horizontal_flow_iter.skip(1) { + if self.is_layer(¤t_node_id, &[]) { + let current_layer_node = LayerNodeIdentifier::new(current_node_id, self); + if !self.document_metadata.structure.contains_key(¤t_layer_node) { + awaiting_primary_flow.push((current_node_id, parent_layer_node)); + children.push((parent_layer_node, current_layer_node)); + parent_layer_node = current_layer_node; + } + } + } + } + + for (parent, child) in children { + parent.push_child(&mut self.document_metadata, child); + } + + while let Some((primary_root_node_id, parent_layer_node)) = awaiting_primary_flow.pop() { + let primary_flow_iter = self.upstream_flow_back_from_nodes(vec![primary_root_node_id], &[], FlowType::PrimaryFlow); + // Skip the primary_root_node_id node + let mut children = Vec::new(); + for current_node_id in primary_flow_iter.skip(1) { + if self.is_layer(¤t_node_id, &[]) { + // Create a new layer for the top of each stack, and add it as a child to the previous parent + let current_layer_node = LayerNodeIdentifier::new(current_node_id, self); + if !self.document_metadata.structure.contains_key(¤t_layer_node) { + children.push(current_layer_node); + + // The layer nodes for the horizontal flow is itself + awaiting_horizontal_flow.push((current_node_id, current_layer_node)); + } + } + } + for child in children { + parent_layer_node.push_child(&mut self.document_metadata, child); + } + } + } + + let nodes: HashSet = self.document_network().nodes.keys().cloned().collect::>(); + + self.document_metadata.upstream_footprints.retain(|node, _| nodes.contains(node)); + self.document_metadata.local_transforms.retain(|node, _| nodes.contains(node)); + self.document_metadata.vector_modify.retain(|node, _| nodes.contains(node)); + self.document_metadata.click_targets.retain(|layer, _| self.document_metadata.structure.contains_key(layer)); + self.document_metadata.outlines.retain(|layer, _| self.document_metadata.structure.contains_key(layer)); + self.document_metadata.text_frames.retain(|layer, _| self.document_metadata.structure.contains_key(layer)); + } + + /// Update the cached transforms of the layers + pub fn update_transforms(&mut self, upstream_footprints: HashMap, local_transforms: HashMap) { + self.document_metadata.upstream_footprints = upstream_footprints; + self.document_metadata.local_transforms = local_transforms; + } + + /// Update the cached first item's source id of the layers + pub fn update_first_element_source_id(&mut self, new: HashMap>) { + self.document_metadata.first_element_source_ids = new; + } + + /// Update the cached click targets of the layers + pub fn update_click_targets(&mut self, new_click_targets: HashMap>>) { + self.document_metadata.click_targets = new_click_targets; + } + + /// Update the cached source-geometry outline targets of the layers + pub fn update_outlines(&mut self, new_outlines: HashMap>>) { + self.document_metadata.outlines = new_outlines; + } + + /// Update the cached per-layer 'Text' node text frames in row-local space (as `DAffine2` + /// mapping the unit square onto the frame). + pub fn update_text_frames(&mut self, new_text_frames: HashMap) { + self.document_metadata.text_frames = new_text_frames; + } + + /// Update the cached clip targets of the layers + pub fn update_clip_targets(&mut self, new_clip_targets: HashSet) { + self.document_metadata.clip_targets = new_clip_targets; + } + + /// Update the vector modify of the layers + pub fn update_vector_modify(&mut self, new_vector_modify: HashMap) { + self.document_metadata.vector_modify = new_vector_modify; + } + + /// Update the layer vector data (for layers without Path nodes) + pub fn update_vector_data(&mut self, new_layer_vector_data: HashMap>) { + self.document_metadata.layer_vector_data = new_layer_vector_data; + } + + /// Update the per-layer `ATTR_APPEARANCE` snapshot. + pub fn update_appearance_attributes(&mut self, new_layer_appearance_attributes: HashMap>) { + self.document_metadata.layer_appearance_attributes = new_layer_appearance_attributes; + } +} diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/template.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/template.rs new file mode 100644 index 0000000000..3fccaba631 --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/template.rs @@ -0,0 +1,320 @@ +use super::*; +use graph_craft::ProtoNodeIdentifier; +use graph_craft::concrete; +use graphene_std::Context; + +// PartialEq required by message handlers +/// All persistent editor and Graphene data for a node, unified into a single flat shape. +/// Used to author node definitions, pass nodes through the editor, and serialize them for the clipboard. +/// +/// [`Self::into_parts`] and [`Self::from_parts`] are the only places this is split into (or joined from) the +/// [`DocumentNode`] and [`DocumentNodePersistentMetadata`] halves stored by the network interface, so the parallel-tree +/// storage invariants hold by construction for every node built from a template. +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(from = "NodeTemplateParts", into = "NodeTemplateParts")] +pub struct NodeTemplate { + /// The graph data inputs to the node. Kept the same length as `input_metadata` by [`Self::normalize_input_metadata`] and [`Self::into_parts`]. + pub inputs: Vec, + /// Type of the argument which this node can be evaluated with. + pub call_argument: Type, + /// A nested network of templates, a proto node identifier, or the Extract tag. + pub implementation: NodeTemplateImplementation, + /// Represents the eye icon for hiding/showing the node in the graph UI. + pub visible: bool, + /// Prevents identical proto nodes from being deduplicated during compilation, e.g. for monitor nodes. + pub skip_deduplication: bool, + /// List of Extract and Inject annotations for the Context. + pub context_features: ContextDependencies, + /// A name chosen by the user for this instance of the node. Empty indicates no given name, in which case the implementation name is displayed in italics. + pub display_name: String, + /// Metadata to override the properties panel widgets for each input. Kept the same length as `inputs`. + pub input_metadata: Vec, + pub output_names: Vec, + /// Represents the lock icon for locking/unlocking the node in the graph UI. + pub locked: bool, + /// Indicates that the node will be shown in the Properties panel when it would otherwise be empty. + pub pinned: bool, + /// Whether the node is displayed as a left-to-right node or bottom-to-top layer, along with its position. + pub node_type_metadata: NodeTypePersistentMetadata, +} + +impl NodeTemplate { + /// The input slot named by the given parameter symbol, mirroring [`DocumentNode::input`]. + pub fn input(&self, _parameter: P) -> Option<&NodeInput> { + self.inputs.get(P::INDEX) + } + + /// Mutable access to the input slot named by the given parameter symbol, mirroring [`DocumentNode::input_mut`]. + pub fn input_mut(&mut self, _parameter: P) -> Option<&mut NodeInput> { + self.inputs.get_mut(P::INDEX) + } +} + +impl Default for NodeTemplate { + fn default() -> Self { + Self { + inputs: Vec::new(), + call_argument: concrete!(Context), + implementation: NodeTemplateImplementation::default(), + visible: true, + skip_deduplication: false, + context_features: ContextDependencies::default(), + display_name: String::new(), + input_metadata: Vec::new(), + output_names: Vec::new(), + locked: false, + pinned: false, + node_type_metadata: NodeTypePersistentMetadata::default(), + } + } +} + +/// The implementation of a [`NodeTemplate`], mirroring [`DocumentNodeImplementation`] but carrying unified templates for nested network nodes. +// Templates are transient authoring objects, so the Network variant's size is not worth the authoring noise of boxing +#[allow(clippy::large_enum_variant)] +#[derive(Debug, Clone, PartialEq)] +pub enum NodeTemplateImplementation { + Network(NodeNetworkTemplate), + ProtoNode(ProtoNodeIdentifier), + Extract, +} + +impl Default for NodeTemplateImplementation { + fn default() -> Self { + NodeTemplateImplementation::ProtoNode(graphene_std::ops::passthrough::IDENTIFIER) + } +} + +/// A nested network within a [`NodeTemplate`], holding each nested node as a unified template alongside the network-level persistent metadata. +#[derive(Debug, Clone, Default, PartialEq)] +pub struct NodeNetworkTemplate { + pub exports: Vec, + pub nodes: HashMap, + pub scope_injections: HashMap, + /// The identifier of the [`DocumentNodeDefinition`] this network was instantiated from, if unmodified. + /// + /// [`DocumentNodeDefinition`]: crate::messages::portfolio::document::node_graph::document_node_definitions::DocumentNodeDefinition + pub reference: Option, + /// The display order of pinned nodes in the Properties panel. + pub pinned_node_order: Vec, + pub previewing: Previewing, + pub navigation_metadata: NavigationMetadata, +} + +impl NodeTemplate { + /// Joins a [`DocumentNode`] and its persistent metadata into the unified template shape. Missing nested metadata is filled with defaults. + pub fn from_parts(document_node: DocumentNode, persistent_node_metadata: DocumentNodePersistentMetadata) -> Self { + let DocumentNode { + inputs, + call_argument, + implementation, + visible, + skip_deduplication, + context_features, + original_location: _, + } = document_node; + let DocumentNodePersistentMetadata { + display_name, + input_metadata, + output_names, + locked, + pinned, + node_type_metadata, + network_metadata, + } = persistent_node_metadata; + + let implementation = match implementation { + DocumentNodeImplementation::Network(network) => { + let mut nested_persistent = network_metadata.map(|metadata| metadata.persistent_metadata).unwrap_or_default(); + + // Pair each nested node with its metadata by ID, recursively + let mut nodes = HashMap::with_capacity(network.nodes.len()); + for (node_id, node) in network.nodes { + let node_persistent_metadata = nested_persistent.node_metadata.remove(&node_id).map(|metadata| metadata.persistent_metadata).unwrap_or_default(); + nodes.insert(node_id, NodeTemplate::from_parts(node, node_persistent_metadata)); + } + + NodeTemplateImplementation::Network(NodeNetworkTemplate { + exports: network.exports, + nodes, + scope_injections: network.scope_injections.into_iter().collect(), + reference: nested_persistent.reference, + pinned_node_order: nested_persistent.pinned_node_order, + previewing: nested_persistent.previewing, + navigation_metadata: nested_persistent.navigation_metadata, + }) + } + DocumentNodeImplementation::ProtoNode(identifier) => NodeTemplateImplementation::ProtoNode(identifier), + DocumentNodeImplementation::Extract => NodeTemplateImplementation::Extract, + }; + + NodeTemplate { + inputs, + call_argument, + implementation, + visible, + skip_deduplication, + context_features, + display_name, + input_metadata, + output_names, + locked, + pinned, + node_type_metadata, + } + } + + /// Splits the template into the [`DocumentNode`] and [`DocumentNodePersistentMetadata`] halves stored by the network interface. + pub fn into_parts(self) -> (DocumentNode, DocumentNodePersistentMetadata) { + let NodeTemplate { + inputs, + call_argument, + implementation, + visible, + skip_deduplication, + context_features, + display_name, + mut input_metadata, + output_names, + locked, + pinned, + node_type_metadata, + } = self; + + let (implementation, network_metadata) = implementation.into_parts(); + + // The stored metadata invariant requires exactly one input metadata entry per input + input_metadata.resize_with(inputs.len(), InputMetadata::default); + + let document_node = DocumentNode { + inputs, + call_argument, + implementation, + visible, + skip_deduplication, + context_features, + original_location: Default::default(), + }; + let persistent_node_metadata = DocumentNodePersistentMetadata { + display_name, + input_metadata, + output_names, + locked, + pinned, + node_type_metadata, + network_metadata, + }; + (document_node, persistent_node_metadata) + } + + /// Resizes `input_metadata` to match `inputs` at every nesting level, filling gaps with defaults. + pub fn normalize_input_metadata(&mut self) { + self.input_metadata.resize_with(self.inputs.len(), InputMetadata::default); + + if let NodeTemplateImplementation::Network(network_template) = &mut self.implementation { + for nested_template in network_template.nodes.values_mut() { + nested_template.normalize_input_metadata(); + } + } + } + + /// Normalizes the stored types at every nesting level via [`DocumentNode::normalize_stored_types`], round-tripping through the split halves to reuse its logic. + pub fn normalize_stored_types(&mut self) { + let (mut document_node, persistent_node_metadata) = std::mem::take(self).into_parts(); + document_node.normalize_stored_types(); + *self = NodeTemplate::from_parts(document_node, persistent_node_metadata); + } +} + +impl NodeTemplateImplementation { + /// Splits into the [`DocumentNodeImplementation`] and the nested network metadata stored alongside it. + pub fn into_parts(self) -> (DocumentNodeImplementation, Option) { + match self { + NodeTemplateImplementation::Network(network_template) => { + let NodeNetworkTemplate { + exports, + nodes, + scope_injections, + reference, + pinned_node_order, + previewing, + navigation_metadata, + } = network_template; + + // Split each nested template into its two halves, recursively + let mut network = NodeNetwork { + exports, + scope_injections: scope_injections.into_iter().collect(), + ..Default::default() + }; + let mut node_metadata = HashMap::with_capacity(nodes.len()); + for (node_id, node_template) in nodes { + let (document_node, persistent_metadata) = node_template.into_parts(); + network.nodes.insert(node_id, document_node); + node_metadata.insert( + node_id, + DocumentNodeMetadata { + persistent_metadata, + transient_metadata: Default::default(), + }, + ); + } + + let network_metadata = NodeNetworkMetadata { + persistent_metadata: NodeNetworkPersistentMetadata { + reference, + node_metadata, + pinned_node_order, + previewing, + navigation_metadata, + selection_undo_history: Default::default(), + selection_redo_history: Default::default(), + }, + transient_metadata: Default::default(), + }; + (DocumentNodeImplementation::Network(network), Some(network_metadata)) + } + NodeTemplateImplementation::ProtoNode(identifier) => (DocumentNodeImplementation::ProtoNode(identifier), None), + NodeTemplateImplementation::Extract => (DocumentNodeImplementation::Extract, None), + } + } +} + +/// Collects resource IDs referenced by a template and its nested networks. +pub fn collect_template_resources(template: &NodeTemplate, out: &mut HashSet) { + for input in &template.inputs { + collect_input_resource(input, out); + } + + if let NodeTemplateImplementation::Network(network_template) = &template.implementation { + for export in &network_template.exports { + collect_input_resource(export, out); + } + for nested_template in network_template.nodes.values() { + collect_template_resources(nested_template, out); + } + } +} + +/// The legacy two-tree shape of [`NodeTemplate`], kept as its serde representation so serialized clipboard data round-trips across versions. +#[derive(serde::Serialize, serde::Deserialize)] +struct NodeTemplateParts { + document_node: DocumentNode, + persistent_node_metadata: DocumentNodePersistentMetadata, +} + +impl From for NodeTemplate { + fn from(parts: NodeTemplateParts) -> Self { + NodeTemplate::from_parts(parts.document_node, parts.persistent_node_metadata) + } +} + +impl From for NodeTemplateParts { + fn from(template: NodeTemplate) -> Self { + let (document_node, persistent_node_metadata) = template.into_parts(); + NodeTemplateParts { + document_node, + persistent_node_metadata, + } + } +} diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/types.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/types.rs new file mode 100644 index 0000000000..d3a53066b8 --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/types.rs @@ -0,0 +1,914 @@ +use super::*; +use graphene_std::ParameterRef; +use graphene_std::vector::misc::dvec2_to_point; +use kurbo::{DEFAULT_ACCURACY, Shape}; + +/// Axis-aligned rectangle spanning the two opposite corners, used for node graph chrome click targets. +pub fn rectangle_path(corner1: DVec2, corner2: DVec2) -> BezPath { + kurbo::Rect::from_points(dvec2_to_point(corner1), dvec2_to_point(corner2)).to_path(DEFAULT_ACCURACY) +} + +/// Same as [`rectangle_path`] but with per-corner radii ordered top left, top right, bottom right, bottom left. +pub fn rounded_rectangle_path(corner1: DVec2, corner2: DVec2, radii: [f64; 4]) -> BezPath { + let rect = kurbo::Rect::from_points(dvec2_to_point(corner1), dvec2_to_point(corner2)); + if radii.iter().all(|radius| *radius == 0.) { + return rect.to_path(DEFAULT_ACCURACY); + } + + let [top_left, top_right, bottom_right, bottom_left] = radii; + kurbo::RoundedRect::from_rect(rect, kurbo::RoundedRectRadii::new(top_left, top_right, bottom_right, bottom_left)).to_path(DEFAULT_ACCURACY) +} + +/// Ellipse inscribed in the box spanning the two opposite corners. +pub fn ellipse_path(corner1: DVec2, corner2: DVec2) -> BezPath { + let rect = kurbo::Rect::from_points(dvec2_to_point(corner1), dvec2_to_point(corner2)); + let mut path = kurbo::Ellipse::new(rect.center(), (rect.width() / 2., rect.height() / 2.), 0.).to_path(DEFAULT_ACCURACY); + + // Kurbo emits the ellipse as an unclosed 360 degree arc, but hit testing only fills explicitly closed contours + path.close_path(); + path +} + +#[derive(PartialEq)] +pub enum FlowType { + /// Iterate over all upstream nodes (inclusive) from every input (the primary and all secondary). + UpstreamFlow, + /// Iterate over nodes (inclusive) connected to the primary input. + PrimaryFlow, + /// Iterate over the secondary input (inclusive) for layer nodes and primary input for non layer nodes. + HorizontalFlow, + /// Same as horizontal flow, but only iterates over connections to primary outputs + HorizontalPrimaryOutputFlow, + /// Upstream flow starting from the either the node (inclusive) or secondary input of the layer (not inclusive). + LayerChildrenUpstreamFlow, +} +/// Iterate over upstream nodes. The behavior changes based on the `flow_type` that's set. +/// - [`FlowType::UpstreamFlow`]: iterates over all upstream nodes from every input (the primary and all secondary). +/// - [`FlowType::PrimaryFlow`]: iterates along the horizontal inputs of nodes, so in the case of a node chain `a -> b -> c`, this would yield `c, b, a` if we started from `c`. +/// - [`FlowType::HorizontalFlow`]: iterates over the secondary input for layer nodes and primary input for non layer nodes. +/// - [`FlowType::LayerChildrenUpstreamFlow`]: iterates over all upstream nodes from the secondary input of the node. +pub(crate) struct FlowIter<'a> { + pub(crate) stack: Vec, + pub(crate) network: &'a NodeNetwork, + pub(crate) network_metadata: &'a NodeNetworkMetadata, + pub(crate) flow_type: FlowType, +} +impl Iterator for FlowIter<'_> { + type Item = NodeId; + fn next(&mut self) -> Option { + loop { + let node_id = self.stack.pop()?; + + if let (Some(document_node), Some(node_metadata)) = (self.network.nodes.get(&node_id), self.network_metadata.persistent_metadata.node_metadata.get(&node_id)) { + let skip = if matches!(self.flow_type, FlowType::HorizontalFlow | FlowType::HorizontalPrimaryOutputFlow) && node_metadata.persistent_metadata.is_layer() { + 1 + } else { + 0 + }; + let take = if self.flow_type == FlowType::UpstreamFlow { u32::MAX as usize } else { 1 }; + let inputs = document_node.inputs.iter().skip(skip).take(take); + + let node_ids = inputs.filter_map(|input| match input { + NodeInput::Node { output_index, .. } if self.flow_type == FlowType::HorizontalPrimaryOutputFlow && *output_index != 0 => None, + NodeInput::Node { node_id, .. } => Some(node_id), + _ => None, + }); + + self.stack.extend(node_ids); + + return Some(node_id); + } + } + } +} + +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum ImportOrExport { + Import(usize), + Export(usize), +} + +/// The primary input (index 0) of any node: a chain node's horizontal wire continuing from the left, or a layer's vertical stack wire from the sibling rendered below it. +pub const PRIMARY_INPUT_INDEX: usize = 0; +/// The secondary input (index 1) of a layer-shaped node: the horizontal wire from the left, carrying the node chain or child stack that the layer renders. +pub const LAYER_SECONDARY_INPUT_INDEX: usize = 1; +/// The primary output (index 0) of a node, which most nodes expose as their only output. +pub const PRIMARY_OUTPUT_INDEX: usize = 0; + +/// Represents an input connector with index based on the [`DocumentNode::inputs`] index, not the visible input index +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +pub enum InputConnector { + #[serde(rename = "node")] + Node { + #[serde(rename = "nodeId")] + node_id: NodeId, + #[serde(rename = "inputIndex")] + input_index: usize, + }, + #[serde(rename = "export")] + Export(usize), +} + +impl Default for InputConnector { + fn default() -> Self { + InputConnector::Export(0) + } +} + +impl InputConnector { + /// Reference a node's input by its parameter symbol, e.g. `InputConnector::node(node_id, stroke::WeightInput)`, or by an erased [`ParameterRef`] chosen at runtime. + pub fn node(node_id: NodeId, parameter: impl Into) -> Self { + InputConnector::Node { + node_id, + input_index: parameter.into().input_index, + } + } + + /// Reference a node's primary input: a chain node's continuation from the left, or a layer's stack wire from the bottom. + pub fn primary_input(node_id: NodeId) -> Self { + InputConnector::Node { + node_id, + input_index: PRIMARY_INPUT_INDEX, + } + } + + /// Reference a layer-shaped node's secondary input, the wire from the left carrying the content that the layer renders. + pub fn layer_secondary_input(node_id: NodeId) -> Self { + InputConnector::Node { + node_id, + input_index: LAYER_SECONDARY_INPUT_INDEX, + } + } + + /// Reference a node's input by a runtime index, for genuinely dynamic cases like clicked ports, input enumeration, and document upgrades. + pub fn node_at_index(node_id: NodeId, input_index: usize) -> Self { + InputConnector::Node { node_id, input_index } + } + + pub fn input_index(&self) -> usize { + match self { + InputConnector::Node { input_index, .. } => *input_index, + InputConnector::Export(input_index) => *input_index, + } + } + + pub fn node_id(&self) -> Option { + match self { + InputConnector::Node { node_id, .. } => Some(*node_id), + _ => None, + } + } +} + +/// Represents an output connector +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum OutputConnector { + #[serde(rename = "node")] + Node { + #[serde(rename = "nodeId")] + node_id: NodeId, + #[serde(rename = "outputIndex")] + output_index: usize, + }, + #[serde(rename = "import")] + Import(usize), +} + +impl Default for OutputConnector { + fn default() -> Self { + OutputConnector::Import(0) + } +} + +impl OutputConnector { + pub fn node(node_id: NodeId, output_index: usize) -> Self { + OutputConnector::Node { node_id, output_index } + } + + /// Reference a node's primary (first) output. + pub fn primary_output(node_id: NodeId) -> Self { + OutputConnector::Node { + node_id, + output_index: PRIMARY_OUTPUT_INDEX, + } + } + + pub fn index(&self) -> usize { + match self { + OutputConnector::Node { output_index, .. } => *output_index, + OutputConnector::Import(output_index) => *output_index, + } + } + + pub fn node_id(&self) -> Option { + match self { + OutputConnector::Node { node_id, .. } => Some(*node_id), + _ => None, + } + } + + pub fn from_input(input: &NodeInput) -> Option { + match input { + NodeInput::Import { import_index, .. } => Some(Self::Import(*import_index)), + NodeInput::Node { node_id, output_index, .. } => Some(Self::node(*node_id, *output_index)), + _ => None, + } + } +} + +#[derive(Debug, Clone)] +pub struct Ports { + pub(crate) input_ports: Vec<(usize, ClickTarget)>, + pub(crate) output_ports: Vec<(usize, ClickTarget)>, +} + +impl Default for Ports { + fn default() -> Self { + Self::new() + } +} + +impl Ports { + pub fn new() -> Ports { + Ports { + input_ports: Vec::new(), + output_ports: Vec::new(), + } + } + + pub fn click_targets(&self) -> impl Iterator { + self.input_ports + .iter() + .map(|(_, click_target)| click_target) + .chain(self.output_ports.iter().map(|(_, click_target)| click_target)) + } + + pub fn input_ports(&self) -> impl Iterator { + self.input_ports.iter() + } + + pub fn output_ports(&self) -> impl Iterator { + self.output_ports.iter() + } + + pub(crate) fn insert_input_port_at_center(&mut self, input_index: usize, center: DVec2) { + let path = ellipse_path(center - DVec2::new(8., 8.), center + DVec2::new(8., 8.)); + self.insert_custom_input_port(input_index, ClickTarget::new_with_path(path, 0.)); + } + + pub(crate) fn insert_custom_input_port(&mut self, input_index: usize, click_target: ClickTarget) { + self.input_ports.push((input_index, click_target)); + } + + pub(crate) fn insert_output_port_at_center(&mut self, output_index: usize, center: DVec2) { + let path = ellipse_path(center - DVec2::new(8., 8.), center + DVec2::new(8., 8.)); + self.insert_custom_output_port(output_index, ClickTarget::new_with_path(path, 0.)); + } + + pub(crate) fn insert_custom_output_port(&mut self, output_index: usize, click_target: ClickTarget) { + self.output_ports.push((output_index, click_target)); + } + + pub(crate) fn insert_node_input(&mut self, input_index: usize, row_index: usize, node_top_left: DVec2) { + // The center of the click target is always 24 px down from the top left corner of the node + let center = node_top_left + DVec2::new(0., 24. + 24. * row_index as f64); + self.insert_input_port_at_center(input_index, center); + } + + pub(crate) fn insert_node_output(&mut self, output_index: usize, node_top_left: DVec2) { + // The center of the click target is always 24 px down from the top left corner of the node + let center = node_top_left + DVec2::new(5. * 24., 24. + 24. * output_index as f64); + self.insert_output_port_at_center(output_index, center); + } + + pub(crate) fn insert_layer_input(&mut self, input_index: usize, node_top_left: DVec2) { + let center = if input_index == 0 { + node_top_left + DVec2::new(2. * 24., 24. * 2. + 8.) + } else { + node_top_left + DVec2::new(0., 24. * 1.) + }; + self.insert_input_port_at_center(input_index, center); + } + + pub(crate) fn insert_layer_output(&mut self, node_top_left: DVec2) { + // The center of the click target is always 24 px down from the top left corner of the node + let center = node_top_left + DVec2::new(2. * 24., -8.); + self.insert_output_port_at_center(0, center); + } + + pub fn clicked_input_port_from_point(&self, point: DVec2) -> Option { + self.input_ports.iter().find_map(|(port, click_target)| click_target.intersect_point_no_stroke(point).then_some(*port)) + } + + pub fn clicked_output_port_from_point(&self, point: DVec2) -> Option { + self.output_ports.iter().find_map(|(port, click_target)| click_target.intersect_point_no_stroke(point).then_some(*port)) + } + + pub fn input_port_position(&self, index: usize) -> Option { + self.input_ports + .iter() + .find_map(|(port_index, click_target)| if *port_index == index { click_target.bounding_box_center() } else { None }) + } + + pub fn output_port_position(&self, index: usize) -> Option { + self.output_ports + .iter() + .find_map(|(port_index, click_target)| if *port_index == index { click_target.bounding_box_center() } else { None }) + } +} + +#[derive(PartialEq, Debug, Clone, Copy, Hash, Default, serde::Serialize, serde::Deserialize)] +pub struct RootNode { + pub node_id: NodeId, + pub output_index: usize, +} + +impl RootNode { + pub fn to_connector(&self) -> OutputConnector { + OutputConnector::Node { + node_id: self.node_id, + output_index: self.output_index, + } + } +} + +#[derive(PartialEq, Debug, Clone, Copy, Hash, Default, serde::Serialize, serde::Deserialize)] +pub enum Previewing { + /// If there is a node to restore the connection to the export for, then it is stored in the option. + /// Otherwise, nothing gets restored and the primary export is disconnected. + Yes { root_node_to_restore: Option }, + #[default] + No, +} + +/// All fields in NetworkMetadata should automatically be updated by using the network interface API. If a field is none then it should be calculated based on the network state. +#[derive(Debug, Default, serde::Serialize, serde::Deserialize)] +pub struct NodeNetworkMetadata { + pub persistent_metadata: NodeNetworkPersistentMetadata, + #[serde(skip)] + pub transient_metadata: NodeNetworkTransientMetadata, +} + +impl Clone for NodeNetworkMetadata { + fn clone(&self) -> Self { + NodeNetworkMetadata { + persistent_metadata: self.persistent_metadata.clone(), + transient_metadata: Default::default(), + } + } +} + +impl PartialEq for NodeNetworkMetadata { + fn eq(&self, other: &Self) -> bool { + self.persistent_metadata == other.persistent_metadata + } +} + +impl NodeNetworkMetadata { + pub fn nested_metadata(&self, nested_path: &[NodeId]) -> Option<&Self> { + let mut network_metadata = Some(self); + + for segment in nested_path { + network_metadata = network_metadata + .and_then(|network| network.persistent_metadata.node_metadata.get(segment)) + .and_then(|node| node.persistent_metadata.network_metadata.as_ref()); + } + network_metadata + } + + /// Get the mutable nested network given by the path of node ids + pub fn nested_metadata_mut(&mut self, nested_path: &[NodeId]) -> Option<&mut Self> { + let mut network_metadata = Some(self); + + for segment in nested_path { + network_metadata = network_metadata + .and_then(|network: &mut NodeNetworkMetadata| network.persistent_metadata.node_metadata.get_mut(segment)) + .and_then(|node| node.persistent_metadata.network_metadata.as_mut()); + } + network_metadata + } +} + +#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct NodeNetworkPersistentMetadata { + /// The identifier for the node definition created for custom network nodes in [`DocumentNodeDefinition`]. + /// It is only used to associate network nodes with their definition. Protonodes use their ProtonodeIdentifier. + /// The reference is removed once the node is modified, since the node now stores its own implementation and inputs. + /// TODO: Used during serialization/deserialization to prevent storing implementation or inputs (and possible other fields) if they are the same as the definition. + /// TODO: Implement node versioning so that references to old nodes can be updated to the new node definition. + pub reference: Option, + /// Node metadata must exist for every document node in the network + #[serde(serialize_with = "graphene_std::vector::serialize_hashmap", deserialize_with = "graphene_std::vector::deserialize_hashmap")] + pub node_metadata: HashMap, + /// The display order of pinned nodes in the Properties panel (shown when nothing is selected in this network), keyed by node ID. + #[serde(default)] + pub pinned_node_order: Vec, + /// Cached metadata for each node, which is calculated when adding a node to node_metadata + /// Indicates whether the network is currently rendered with a particular node that is previewed, and if so, which connection should be restored when the preview ends. + pub previewing: Previewing, + // Stores the transform and navigation state for the network + pub navigation_metadata: NavigationMetadata, + /// Stack of selection snapshots for previous history states. Session state that is not persisted into saved documents. + #[serde(skip)] + pub selection_undo_history: VecDeque, + /// Stack of selection snapshots for future history states. + #[serde(skip)] + pub selection_redo_history: VecDeque, +} + +/// A lazily computed cache slot whose load and read paths work through &self, with interior mutability guarding the stored value. +#[derive(Debug, Clone)] +pub(crate) struct TransientCache(std::cell::RefCell>); + +impl Default for TransientCache { + fn default() -> Self { + TransientCache(std::cell::RefCell::new(None)) + } +} + +impl TransientCache { + pub(crate) fn is_loaded(&self) -> bool { + self.0.borrow().is_some() + } + + pub(crate) fn store(&self, value: T) { + *self.0.borrow_mut() = Some(value); + } + + pub(crate) fn unload(&self) { + *self.0.borrow_mut() = None; + } + + /// Runs `read` on the cached value if it is loaded. + pub(crate) fn with_loaded(&self, read: impl FnOnce(&T) -> R) -> Option { + self.0.borrow().as_ref().map(read) + } + + /// Direct access without runtime borrow tracking, for callers already holding exclusive access. + pub(crate) fn get_loaded_mut(&mut self) -> Option<&mut T> { + self.0.get_mut().as_mut() + } +} + +/// If some network calculation is too slow to compute for every usage, cache the data here +#[derive(Debug, Default, Clone)] +pub struct NodeNetworkTransientMetadata { + pub selected_nodes: SelectedNodes, + /// Sole dependents of the top of the stacks of all selected nodes. Used to determine which nodes are checked for collision when shifting. + /// The LayerOwner is used to determine whether the collided node should be shifted, or the layer that owns it. + pub(crate) stack_dependents: TransientCache>, + /// Cache for the bounding box around all nodes in node graph space. + pub(crate) all_nodes_bounding_box: TransientCache<[DVec2; 2]>, + /// Cache for all outward wire connections + pub(crate) outward_wires: TransientCache>>, + /// All export connector click targets + pub(crate) import_export_ports: TransientCache, + /// Click targets for adding, removing, and moving import/export ports + pub(crate) modify_import_export: TransientCache, + + /// Cached wire SVG paths per input connector, where an entry's presence means that wire is loaded. + pub(crate) wires: std::cell::RefCell>, + /// Drag-session state: how far each unowned stack dependent has been pushed vertically from its resting position. Cleared when the drag ends. + pub(crate) drag_offsets: std::cell::RefCell>, +} + +#[derive(Debug, Clone)] +pub struct ModifyImportExportClickTarget { + // Subtract icon that appears when hovering over an import/export + pub remove_imports_exports: Ports, + // Grip drag icon that appears when hovering over an import/export + pub reorder_imports_exports: Ports, +} + +#[derive(Debug, Clone)] +pub struct NetworkEdgeDistance { + /// The viewport pixel distance between the left edge of the node graph and the exports. + pub exports_to_edge_distance: DVec2, + /// The viewport pixel distance between the left edge of the node graph and the imports. + pub imports_to_edge_distance: DVec2, +} + +#[derive(Debug, Clone)] +pub enum LayerOwner { + // Used to get the layer that should be shifted when there is a collision. + Layer(NodeId), + None, +} + +#[derive(Debug, Default, serde::Serialize, serde::Deserialize)] +pub struct DocumentNodeMetadata { + #[serde(deserialize_with = "deserialize_node_persistent_metadata")] + pub persistent_metadata: DocumentNodePersistentMetadata, + #[serde(skip)] + pub transient_metadata: DocumentNodeTransientMetadata, +} + +impl Clone for DocumentNodeMetadata { + fn clone(&self) -> Self { + DocumentNodeMetadata { + persistent_metadata: self.persistent_metadata.clone(), + transient_metadata: Default::default(), + } + } +} + +impl PartialEq for DocumentNodeMetadata { + fn eq(&self, other: &Self) -> bool { + self.persistent_metadata == other.persistent_metadata + } +} + +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +pub struct NumberInputSettings { + pub unit: Option, + pub min: Option, + pub max: Option, + pub step: Option, + pub mode: NumberInputMode, + pub range_min: Option, + pub range_max: Option, + pub is_integer: bool, + pub blank_assist: bool, +} + +impl Default for NumberInputSettings { + fn default() -> Self { + NumberInputSettings { + unit: None, + min: None, + max: None, + step: None, + mode: NumberInputMode::default(), + range_min: None, + range_max: None, + is_integer: false, + blank_assist: true, + } + } +} + +#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)] +pub struct Vec2InputSettings { + pub x: String, + pub y: String, + pub unit: String, + pub min: Option, + pub is_integer: bool, +} + +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +pub enum WidgetOverride { + None, + Hidden, + String(String), + Number(NumberInputSettings), + Vec2(Vec2InputSettings), + Custom(String), +} + +// TODO: Custom deserialization/serialization to ensure number of properties row matches number of node inputs +#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct InputPersistentMetadata { + /// A general datastore than can store key value pairs of any types for any input + /// Each instance of the input node needs to store its own data, since it can lose the reference to its + /// node definition if the node signature is modified by the user. For example adding/removing/renaming an import/export of a network node. + #[serde(serialize_with = "graphene_std::vector::serialize_hashmap_as_sorted_object")] + pub input_data: HashMap, + // An input can override a widget, which would otherwise be automatically generated from the type + // The string is the identifier to the widget override function stored in INPUT_OVERRIDES + pub widget_override: Option, + /// An empty input name means to use the type as the name. + pub input_name: String, + /// Displayed as the tooltip description. + pub input_description: String, +} + +impl InputPersistentMetadata { + pub fn with_name(mut self, input_name: &str) -> Self { + self.input_name = input_name.to_string(); + self + } + pub fn with_override(mut self, widget_override: WidgetOverride) -> Self { + match widget_override { + // Uses the default widget for the type + WidgetOverride::None => { + self.widget_override = None; + } + WidgetOverride::Hidden => { + self.widget_override = Some("hidden".to_string()); + } + WidgetOverride::String(string_properties) => { + self.input_data.insert("string_properties".to_string(), Value::String(string_properties)); + self.widget_override = Some("string".to_string()); + } + WidgetOverride::Number(mut number_properties) => { + if let Some(unit) = number_properties.unit.take() { + self.input_data.insert("unit".to_string(), json!(unit)); + } + if let Some(min) = number_properties.min.take() { + self.input_data.insert("min".to_string(), json!(min)); + } + if let Some(max) = number_properties.max.take() { + self.input_data.insert("max".to_string(), json!(max)); + } + if let Some(step) = number_properties.step.take() { + self.input_data.insert("step".to_string(), json!(step)); + } + if let Some(range_min) = number_properties.range_min.take() { + self.input_data.insert("range_min".to_string(), json!(range_min)); + } + if let Some(range_max) = number_properties.range_max.take() { + self.input_data.insert("range_max".to_string(), json!(range_max)); + } + self.input_data.insert("mode".to_string(), json!(number_properties.mode)); + self.input_data.insert("is_integer".to_string(), Value::Bool(number_properties.is_integer)); + self.input_data.insert("blank_assist".to_string(), Value::Bool(number_properties.blank_assist)); + self.widget_override = Some("number".to_string()); + } + WidgetOverride::Vec2(vec2_properties) => { + self.input_data.insert("x".to_string(), json!(vec2_properties.x)); + self.input_data.insert("y".to_string(), json!(vec2_properties.y)); + self.input_data.insert("unit".to_string(), json!(vec2_properties.unit)); + self.input_data.insert("is_integer".to_string(), Value::Bool(vec2_properties.is_integer)); + if let Some(min) = vec2_properties.min { + self.input_data.insert("min".to_string(), json!(min)); + } + self.widget_override = Some("vec2".to_string()); + } + WidgetOverride::Custom(lambda_name) => { + self.widget_override = Some(lambda_name); + } + }; + self + } + + pub fn with_description(mut self, description: &str) -> Self { + self.input_description = description.to_string(); + self + } +} + +/// Persistent metadata for each node in the network, which must be included when creating, serializing, and deserializing saving a node. +#[derive(Default, Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(deny_unknown_fields)] +pub struct DocumentNodePersistentMetadata { + /// A name chosen by the user for this instance of the node. Empty indicates no given name, in which case the implementation name is displayed to the user in italics. + #[serde(default)] + pub display_name: String, + /// Stores metadata to override the properties in the properties panel for each input. These can either be generated automatically based on the type, or with a custom function. + /// Must match the length of node inputs + pub input_metadata: Vec, + pub output_names: Vec, + /// Represents the lock icon for locking/unlocking the node in the graph UI. When locked, a node cannot be moved in the graph UI. + #[serde(default)] + pub locked: bool, + /// Indicates that the node will be shown in the Properties panel when it would otherwise be empty, letting a user easily edit its properties by just deselecting everything. + #[serde(default)] + pub pinned: bool, + /// Metadata that is specific to either nodes or layers, which are chosen states for displaying as a left-to-right node or bottom-to-top layer. + /// All fields in NodeTypePersistentMetadata should automatically be updated by using the network interface API + pub node_type_metadata: NodeTypePersistentMetadata, + /// This should always be Some for nodes with a [`DocumentNodeImplementation::Network`], and none for [`DocumentNodeImplementation::ProtoNode`] + pub network_metadata: Option, +} + +impl DocumentNodePersistentMetadata { + pub fn is_layer(&self) -> bool { + matches!(self.node_type_metadata, NodeTypePersistentMetadata::Layer(_)) + } +} + +#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)] +pub struct InputMetadata { + pub persistent_metadata: InputPersistentMetadata, +} + +impl PartialEq for InputMetadata { + fn eq(&self, other: &Self) -> bool { + self.persistent_metadata == other.persistent_metadata + } +} + +impl From<(&str, &str)> for InputMetadata { + fn from(input_name_and_description: (&str, &str)) -> Self { + InputMetadata { + persistent_metadata: InputPersistentMetadata::default() + .with_name(input_name_and_description.0) + .with_description(input_name_and_description.1), + } + } +} + +impl InputMetadata { + pub fn with_name_description_override(input_name: &str, description: &str, widget_override: WidgetOverride) -> Self { + InputMetadata { + persistent_metadata: InputPersistentMetadata::default().with_name(input_name).with_description(description).with_override(widget_override), + } + } +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub enum NodeTypePersistentMetadata { + Layer(LayerPersistentMetadata), + Node(NodePersistentMetadata), +} + +impl Default for NodeTypePersistentMetadata { + fn default() -> Self { + NodeTypePersistentMetadata::node(IVec2::ZERO) + } +} + +impl NodeTypePersistentMetadata { + pub fn node(position: IVec2) -> NodeTypePersistentMetadata { + NodeTypePersistentMetadata::Node(NodePersistentMetadata { + position: NodePosition::Absolute(position), + }) + } + pub fn layer(position: IVec2) -> NodeTypePersistentMetadata { + NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { + position: LayerPosition::Absolute(position), + }) + } +} + +/// All fields in LayerMetadata should automatically be updated by using the network interface API +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +pub struct LayerPersistentMetadata { + /// Stores the position of a layer node, which can either be Absolute or Stack + pub position: LayerPosition, +} + +impl PartialEq for LayerPersistentMetadata { + fn eq(&self, other: &Self) -> bool { + self.position == other.position + } +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct NodePersistentMetadata { + /// Stores the position of a non layer node, which can either be Absolute or Chain + pub(crate) position: NodePosition, +} + +impl NodePersistentMetadata { + pub fn new(position: NodePosition) -> Self { + Self { position } + } + pub fn position(&self) -> &NodePosition { + &self.position + } +} + +/// A layer can either be position as Absolute or in a Stack +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub enum LayerPosition { + // Position of the node in grid spaces + Absolute(IVec2), + // A layer is in a Stack when it feeds into the bottom input of a layer. The Y position stores the vertical distance between the layer and its upstream sibling/parent. + Stack(u32), +} + +/// A node can either be position as Absolute or in a Chain +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub enum NodePosition { + // Position of the node in grid spaces + Absolute(IVec2), + // In a chain the position is based on the number of nodes to the first layer node + Chain, +} + +/// Cached metadata that should be calculated when creating a node, and should be recalculated when modifying a node property that affects one of the cached fields. +#[derive(Debug, Default, Clone)] +pub struct DocumentNodeTransientMetadata { + // The click targets are stored as a single struct since it is very rare for only one to be updated, and recomputing all click targets in one function is more efficient than storing them separately. + pub(crate) click_targets: TransientCache, + /// All nodes that should be moved when this layer is moved, kept here since only layers own nodes. + pub(crate) owned_nodes: TransientCache>, + /// Width in grid units from the left edge of the layer's thumbnail to its left end, cached since text measurement is slow. Only loaded for layers. + pub(crate) layer_width: TransientCache, +} + +#[derive(Debug, Clone)] +pub struct DocumentNodeClickTargets { + /// In order to keep the displayed position of the node in sync with the click target, the displayed position of a node is derived from the top left of the click target + /// Ensure node_click_target is kept in sync when modifying a node property that changes its size. Currently this is alias, inputs, is_layer, and metadata + pub node_click_target: ClickTarget, + /// Stores all port click targets in node graph space. + pub port_click_targets: Ports, + // Click targets that are specific to either nodes or layers, which are chosen states for displaying as a left-to-right node or bottom-to-top layer. + pub node_type_metadata: NodeTypeClickTargets, +} + +#[derive(Debug, Clone)] +pub enum NodeTypeClickTargets { + Layer(Box), + Node, // No transient click targets are stored exclusively for nodes +} + +/// All fields in TransientLayerMetadata should automatically be updated by using the network interface API +#[derive(Debug, Clone)] +pub struct LayerClickTargets { + /// Cache for all visibility buttons. Should be automatically updated when update_click_target is called + pub visibility_click_target: ClickTarget, + /// Cache for the lock icon button, only present when the layer is locked. + pub lock_click_target: Option, + /// Cache for the grip icon, which is next to the visibility button. + pub grip_click_target: ClickTarget, + /// Cache for the layer's display-name text bounds. Used to detect double-click rename and + /// to skip the drill-into-subgraph behavior when the click lands on the name itself. + /// `None` for layers whose display name is empty. + pub name_click_target: Option, +} + +pub enum LayerClickTargetTypes { + Visibility, + Lock, + Grip, + Name, + // Preview, +} + +#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct NavigationMetadata { + /// The current pan, and zoom state of the viewport's view of the node graph. + /// Ensure `DocumentMessage::UpdateDocumentTransform` is called when the pan, zoom, or transform changes. + pub node_graph_ptz: PTZ, + // TODO: Eventually remove once te click targets are extracted from the native render + /// Transform from node graph space to viewport space. + pub node_graph_to_viewport: DAffine2, + // TODO: Eventually remove once the import/export positions are extracted from the native render + /// The width of the node graph in viewport space + #[serde(default)] + pub node_graph_width: f64, +} + +#[derive(Clone, Copy, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)] +pub enum TransactionStatus { + Started, + Modified, + #[default] + Finished, +} + +/// How [`NodeNetworkInterface::is_sole_dependent`] should treat a downstream connector it encounters. +#[derive(Clone, Copy, Debug)] +pub(crate) enum SoleDependentStep { + /// The downstream path ends here, inside the dependent set. + Terminate, + /// Keep walking downstream through this node. + Continue, + /// The path leaves the dependent set, so the candidate is not a sole dependent. + Escape, +} + +pub(crate) fn collect_network_resources(network: &NodeNetwork, out: &mut HashSet) { + for export in &network.exports { + collect_input_resource(export, out); + } + for node in network.nodes.values() { + collect_node_resources(node, out); + } +} + +/// Collects resource IDs referenced by a node and its nested networks. +pub fn collect_node_resources(node: &DocumentNode, out: &mut HashSet) { + for input in &node.inputs { + collect_input_resource(input, out); + } + if let DocumentNodeImplementation::Network(nested) = &node.implementation { + collect_network_resources(nested, out); + } +} + +/// Records the resource ID held by a value input, covering node inputs and export slots alike. +pub(crate) fn collect_input_resource(input: &NodeInput, out: &mut HashSet) { + if let NodeInput::Value { tagged_value, .. } = input + && let TaggedValue::Resource(id) = &**tagged_value + { + out.insert(*id); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn port_click_targets_are_clickable_at_their_center() { + let center = DVec2::new(100., 50.); + let mut ports = Ports::new(); + ports.insert_input_port_at_center(0, center); + ports.insert_output_port_at_center(0, center + DVec2::new(200., 0.)); + + assert_eq!(ports.clicked_input_port_from_point(center), Some(0)); + assert_eq!(ports.clicked_input_port_from_point(center + DVec2::new(5., 5.)), Some(0)); + assert_eq!(ports.clicked_input_port_from_point(center + DVec2::new(20., 0.)), None); + + assert_eq!(ports.clicked_output_port_from_point(center + DVec2::new(200., 0.)), Some(0)); + assert_eq!(ports.clicked_output_port_from_point(center), None); + } +} diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/validation.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/validation.rs new file mode 100644 index 0000000000..59e7407297 --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/validation.rs @@ -0,0 +1,103 @@ +use super::{NodeNetworkInterface, NodeNetworkMetadata}; +use graph_craft::document::{DocumentNodeImplementation, NodeId, NodeInput, NodeNetwork}; + +impl NodeNetworkInterface { + /// Checks the structural invariants between the document network and its parallel metadata tree at every nesting level. + /// Returns a description of each violation found, or an empty list if the interface is internally consistent. + /// Intended for tests and debugging; violations indicate a desync bug in the mutation methods, not a user error. + // O(nodes + wires) summed across all nesting levels, plus an acyclicity walk per network + pub fn validate_invariants(&self) -> Vec { + let mut violations = Vec::new(); + validate_network(self.document_network(), &self.network_metadata, &mut Vec::new(), 0, &mut violations); + violations + } +} + +fn validate_network(network: &NodeNetwork, network_metadata: &NodeNetworkMetadata, path: &mut Vec, import_count: usize, violations: &mut Vec) { + let node_metadata = &network_metadata.persistent_metadata.node_metadata; + + // The network and its metadata tree must contain exactly the same set of nodes + for node_id in network.nodes.keys() { + if !node_metadata.contains_key(node_id) { + violations.push(format!("Node {node_id} in network {path:?} has no metadata entry")); + } + } + for node_id in node_metadata.keys() { + if !network.nodes.contains_key(node_id) { + violations.push(format!("Metadata entry {node_id} in network {path:?} has no corresponding node")); + } + } + + // The pinned display order may only reference existing nodes + for node_id in &network_metadata.persistent_metadata.pinned_node_order { + if !network.nodes.contains_key(node_id) { + violations.push(format!("Pinned node order in network {path:?} references nonexistent node {node_id}")); + } + } + + // Every wire must reference an existing endpoint within this network + let validate_input = |input: &NodeInput, location: &str, violations: &mut Vec| match input { + NodeInput::Node { node_id, output_index, .. } => match network.nodes.get(node_id) { + None => violations.push(format!("{location} in network {path:?} references nonexistent node {node_id}")), + Some(target) if *output_index >= target.implementation.output_count() => { + violations.push(format!("{location} in network {path:?} references nonexistent output {output_index} of node {node_id}")); + } + _ => {} + }, + NodeInput::Import { import_index, .. } if *import_index >= import_count => { + violations.push(format!("{location} in network {path:?} references nonexistent import {import_index} of {import_count}")); + } + _ => {} + }; + + for (node_id, node) in &network.nodes { + for input in &node.inputs { + validate_input(input, &format!("Input of node {node_id}"), violations); + } + } + for (export_index, export) in network.exports.iter().enumerate() { + validate_input(export, &format!("Export {export_index}"), violations); + } + + if !network.is_acyclic() { + violations.push(format!("Network {path:?} contains a cycle")); + } + + for (node_id, node) in &network.nodes { + let Some(metadata) = node_metadata.get(node_id) else { continue }; + let persistent = &metadata.persistent_metadata; + + // Input metadata is a parallel array to the node's inputs and the lengths must stay in sync + if persistent.input_metadata.len() != node.inputs.len() { + violations.push(format!( + "Node {node_id} in network {path:?} has {} inputs but {} input metadata entries", + node.inputs.len(), + persistent.input_metadata.len() + )); + } + + // Nested network metadata must exist exactly for nodes implemented as networks + match (&node.implementation, &persistent.network_metadata) { + (DocumentNodeImplementation::Network(nested_network), Some(nested_metadata)) => { + if persistent.output_names.len() != nested_network.exports.len() { + violations.push(format!( + "Node {node_id} in network {path:?} has {} exports but {} output names", + nested_network.exports.len(), + persistent.output_names.len() + )); + } + + path.push(*node_id); + validate_network(nested_network, nested_metadata, path, node.inputs.len(), violations); + path.pop(); + } + (DocumentNodeImplementation::Network(_), None) => { + violations.push(format!("Network node {node_id} in network {path:?} is missing its nested network metadata")); + } + (_, Some(_)) => { + violations.push(format!("Non-network node {node_id} in network {path:?} has nested network metadata")); + } + (_, None) => {} + } + } +} diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/view.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/view.rs new file mode 100644 index 0000000000..6c99aca531 --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/view.rs @@ -0,0 +1,415 @@ +use super::*; + +/// A failure to resolve part of the network or its metadata, returned by [`NetworkView`] accessors. +#[derive(Debug, Clone, PartialEq, thiserror::Error)] +pub enum NetworkError { + #[error("Network not found at path {path:?}")] + NetworkNotFound { path: Vec }, + #[error("Node {node_id} not found")] + NodeNotFound { node_id: NodeId }, + #[error("Node metadata for {node_id} not found")] + NodeMetadataNotFound { node_id: NodeId }, + #[error("Nested network metadata for node {node_id} not found")] + NestedMetadataNotFound { node_id: NodeId }, + #[error("Input {connector:?} not found")] + InputNotFound { connector: InputConnector }, + #[error("The document network has no encapsulating node")] + NoEncapsulatingNode, +} + +/// A read cursor over one network nesting level, resolving the network and its parallel metadata once instead of per query. +/// Obtained from [`NodeNetworkInterface::view`]; accessors return typed errors that callers at the message boundary may log. +#[derive(Clone, Copy)] +pub struct NetworkView<'a, 'p> { + pub(crate) interface: &'a NodeNetworkInterface, + pub(crate) path: &'p [NodeId], + pub(crate) network: &'a NodeNetwork, + pub(crate) metadata: &'a NodeNetworkMetadata, +} + +impl NodeNetworkInterface { + /// Resolves a read cursor for the network at `network_path`, walking the nested network and metadata trees once. + pub fn view<'a, 'p>(&'a self, network_path: &'p [NodeId]) -> Result, NetworkError> { + let network = self + .document_network() + .nested_network(network_path) + .ok_or_else(|| NetworkError::NetworkNotFound { path: network_path.to_vec() })?; + let metadata = self + .document_network_metadata() + .nested_metadata(network_path) + .ok_or_else(|| NetworkError::NetworkNotFound { path: network_path.to_vec() })?; + + Ok(NetworkView { + interface: self, + path: network_path, + network, + metadata, + }) + } +} + +impl<'a, 'p> NetworkView<'a, 'p> { + pub fn network_metadata(&self) -> &'a NodeNetworkMetadata { + self.metadata + } + + pub fn node(&self, node_id: &NodeId) -> Result<&'a DocumentNode, NetworkError> { + self.network.nodes.get(node_id).ok_or(NetworkError::NodeNotFound { node_id: *node_id }) + } + + pub fn node_metadata(&self, node_id: &NodeId) -> Result<&'a DocumentNodeMetadata, NetworkError> { + self.metadata + .persistent_metadata + .node_metadata + .get(node_id) + .ok_or(NetworkError::NodeMetadataNotFound { node_id: *node_id }) + } + + pub fn input(&self, input_connector: &InputConnector) -> Result<&'a NodeInput, NetworkError> { + let input = match input_connector { + InputConnector::Node { node_id, input_index } => self.node(node_id)?.inputs.get(*input_index), + InputConnector::Export(export_index) => self.network.exports.get(*export_index), + }; + input.ok_or(NetworkError::InputNotFound { connector: *input_connector }) + } + + /// The view over the network which contains this network's encapsulating node, or an error in the document network. + pub fn encapsulating(&self) -> Result, NetworkError> { + let (_, encapsulating_path) = self.path.split_last().ok_or(NetworkError::NoEncapsulatingNode)?; + self.interface.view(encapsulating_path) + } + + /// The node which encapsulates this network, or an error in the document network. + pub fn encapsulating_node(&self) -> Result<&'a DocumentNode, NetworkError> { + let (node_id, _) = self.path.split_last().ok_or(NetworkError::NoEncapsulatingNode)?; + self.encapsulating()?.node(node_id) + } + + /// The metadata of the node which encapsulates this network, or an error in the document network. + pub fn encapsulating_node_metadata(&self) -> Result<&'a DocumentNodeMetadata, NetworkError> { + let (node_id, _) = self.path.split_last().ok_or(NetworkError::NoEncapsulatingNode)?; + self.encapsulating()?.node_metadata(node_id) + } + + pub fn implementation(&self, node_id: &NodeId) -> Result<&'a DocumentNodeImplementation, NetworkError> { + Ok(&self.node(node_id)?.implementation) + } + + pub fn reference(&self, node_id: &NodeId) -> Result, NetworkError> { + match self.implementation(node_id)? { + DocumentNodeImplementation::Network(_) => { + let node_metadata = self.node_metadata(node_id)?; + let network_metadata = node_metadata + .persistent_metadata + .network_metadata + .as_ref() + .ok_or(NetworkError::NestedMetadataNotFound { node_id: *node_id })?; + Ok(network_metadata.persistent_metadata.reference.clone().map(DefinitionIdentifier::Network)) + } + DocumentNodeImplementation::ProtoNode(protonode_id) => Ok(Some(DefinitionIdentifier::ProtoNode(protonode_id.clone()))), + _ => Ok(None), + } + } + + pub fn is_layer(&self, node_id: &NodeId) -> Result { + Ok(self.node_metadata(node_id)?.persistent_metadata.is_layer()) + } + + /// Whether the node is an Artboard node by identity, regardless of whether it currently participates in the scene. + pub fn is_artboard(&self, node_id: &NodeId) -> bool { + self.reference(node_id) + .ok() + .flatten() + .is_some_and(|reference| reference == DefinitionIdentifier::Network("Artboard".into())) + } + + /// Whether the node is a Merge node by identity, regardless of whether it currently participates in the scene. + pub fn is_merge(&self, node_id: &NodeId) -> bool { + self.reference(node_id) + .ok() + .flatten() + .is_some_and(|reference| reference == DefinitionIdentifier::Network("Merge".into())) + } + + /// The uneditable name in the Properties panel which represents the function name of the node implementation. + pub fn implementation_name(&self, node_id: &NodeId) -> String { + self.reference(node_id) + .ok() + .flatten() + .map(|identifier| identifier.implementation_name_from_identifier()) + .unwrap_or("Custom Node".to_string()) + } + + /// The display name of the node, falling back to "Untitled Layer" or the implementation name when unnamed. + pub fn display_name(&self, node_id: &NodeId) -> String { + let display_name = self.node_metadata(node_id).map(|metadata| metadata.persistent_metadata.display_name.clone()).unwrap_or_default(); + + if display_name.is_empty() { + if self.is_layer(node_id).unwrap_or_default() { + "Untitled Layer".to_string() + } else { + // TODO: Have this displayed in italics in the UI + self.implementation_name(node_id) + } + } else { + display_name + } + } + + /// The current selection of this network, filtered to nodes that still exist. + pub fn selected_nodes(&self) -> SelectedNodes { + self.metadata + .persistent_metadata + .selection_undo_history + .back() + .cloned() + .unwrap_or_default() + .filtered_selected_nodes(|node_id| self.metadata.persistent_metadata.node_metadata.contains_key(node_id)) + } + + pub fn primary_input_connected_to_layer(&self, node_id: &NodeId) -> bool { + self.input(&InputConnector::primary_input(*node_id)) + .ok() + .and_then(|input| input.as_node()) + .is_some_and(|upstream_id| self.is_layer(&upstream_id).unwrap_or_default()) + } + + /// Whether the node's signature fits the layer form: one output, at most two exposed leading inputs, and no exposed parameters. + pub fn is_eligible_to_be_layer(&self, node_id: &NodeId) -> Result { + let node = self.node(node_id)?; + let input_count = node.inputs.iter().take(2).filter(|input| input.is_exposed()).count(); + let parameters_hidden = node.inputs.iter().skip(2).all(|input| !input.is_exposed()); + let output_count = self.number_of_outputs(node_id)?; + + Ok(!self.hidden_primary_output(node_id)? && output_count == 1 && (input_count <= 2) && parameters_hidden) + } + + pub fn is_locked(&self, node_id: &NodeId) -> Result { + Ok(self.node_metadata(node_id)?.persistent_metadata.locked) + } + + pub fn is_pinned(&self, node_id: &NodeId) -> Result { + Ok(self.node_metadata(node_id)?.persistent_metadata.pinned) + } + + pub fn is_visible(&self, node_id: &NodeId) -> Result { + Ok(self.node(node_id)?.visible) + } + + pub fn is_absolute(&self, node_id: &NodeId) -> Result { + Ok(match &self.node_metadata(node_id)?.persistent_metadata.node_type_metadata { + NodeTypePersistentMetadata::Layer(layer_metadata) => matches!(layer_metadata.position, LayerPosition::Absolute(_)), + NodeTypePersistentMetadata::Node(node_metadata) => matches!(node_metadata.position, NodePosition::Absolute(_)), + }) + } + + pub fn is_chain(&self, node_id: &NodeId) -> Result { + Ok(match &self.node_metadata(node_id)?.persistent_metadata.node_type_metadata { + NodeTypePersistentMetadata::Node(node_metadata) => matches!(node_metadata.position, NodePosition::Chain), + _ => false, + }) + } + + pub fn is_stack(&self, node_id: &NodeId) -> Result { + Ok(match &self.node_metadata(node_id)?.persistent_metadata.node_type_metadata { + NodeTypePersistentMetadata::Layer(layer_metadata) => matches!(layer_metadata.position, LayerPosition::Stack(_)), + _ => false, + }) + } + + pub fn number_of_inputs(&self, node_id: &NodeId) -> Result { + Ok(self.node(node_id)?.inputs.len()) + } + + pub fn number_of_displayed_inputs(&self, node_id: &NodeId) -> Result { + Ok(self.node(node_id)?.inputs.iter().filter(|input| input.is_exposed()).count()) + } + + pub fn number_of_outputs(&self, node_id: &NodeId) -> Result { + Ok(match self.implementation(node_id)? { + DocumentNodeImplementation::Network(nested_network) => nested_network.exports.len(), + _ => 1, + }) + } + + /// The number of imports as defined by the encapsulating node's input count, or zero for the document network. + pub fn number_of_imports(&self) -> usize { + self.encapsulating_node().map_or(0, |node| node.inputs.len()) + } + + pub fn number_of_exports(&self) -> usize { + self.network.exports.len() + } + + pub fn has_primary_input(&self, node_id: &NodeId) -> Result { + Ok(self.input(&InputConnector::primary_input(*node_id)).is_ok_and(|input| input.is_exposed())) + } + + pub fn hidden_primary_output(&self, node_id: &NodeId) -> Result { + Ok(match self.implementation(node_id)? { + DocumentNodeImplementation::Network(network) => network.exports.first().is_none_or(|input| !input.is_exposed()), + _ => false, + }) + } + + pub fn hidden_primary_export(&self) -> bool { + let Some((node_id, _)) = self.path.split_last() else { return false }; + self.encapsulating().and_then(|parent| parent.hidden_primary_output(node_id)).unwrap_or(false) + } + + pub fn hidden_primary_import(&self) -> bool { + self.encapsulating_node().is_ok_and(|node| node.inputs.first().is_some_and(|input| !input.is_exposed())) + } + + pub fn previewing(&self) -> Previewing { + self.metadata.persistent_metadata.previewing + } + + /// The root node (the node that the solid line is connected to), or None if no nodes are connected to the output. + pub fn root_node(&self) -> Option { + match &self.metadata.persistent_metadata.previewing { + Previewing::Yes { root_node_to_restore } => *root_node_to_restore, + Previewing::No => self.network.exports.first().and_then(|export| { + if let NodeInput::Node { node_id, output_index, .. } = export { + Some(RootNode { + node_id: *node_id, + output_index: *output_index, + }) + } else { + None + } + }), + } + } + + pub fn input_data(&self, node_id: &NodeId, index: usize, key: &str) -> Result, NetworkError> { + Ok(self.persistent_input_metadata(node_id, index)?.input_data.get(key)) + } + + pub fn persistent_input_metadata(&self, node_id: &NodeId, index: usize) -> Result<&'a InputPersistentMetadata, NetworkError> { + let metadata = self.node_metadata(node_id)?; + let input_metadata = metadata.persistent_metadata.input_metadata.get(index).ok_or(NetworkError::InputNotFound { + connector: InputConnector::node_at_index(*node_id, index), + })?; + Ok(&input_metadata.persistent_metadata) + } + + pub fn upstream_output_connector(&self, input_connector: &InputConnector) -> Result, NetworkError> { + Ok(OutputConnector::from_input(self.input(input_connector)?)) + } + + /// Whether the node reaches the exports by following wires downstream. + // O(nodes + wires) reachability walk + pub fn connected_to_output(&self, target_node_id: &NodeId) -> bool { + if self + .network + .exports + .iter() + .any(|export| if let NodeInput::Node { node_id, .. } = export { node_id == target_node_id } else { false }) + { + return true; + } + + let mut stack = self + .network + .exports + .iter() + .filter_map(|output| if let NodeInput::Node { node_id, .. } = output { self.network.nodes.get(node_id) } else { None }) + .collect::>(); + let mut already_visited = HashSet::new(); + already_visited.extend( + self.network + .exports + .iter() + .filter_map(|output| if let NodeInput::Node { node_id, .. } = output { Some(node_id) } else { None }), + ); + + while let Some(node) = stack.pop() { + for input in &node.inputs { + if let &NodeInput::Node { node_id: upstream_id, .. } = input { + if already_visited.contains(&upstream_id) { + continue; + } + if upstream_id == *target_node_id { + return true; + } + let Some(upstream_node) = self.network.nodes.get(&upstream_id) else { continue }; + already_visited.insert(upstream_id); + stack.push(upstream_node); + } + } + } + + false + } + + /// An iterator of all nodes connected to the given nodes by the flow type, traversing backwards upstream from the given nodes' inputs. + pub(crate) fn upstream_flow(&self, mut node_ids: Vec, mut flow_type: FlowType) -> FlowIter<'a> { + if matches!(flow_type, FlowType::LayerChildrenUpstreamFlow) { + node_ids = node_ids + .iter() + .filter_map(|node_id| { + if self.is_layer(node_id).unwrap_or_default() { + self.network.nodes.get(node_id).and_then(|node| node.inputs.get(1)).and_then(|input| input.as_node()) + } else { + Some(*node_id) + } + }) + .collect::>(); + flow_type = FlowType::UpstreamFlow; + }; + FlowIter { + stack: node_ids, + network: self.network, + network_metadata: self.metadata, + flow_type, + } + } + + /// The distance in grid cells from the layer to the end of its chain, or zero for a layer with no chain. + pub fn chain_width(&self, node_id: &NodeId) -> u32 { + if self.number_of_displayed_inputs(node_id).unwrap_or_default() > 1 { + let mut last_chain_node_distance = 0_u32; + for (index, node_id) in self.upstream_flow(vec![*node_id], FlowType::HorizontalPrimaryOutputFlow).skip(1).enumerate() { + if self.is_chain(&node_id).unwrap_or_default() { + last_chain_node_distance = (index as u32) + 1; + } else { + return last_chain_node_distance * NODE_CHAIN_WIDTH as u32 + 1; + } + } + + last_chain_node_distance * NODE_CHAIN_WIDTH as u32 + 1 + } else { + // A layer with no secondary input has no chain + 0 + } + } + + /// The given network's pinned nodes in display order: pinning appends, dragging rearranges, and any not yet recorded go last. + pub fn ordered_pinned_nodes(&self) -> Vec { + let order = &self.metadata.persistent_metadata.pinned_node_order; + let is_pinned = |node_id: &NodeId| self.is_pinned(node_id).unwrap_or_default(); + + // Follow the saved order, keeping only nodes that still exist and are still pinned + let mut pinned_nodes = order + .iter() + .copied() + .filter(|node_id| self.network.nodes.contains_key(node_id) && is_pinned(node_id)) + .collect::>(); + + // Append any pinned nodes missing from the saved order at the end + let mut unordered = self.network.nodes.keys().copied().filter(|node_id| is_pinned(node_id) && !order.contains(node_id)).collect::>(); + unordered.sort(); + pinned_nodes.extend(unordered); + + pinned_nodes + } + + /// Create a node template from an existing node. + pub fn create_node_template(&self, node_id: &NodeId) -> Result { + let node = self.node(node_id)?; + let node_metadata = self.node_metadata(node_id)?; + + Ok(NodeTemplate::from_parts(node.clone(), node_metadata.persistent_metadata.clone())) + } +} diff --git a/editor/src/messages/portfolio/document/utility_types/nodes.rs b/editor/src/messages/portfolio/document/utility_types/nodes.rs index e24a86ae0e..5f0b8057cf 100644 --- a/editor/src/messages/portfolio/document/utility_types/nodes.rs +++ b/editor/src/messages/portfolio/document/utility_types/nodes.rs @@ -52,13 +52,7 @@ pub struct SelectedNodes(pub Vec); impl SelectedNodes { pub fn layer_visible(&self, layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> bool { - layer.ancestors(network_interface.document_metadata()).all(|layer| { - if layer != LayerNodeIdentifier::ROOT_PARENT { - network_interface.is_visible(&layer.to_node(), &[]) - } else { - true - } - }) + network_interface.is_layer_visible(layer) } pub fn selected_visible_layers<'a>(&'a self, network_interface: &'a NodeNetworkInterface) -> impl Iterator + 'a { diff --git a/editor/src/messages/portfolio/document/utility_types/text_metrics.rs b/editor/src/messages/portfolio/document/utility_types/text_metrics.rs new file mode 100644 index 0000000000..8449988edb --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/text_metrics.rs @@ -0,0 +1,16 @@ +use crate::messages::portfolio::fonts::FALLBACK_FONT_RESOURCE; +use graphene_std::text::{TextAlign, TextContext, TypesettingConfig}; + +pub fn text_width(text: &str, font_size: f64) -> f64 { + let typesetting = TypesettingConfig { + font_size, + line_height_ratio: 1.2, + letter_spacing: 0., + letter_tilt: 0., + max_width: None, + max_height: None, + align: TextAlign::AlignLeft, + }; + + TextContext::with_thread_local(|text_context| text_context.bounding_box(text, &FALLBACK_FONT_RESOURCE, typesetting, false).x) +} diff --git a/editor/src/messages/portfolio/document/utility_types/transformation.rs b/editor/src/messages/portfolio/document/utility_types/transformation.rs index bf6068afce..a8b5f42ddc 100644 --- a/editor/src/messages/portfolio/document/utility_types/transformation.rs +++ b/editor/src/messages/portfolio/document/utility_types/transformation.rs @@ -93,7 +93,7 @@ impl OriginalTransforms { let mut selected_points = selected_points.clone(); - for (segment_id, _, start, end) in vector.segment_bezier_iter() { + for (segment_id, _, start, end) in vector.segment_iter() { if selected_segments.contains(&segment_id) { selected_points.insert(ManipulatorPointId::Anchor(start)); selected_points.insert(ManipulatorPointId::Anchor(end)); @@ -392,7 +392,7 @@ impl TransformOperation { } pub fn hints(&self, responses: &mut VecDeque, local: bool) { - use crate::messages::input_mapper::utility_types::input_keyboard::{Key, MouseMotion}; + use crate::messages::input_mapper::utility_types::keyboard::{Key, MouseMotion}; use crate::messages::tool::utility_types::{HintData, HintGroup, HintInfo}; let mut input_hints = Vec::new(); diff --git a/editor/src/messages/portfolio/document/utility_types/wires.rs b/editor/src/messages/portfolio/document/utility_types/wires.rs index 439962ad98..db3978c546 100644 --- a/editor/src/messages/portfolio/document/utility_types/wires.rs +++ b/editor/src/messages/portfolio/document/utility_types/wires.rs @@ -12,6 +12,12 @@ pub struct WirePath { pub data_type: FrontendGraphDataType, pub thick: bool, pub dashed: bool, + // A rank-1 `List` wire renders as a doubled-up pair of parallel lines to distinguish it from a rank-0 `Item` wire + #[serde(rename = "isList")] + pub is_list: bool, + // A thick wire's center line reaches past the wire into the cleaved connector slots, so it needs its own longer path; empty otherwise + #[serde(rename = "centerPathString")] + pub center_path_string: String, } #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] @@ -57,6 +63,19 @@ impl GraphWireStyle { pub fn build_vector_wire(output_position: DVec2, input_position: DVec2, vertical_out: bool, vertical_in: bool, graph_wire_style: GraphWireStyle) -> BezPath { let grid_spacing = 24.; + + // A thick layer-stack wire (vertical at both ends) is skipped across a single straight grid cell where its connectors + // already meet, and otherwise trimmed 3px inward at each end since it overshoots the connectors. + let (output_position, input_position) = if vertical_out && vertical_in { + if thick_wire_spans_single_cell(output_position, input_position) { + return BezPath::new(); + } + let trim = 3. * (input_position.y - output_position.y).signum(); + (output_position + DVec2::new(0., trim), input_position - DVec2::new(0., trim)) + } else { + (output_position, input_position) + }; + match graph_wire_style { GraphWireStyle::Direct => { let horizontal_gap = (output_position.x - input_position.x).abs(); @@ -101,6 +120,31 @@ pub fn build_vector_wire(output_position: DVec2, input_position: DVec2, vertical } } +fn thick_wire_spans_single_cell(output_position: DVec2, input_position: DVec2) -> bool { + let grid_spacing = 24.; + (output_position.x - input_position.x).abs() < 1. && (output_position.y - input_position.y).abs() <= grid_spacing +} + +/// The center line that cleaves a thick layer-stack wire. Its ends reach past the wire (1.5px toward the output +/// connector and 2px toward the input) so the color runs through the full cleaved connector slots. Empty for other wires. +pub fn build_thick_wire_center_line(output_position: DVec2, input_position: DVec2, vertical_out: bool, vertical_in: bool) -> BezPath { + if !(vertical_out && vertical_in) || thick_wire_spans_single_cell(output_position, input_position) { + return BezPath::new(); + } + + // The 8px wire trims 3px at each end; the center line trims less so it reaches further into the cleaved slots + let sign = (input_position.y - output_position.y).signum(); + let output_trim = 1.5; + let input_trim = 1.; + let start = output_position + DVec2::new(0., output_trim * sign); + let end = input_position - DVec2::new(0., input_trim * sign); + + let mut center_line = BezPath::new(); + center_line.move_to(dvec2_to_point(start)); + center_line.line_to(dvec2_to_point(end)); + center_line +} + fn straight_wire_path(output_position: DVec2, input_position: DVec2, vertical_out: bool, vertical_in: bool) -> Vec { let grid_spacing = 24; let line_width = 2; @@ -435,7 +479,7 @@ fn straight_wire_to_bezpath(locations: Vec) -> BezPath { if locations.len() == 2 { let p1 = to_point(locations[0]); let p2 = to_point(locations[1]); - Line::new(p1, p2).to_path(DEFAULT_ACCURACY); + return Line::new(p1, p2).to_path(DEFAULT_ACCURACY); } let corner_radius = 10; diff --git a/editor/src/messages/portfolio/document_migration.rs b/editor/src/messages/portfolio/document_migration.rs index 44c418b479..e887c063cb 100644 --- a/editor/src/messages/portfolio/document_migration.rs +++ b/editor/src/messages/portfolio/document_migration.rs @@ -3,19 +3,22 @@ use crate::messages::portfolio::document::node_graph::document_node_definitions::{DefinitionIdentifier, resolve_document_node_type, resolve_network_node_type, resolve_proto_node_type}; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; -use crate::messages::portfolio::document::utility_types::network_interface::{InputConnector, NodeTemplate, OutputConnector}; +use crate::messages::portfolio::document::utility_types::network_interface::{InputConnector, NodeTemplate, NodeTemplateImplementation, OutputConnector}; use crate::messages::prelude::DocumentMessageHandler; use glam::{DVec2, IVec2}; use graph_craft::application_io::resource::{DataSource, Resource, ResourceHash, ResourceId}; -use graph_craft::descriptor; use graph_craft::document::DocumentNode; use graph_craft::document::{DocumentNodeImplementation, NodeInput, value::TaggedValue}; +use graph_craft::{Type, concrete}; +use graphene_std::Color; +use graphene_std::ParameterRef; use graphene_std::ProtoNodeIdentifier; +use graphene_std::list::List; use graphene_std::text::{TextAlign, TypesettingConfig}; use graphene_std::transform::ScaleType; use graphene_std::uuid::NodeId; use graphene_std::vector::graphic_types; -use graphene_std::vector::style::{PaintOrder, StrokeAlign}; +use graphene_std::vector::style::{GradientRamp, GradientSpread, PaintOrder, StrokeAlign}; use std::collections::HashMap; use std::f64::consts::PI; use std::ops::Range; @@ -32,6 +35,9 @@ const TEXT_REPLACEMENTS: &[(&str, &str)] = &[ ("\"OptionalF64\":", "\"F64\":"), ("\"path_bool_nodes::BooleanOperation\"", "\"vector_types::vector::misc::BooleanOperation\""), ("\"core_types::table::Table<", "\"core_types::list::List<"), + // The `GradientStops` type was renamed to `Gradient`; stale stored output names are cleared so the display falls back to the live type name + ("\"output_names\":[\"GradientStops\"]", "\"output_names\":[\"\"]"), + ("vector_types::gradient::GradientStops", "vector_types::gradient::Gradient"), ]; pub struct NodeReplacement<'a> { @@ -39,6 +45,14 @@ pub struct NodeReplacement<'a> { aliases: &'a [&'a str], } +/// Every name the Merge layer network's two type-coercion nodes have gone by, which is every alias of the node they both converged on. +fn into_group_aliases() -> impl Iterator { + NODE_REPLACEMENTS + .iter() + .filter(|replacement| replacement.node == graphene_std::graphic::into_group::IDENTIFIER) + .flat_map(|replacement| replacement.aliases) +} + const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ // ================================ // blending @@ -62,35 +76,12 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ aliases: &["graphene_core::raster::OpacityNode", "graphene_core::blending_nodes::OpacityNode"], }, // ================================ - // brush - // ================================ - NodeReplacement { - node: graphene_std::brush::brush::blit::IDENTIFIER, - aliases: &["graphene_brush::BlitNode", "graphene_std::brush::BlitNode", "graphene_brush::brush::BlitNode"], - }, - NodeReplacement { - node: graphene_std::brush::brush::brush::IDENTIFIER, - aliases: &["graphene_brush::BrushNode", "graphene_std::brush::BrushNode", "graphene_brush::brush::BrushNode"], - }, - NodeReplacement { - node: graphene_std::brush::brush::brush_stamp_generator::IDENTIFIER, - aliases: &[ - "graphene_brush::BrushStampGeneratorNode", - "graphene_std::brush::BrushStampGeneratorNode", - "graphene_brush::brush::BrushStampGeneratorNode", - ], - }, - // ================================ // gcore // ================================ NodeReplacement { node: graphene_std::animation::animation_time::IDENTIFIER, aliases: &["graphene_core::animation::AnimationTimeNode"], }, - NodeReplacement { - node: graphene_std::debug::clone::IDENTIFIER, - aliases: &["graphene_core::ops::CloneNode"], - }, NodeReplacement { node: graphene_std::extract_xy::extract_xy::IDENTIFIER, aliases: &["graphene_core::ops::ExtractXyNode"], @@ -106,6 +97,14 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ "graphene_core::transform_nodes::FreezeRealTimeNode", "graphene_core::vector::SubpathSegmentLengthsNode", "core_types::vector::SubpathSegmentLengthsNode", + // The deleted debug Option trio degrades to a passthrough of its single input + "graphene_core::ops::SizeOfNode", + "graphene_core::debug::SizeOfNode", + "graphene_core::ops::SomeNode", + "graphene_core::debug::SomeNode", + "graphene_core::ops::UnwrapNode", + "graphene_core::debug::UnwrapNode", + "graphene_core::debug::UnwrapOptionNode", ], }, NodeReplacement { @@ -120,18 +119,6 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ node: graphene_std::animation::real_time::IDENTIFIER, aliases: &["graphene_core::animation::RealTimeNode"], }, - NodeReplacement { - node: graphene_std::debug::size_of::IDENTIFIER, - aliases: &["graphene_core::ops::SizeOfNode"], - }, - NodeReplacement { - node: graphene_std::debug::some::IDENTIFIER, - aliases: &["graphene_core::ops::SomeNode"], - }, - NodeReplacement { - node: graphene_std::debug::unwrap_option::IDENTIFIER, - aliases: &["graphene_core::ops::UnwrapNode", "graphene_core::debug::UnwrapNode"], - }, // ================================ // graphic // ================================ @@ -161,13 +148,27 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ aliases: &["graphene_core::graphic::FlattenVectorNode", "graphene_core::graphic_element::FlattenVectorNode"], }, NodeReplacement { - node: graphene_std::graphic::index_elements::IDENTIFIER, + node: graphene_std::graphic::item_at_index::IDENTIFIER, aliases: &[ "graphene_core::graphic_element::IndexNode", "graphene_core::graphic::IndexNode", "graphene_core::graphic::IndexElementsNode", + "graphic_nodes::graphic::IndexElementsNode", + "graphic_nodes::graphic::ExtractElementNode", ], }, + NodeReplacement { + node: graphene_std::graphic::read_attribute_gradient_form::IDENTIFIER, + aliases: &["graphic_nodes::graphic::ReadAttributeGradientTypeNode"], + }, + NodeReplacement { + node: graphene_std::graphic::read_attribute_gradient_spread::IDENTIFIER, + aliases: &["graphic_nodes::graphic::ReadAttributeSpreadMethodNode"], + }, + NodeReplacement { + node: graphene_std::graphic::remove_at_index::IDENTIFIER, + aliases: &["graphic_nodes::graphic::OmitElementNode"], + }, NodeReplacement { node: graphene_std::graphic::legacy_layer_extend::IDENTIFIER, aliases: &[ @@ -182,22 +183,20 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ ], }, NodeReplacement { - node: graphene_std::graphic::to_graphic::IDENTIFIER, + node: graphene_std::graphic::into_group::IDENTIFIER, aliases: &[ - "graphene_core::ToGraphicGroupNode", - "graphene_core::graphic_element::ToGroupNode", - "graphene_core::graphic_types::ToGroupNode", - "graphene_core::graphic::ToGraphicNode", - ], - }, - NodeReplacement { - node: graphene_std::graphic::wrap_graphic::IDENTIFIER, - aliases: &[ - // Converted from "To Element" + // Converted from "To Element", then "Wrap Graphic" "graphene_core::ToGraphicElementNode", "graphene_core::graphic_element::ToElementNode", "graphene_core::graphic_types::ToElementNode", "graphene_core::graphic::WrapGraphicNode", + "graphic_nodes::graphic::WrapGraphicNode", + // Converted from "To Graphic", whose grouping of non-graphical content this node now carries alone + "graphene_core::ToGraphicGroupNode", + "graphene_core::graphic_element::ToGroupNode", + "graphene_core::graphic_types::ToGroupNode", + "graphene_core::graphic::ToGraphicNode", + "graphic_nodes::graphic::ToGraphicNode", ], }, // ================================ @@ -247,6 +246,10 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ node: graphene_std::math_nodes::equals::IDENTIFIER, aliases: &["graphene_math_nodes::EqualsNode", "graphene_core::ops::EqualsNode"], }, + NodeReplacement { + node: graphene_std::math_nodes::evaluate_gradient::IDENTIFIER, + aliases: &["math_nodes::SampleGradientNode", "graphene_math_nodes::SampleGradientNode", "graphene_core::ops::SampleGradientNode"], + }, NodeReplacement { node: graphene_std::math_nodes::exponent::IDENTIFIER, aliases: &["graphene_math_nodes::ExponentNode", "graphene_core::ops::ExponentNode"], @@ -259,6 +262,14 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ node: graphene_std::math_nodes::footprint_value::IDENTIFIER, aliases: &["graphene_math_nodes::FootprintValueNode", "graphene_core::ops::FootprintValueNode"], }, + NodeReplacement { + node: graphene_std::math_nodes::gradient_form::IDENTIFIER, + aliases: &["math_nodes::GradientTypeNode"], + }, + NodeReplacement { + node: graphene_std::math_nodes::gradient_spread::IDENTIFIER, + aliases: &["math_nodes::SpreadMethodNode"], + }, NodeReplacement { node: graphene_std::math_nodes::gradient_value::IDENTIFIER, aliases: &[ @@ -290,8 +301,8 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ ], }, NodeReplacement { - node: graphene_std::math_nodes::length::IDENTIFIER, - aliases: &["graphene_math_nodes::LengthNode", "graphene_core::ops::LenghtNode"], + node: graphene_std::math_nodes::magnitude::IDENTIFIER, + aliases: &["math_nodes::LengthNode", "graphene_math_nodes::LengthNode", "graphene_core::ops::LenghtNode"], }, NodeReplacement { node: graphene_std::math_nodes::less_than::IDENTIFIER, @@ -380,10 +391,6 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ node: graphene_std::math_nodes::round::IDENTIFIER, aliases: &["graphene_math_nodes::RoundNode", "graphene_core::ops::RoundNode"], }, - NodeReplacement { - node: graphene_std::math_nodes::sample_gradient::IDENTIFIER, - aliases: &["graphene_math_nodes::SampleGradientNode", "graphene_core::ops::SampleGradientNode"], - }, NodeReplacement { node: graphene_std::math_nodes::sine::IDENTIFIER, aliases: &["graphene_math_nodes::SineNode", "graphene_core::ops::SineNode"], @@ -416,6 +423,8 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ node: graphene_std::math_nodes::as_u_64::IDENTIFIER, aliases: &["graphene_math_nodes::ToU64Node", "graphene_core::ops::ToU64Node", "math_nodes::ToU64Node"], }, + // The old 'Vec2 Value' node took separate X and Y inputs, a role now filled by 'Combine Vec2', while the new 'Vec2 Value' node takes a single vec2 input. + // Old references (including these older aliases) are remapped here to `vec_2_value::IDENTIFIER` so the per-node migration in `migrate_node` can detect the leftover 3-input shape and convert it into a 'Combine Vec2' node. NodeReplacement { node: graphene_std::math_nodes::vec_2_value::IDENTIFIER, aliases: &[ @@ -735,8 +744,12 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ // vector // ================================ NodeReplacement { - node: graphene_std::vector::apply_transform::IDENTIFIER, - aliases: &["graphene_core::vector::ApplyTransformNode", "graphene_core::vector::vector_modification::ApplyTransformNode"], + node: graphene_std::vector::bake_transform::IDENTIFIER, + aliases: &[ + "graphene_core::vector::ApplyTransformNode", + "graphene_core::vector::vector_modification::ApplyTransformNode", + "vector_nodes::vector_modification_nodes::ApplyTransformNode", + ], }, NodeReplacement { node: graphene_std::vector::area::IDENTIFIER, @@ -771,7 +784,7 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ aliases: &["graphene_core::vector::ClosePathNode"], }, NodeReplacement { - node: graphene_std::vector::count_elements::IDENTIFIER, + node: graphene_std::vector::list_length::IDENTIFIER, aliases: &["graphene_core::vector::CountElementsNode"], }, NodeReplacement { @@ -795,7 +808,7 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ aliases: &["graphene_core::vector::vector_nodes::FillNode", "graphene_core::vector::FillNode"], }, NodeReplacement { - node: graphene_std::vector::flatten_path::IDENTIFIER, + node: graphene_std::vector::combine_paths::IDENTIFIER, aliases: &[ "graphene_core::vector::vector_nodes::FlattenPathNode", "graphene_core::vector::FlattenVectorElementsNode", @@ -983,9 +996,9 @@ pub fn document_migration_string_preprocessing(document_serialized_content: Stri /// so the staged input-count migrations can still upgrade old text nodes before the split. fn legacy_text_node_template() -> Option { let mut template = resolve_document_node_type(&DefinitionIdentifier::ProtoNode(graphene_std::text::text::IDENTIFIER))?.default_node_template(); - template.document_node.implementation = DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_std::text::TextNode")); - template.document_node.inputs.push(NodeInput::value(TaggedValue::Bool(false), false)); - template.persistent_node_metadata.input_metadata.push(Default::default()); + template.implementation = NodeTemplateImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_std::text::TextNode")); + template.inputs.push(NodeInput::value(TaggedValue::Bool(false), false)); + template.input_metadata.push(Default::default()); Some(template) } @@ -1057,6 +1070,12 @@ pub fn document_migration_reset_node_definition(document_serialized_content: &st return true; } + // Every Merge layer network is built from the two nodes that became "As Graphic" and "Into Group", so their definitions + // are reset to pick up the current plumbing instead of the alias migration meant for standalone copies of those nodes. + if into_group_aliases().any(|alias| document_serialized_content.contains(alias)) { + return true; + } + false } @@ -1133,6 +1152,7 @@ pub fn document_migration_replace_resources_referenced_by_hash(document_serializ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_node_definitions_on_open: bool) { document.network_interface.migrate_path_modify_node(); + document.network_interface.document_network_mut().normalize_stored_types(); let network = document.network_interface.document_network().clone(); @@ -1152,38 +1172,16 @@ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_ if let DocumentNodeImplementation::ProtoNode(protonode_id) = &node.implementation { let node_path_without_type_args = protonode_id.as_str().split('<').next(); if let Some(new) = node_path_without_type_args.and_then(|node_path| replacements.get(node_path)) { - let mut default_template = NodeTemplate::default(); - default_template.document_node.implementation = DocumentNodeImplementation::ProtoNode(new.clone()); + let mut default_template = NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(new.clone()), + ..Default::default() + }; document.network_interface.replace_implementation(node_id, &network_path, &mut default_template); - document.network_interface.set_call_argument(node_id, &network_path, default_template.document_node.call_argument); + document.network_interface.set_call_argument(node_id, &network_path, default_template.call_argument); } } } - // The "Brush" wrapper network was replaced with the `brush` proto node directly. Convert old `Network("Brush")` instances to the proto node, forwarding all 3 inputs (Background, Trace, Cache) one-to-one. - // This must run as a pre-pass before the recursive iteration below: replacing the outer Brush's network impl orphans its child paths, and the recursive iteration would log errors for those stale paths. - let brush_layers: Vec<(NodeId, Vec)> = document - .network_interface - .document_network() - .recursive_nodes() - .filter_map(|(node_id, _, path)| (document.network_interface.reference(node_id, &path) == Some(DefinitionIdentifier::Network("Brush".into()))).then_some((*node_id, path))) - .collect(); - for (node_id, network_path) in &brush_layers { - // Pre-load `outward_wires` so the chain-break check inside `set_input` resolves the original upstreamβ†’node wire from cache - // rather than triggering a fresh rebuild from the (already-mutated) post-`replace_inputs` state, which would orphan wires. - let _ = document.network_interface.outward_wires(network_path); - let new_reference = DefinitionIdentifier::ProtoNode(graphene_std::brush::brush::brush::IDENTIFIER); - let Some(definition) = resolve_document_node_type(&new_reference) else { continue }; - let mut node_template = definition.default_node_template(); - document.network_interface.replace_implementation(node_id, network_path, &mut node_template); - let Some(old_inputs) = document.network_interface.replace_inputs(node_id, network_path, &mut node_template) else { - continue; - }; - for (index, input) in old_inputs.iter().take(3).enumerate() { - document.network_interface.set_input(&InputConnector::node(*node_id, index), input.clone(), network_path); - } - } - // The "Transform" wrapper network was replaced with the `transform` proto node directly. Convert old `Network("Transform")` instances to the proto node, forwarding the 5 user-facing inputs (Value, Translation, Rotation, Scale, Skew) and dropping the legacy migration sentinels (Origin Offset, Scale Appearance) at indices 5 and 6 if present. // Pre-pass for the same reason as the Brush migration above: replacing the outer Transform's network impl orphans its child paths. let transform_layers: Vec<(NodeId, Vec, usize)> = document @@ -1207,7 +1205,7 @@ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_ }; // Forward the first 5 inputs (Value, Translation, Rotation, Scale, Skew); drop indices 5 and 6 if present. for (index, input) in old_inputs.iter().take(5).enumerate() { - document.network_interface.set_input(&InputConnector::node(*node_id, index), input.clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, index), input.clone(), network_path); } // Pre-2024 documents stored Transform with 6 inputs and used radians for Rotation and `tan(radians)` for Skew. Detect that legacy @@ -1217,7 +1215,7 @@ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_ Some(NodeInput::Value { tagged_value, exposed }) => { if let TaggedValue::F64(radians) = *tagged_value.clone().into_inner() { let degrees = NodeInput::value(TaggedValue::F64(radians.to_degrees()), *exposed); - document.network_interface.set_input(&InputConnector::node(*node_id, 2), degrees, network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), degrees, network_path); } } Some(NodeInput::Node { .. }) => { @@ -1225,13 +1223,15 @@ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_ // (which represented radians in the legacy format) reaches the now-degrees Rotation input correctly. if let Some(multiply_node) = resolve_document_node_type(&DefinitionIdentifier::ProtoNode(graphene_std::math_nodes::multiply::IDENTIFIER)) { let mut multiply_template = multiply_node.default_node_template(); - multiply_template.document_node.inputs[1] = NodeInput::value(TaggedValue::F64(180. / PI), false); + multiply_template.inputs[1] = NodeInput::value(TaggedValue::F64(180. / PI), false); let multiply_node_id = NodeId::new(); if let Some(transform_position) = document.network_interface.position_from_downstream_node(node_id, network_path) { let multiply_position = transform_position + IVec2::new(-7, 1); document.network_interface.insert_node(multiply_node_id, multiply_template, network_path); document.network_interface.shift_absolute_node_position(&multiply_node_id, multiply_position, network_path); - document.network_interface.insert_node_between(&multiply_node_id, &InputConnector::node(*node_id, 2), 0, network_path); + document + .network_interface + .insert_node_between(&multiply_node_id, &InputConnector::node_at_index(*node_id, 2), 0, network_path); } } } @@ -1244,7 +1244,7 @@ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_ // The previous skew value stored `tan(radians)`, now it stores degrees directly. let new_value = DVec2::new(old_value.x.atan().to_degrees(), old_value.y.atan().to_degrees()); let new_input = NodeInput::value(TaggedValue::DVec2(new_value), *exposed); - document.network_interface.set_input(&InputConnector::node(*node_id, 4), new_input, network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 4), new_input, network_path); } } } @@ -1269,7 +1269,7 @@ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_ // Forward the embedded image data into input 0, where the `migrate_node` `image` pass finds it and converts it to a resource. if let Some(image_input) = old_inputs.into_iter().find(|input| matches!(input.as_value(), Some(TaggedValue::ImageData(_)))) { - document.network_interface.set_input(&InputConnector::node(*node_id, 0), image_input, network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), image_input, network_path); } } @@ -1297,9 +1297,9 @@ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_ migrate_node(node_id, node, network_path, document, reset_node_definitions_on_open); } - // The old geometry-producing "Text" node was split into the current "Text" (`String[]`) -> "Text to Vector" pair, which reuses the same - // proto identifier. Runs after `migrate_node` normalizes old text nodes to the legacy 13-input layout, distinguished from the current - // 12-input node by the trailing `separate_glyphs` input (index 12): forward inputs 0..=11 onto the new node and move it onto `text_to_vector`. + // The old geometry-producing "Text" node was split into the current "Text" (`String[]`) -> converter pair, which reuses the same proto + // identifier. Runs after `migrate_node` normalizes old text nodes to the legacy 13-input layout, distinguished from the current 12-input + // node by the trailing `separate_glyphs` input (index 12): forward inputs 0..=11 onto the new node and splice the matching converter after it. let old_text_nodes: Vec<(NodeId, Vec)> = document .network_interface .document_network() @@ -1330,10 +1330,11 @@ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_ const LEGACY_INPUT_FOR_NEW: [usize; 12] = [0, 1, 2, 3, 4, 5, 10, 6, 7, 8, 9, 11]; for (new_index, &legacy_index) in LEGACY_INPUT_FOR_NEW.iter().enumerate() { if let Some(input) = old_inputs.get(legacy_index) { - document.network_interface.set_input(&InputConnector::node(*node_id, new_index), input.clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, new_index), input.clone(), network_path); } } - let separate_glyphs = old_inputs.get(12).cloned(); + // A `true` toggle at index 12 chose per-glyph geometry, which is now the dedicated "Text to Vector Glyphs" node + let separate_glyphs = matches!(old_inputs.get(12).and_then(|input| input.as_value()), Some(TaggedValue::Bool(true))); // Collect the inputs reading the old text node's output before any rewiring so the new node can be spliced onto those wires. let downstream_consumers: Vec = document @@ -1345,44 +1346,72 @@ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_ let text_was_in_chain = text_nodes_in_chain.contains(node_id); - // Insert the `text_to_vector` node that converts the `text` `String[]` output back into vector geometry. - let Some(text_to_vector_definition) = resolve_document_node_type(&DefinitionIdentifier::ProtoNode(graphene_std::text::text_to_vector::IDENTIFIER)) else { + // Insert the converter that turns the `text` `String[]` output back into vector geometry: "Text to Vector Glyphs" for the per-glyph case, otherwise "Text to Vector". + let converter_identifier = if separate_glyphs { + graphene_std::text::text_to_vector_glyphs::IDENTIFIER + } else { + graphene_std::text::text_to_vector::IDENTIFIER + }; + let Some(converter_definition) = resolve_document_node_type(&DefinitionIdentifier::ProtoNode(converter_identifier)) else { continue; }; - let text_to_vector_id = NodeId::new(); - document - .network_interface - .insert_node(text_to_vector_id, text_to_vector_definition.default_node_template(), network_path); + let converter_id = NodeId::new(); + document.network_interface.insert_node(converter_id, converter_definition.default_node_template(), network_path); - // Splice `text_to_vector` onto the wire(s) leaving `text` (`insert_node_between` is the pure wire-splice the editor uses for - // dropping a node on a wire), then carry the old `separate_glyphs` value onto its second input. + // Splice the converter onto the wire(s) leaving `text` (`insert_node_between` is the pure wire-splice the editor uses for dropping a node on a wire). if let Some((first_consumer, remaining_consumers)) = downstream_consumers.split_first() { - document.network_interface.insert_node_between(&text_to_vector_id, first_consumer, 0, network_path); + document.network_interface.insert_node_between(&converter_id, first_consumer, 0, network_path); for consumer in remaining_consumers { - document.network_interface.set_input(consumer, NodeInput::node(text_to_vector_id, 0), network_path); + document.network_interface.set_input(consumer, NodeInput::node(converter_id, 0), network_path); } } else { document .network_interface - .set_input(&InputConnector::node(text_to_vector_id, 0), NodeInput::node(*node_id, 0), network_path); - } - if let Some(separate_glyphs) = separate_glyphs { - document.network_interface.set_input(&InputConnector::node(text_to_vector_id, 1), separate_glyphs, network_path); + .set_input(&InputConnector::node_at_index(converter_id, 0), NodeInput::node(*node_id, 0), network_path); } - // If `text` was in a layer chain, re-chain `text_to_vector` and its upstream so both lay out by distance from the layer (the splice - // broke the chain, like `move_node_to_chain_start`). Otherwise `text` is absolute, so place `text_to_vector` beside it instead of + // If `text` was in a layer chain, re-chain the converter and its upstream so both lay out by distance from the layer (the splice + // broke the chain, like `move_node_to_chain_start`). Otherwise `text` is absolute, so place the converter beside it instead of // leaving it at the origin. if text_was_in_chain { - document.network_interface.force_set_upstream_to_chain(&text_to_vector_id, network_path); + document.network_interface.force_set_upstream_to_chain(&converter_id, network_path); } else if let Some(text_position) = document.network_interface.position(node_id, network_path) { - document - .network_interface - .shift_absolute_node_position(&text_to_vector_id, text_position + IVec2::new(7, 0), network_path); + document.network_interface.shift_absolute_node_position(&converter_id, text_position + IVec2::new(7, 0), network_path); } } } +/// Converts a legacy stroke dash input (a `List`, single `f64`, or comma/space separated `String`) to the `DashPattern` value type. +fn migrate_dash_input(input: &NodeInput) -> Option { + let NodeInput::Value { tagged_value, exposed } = input else { return None }; + let lengths = match &*tagged_value.clone().into_inner() { + TaggedValue::F64Array(lengths) => lengths.clone(), + TaggedValue::F64(length) => vec![*length], + TaggedValue::String(text) => graphene_std::core_types::misc::parse_f64_list(text), + _ => return None, + }; + Some(NodeInput::value(TaggedValue::DashPattern(lengths), *exposed)) +} + +/// Converts a legacy rectangle corner radius input (a single `f64` or a `List` of up to four values) to the `BoxCorners` value type. +fn migrate_corner_radius_input(input: &NodeInput) -> Option { + let NodeInput::Value { tagged_value, exposed } = input else { return None }; + let values = match &*tagged_value.clone().into_inner() { + TaggedValue::F64Array(values) => values.clone(), + TaggedValue::F64(value) => vec![*value], + _ => return None, + }; + Some(NodeInput::value(TaggedValue::BoxCorners(values), *exposed)) +} + +/// Rewrites a gradient ramp value input to carry the given gradient spread, which used to live in the Fill node's retired `_spread_method` input. +fn fold_gradient_spread_into_ramp_input(input: &NodeInput, gradient_spread: GradientSpread) -> NodeInput { + match input.as_value() { + Some(TaggedValue::GradientRamp(ramp)) => NodeInput::value(TaggedValue::GradientRamp(GradientRamp { gradient_spread, ..ramp.clone() }), input.is_exposed()), + _ => input.clone(), + } +} + fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], document: &mut DocumentMessageHandler, reset_node_definitions_on_open: bool) -> Option<()> { // Must run before the reset block below: a node referencing a removed catalog entry would otherwise abort // `migrate_node` via the `?` on `resolve_document_node_type`, preventing subsequent migration blocks from running. @@ -1519,23 +1548,25 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let _ = document.network_interface.replace_inputs(node_id, network_path, &mut first_template); // Wire the existing node's inputs based on its new role (input 0 is always `content`) - document.network_interface.set_input(&InputConnector::node(*node_id, 0), content_input, network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), content_input, network_path); match first_kind { SubNode::BlendMode => { - document.network_interface.set_input(&InputConnector::node(*node_id, 1), blend_mode_input.clone(), network_path); + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, 1), blend_mode_input.clone(), network_path); } SubNode::Opacity => { document .network_interface - .set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::Bool(keep_opacity), false), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 2), opacity_input.clone(), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 1), NodeInput::value(TaggedValue::Bool(keep_opacity), false), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), opacity_input.clone(), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 3), NodeInput::value(TaggedValue::Bool(keep_fill), false), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 4), fill_input.clone(), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 3), NodeInput::value(TaggedValue::Bool(keep_fill), false), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 4), fill_input.clone(), network_path); } SubNode::Clip => { - document.network_interface.set_input(&InputConnector::node(*node_id, 1), clip_input.clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), clip_input.clone(), network_path); } } @@ -1576,20 +1607,20 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], // Wire the parameter inputs for the inserted node match sub { SubNode::BlendMode => { - document.network_interface.set_input(&InputConnector::node(new_id, 1), blend_mode_input.clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(new_id, 1), blend_mode_input.clone(), network_path); } SubNode::Opacity => { document .network_interface - .set_input(&InputConnector::node(new_id, 1), NodeInput::value(TaggedValue::Bool(keep_opacity), false), network_path); - document.network_interface.set_input(&InputConnector::node(new_id, 2), opacity_input.clone(), network_path); + .set_input(&InputConnector::node_at_index(new_id, 1), NodeInput::value(TaggedValue::Bool(keep_opacity), false), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(new_id, 2), opacity_input.clone(), network_path); document .network_interface - .set_input(&InputConnector::node(new_id, 3), NodeInput::value(TaggedValue::Bool(keep_fill), false), network_path); - document.network_interface.set_input(&InputConnector::node(new_id, 4), fill_input.clone(), network_path); + .set_input(&InputConnector::node_at_index(new_id, 3), NodeInput::value(TaggedValue::Bool(keep_fill), false), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(new_id, 4), fill_input.clone(), network_path); } SubNode::Clip => { - document.network_interface.set_input(&InputConnector::node(new_id, 1), clip_input.clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(new_id, 1), clip_input.clone(), network_path); } } } @@ -1609,116 +1640,195 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], document.network_interface.replace_implementation(node_id, network_path, &mut node_template); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::Bool(true), false), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 2), old_inputs[1].clone(), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 1), NodeInput::value(TaggedValue::Bool(true), false), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), old_inputs[1].clone(), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 3), NodeInput::value(TaggedValue::Bool(false), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 3), NodeInput::value(TaggedValue::Bool(false), false), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 4), NodeInput::value(TaggedValue::F64(100.), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 4), NodeInput::value(TaggedValue::F64(100.), false), network_path); inputs_count = 5; } - // Upgrade the legacy 4-input Fill node (content, fill: Fill, _backup_color, _backup_gradient: Gradient) to the - // value-model 7-input shape (content, fill: generic paint list, _backup_color, _backup_gradient, _gradient_type, _spread_method, _transform). + // Upgrade the legacy 4-input Fill node (content, fill: Fill, _backup_color, _backup_gradient: Gradient) to the value-model + // 7-input shape (content, fill: generic paint list, _backup_color, _backup_gradient, _gradient_form, _has_transform, _transform). if reference == DefinitionIdentifier::ProtoNode(graphene_std::vector_nodes::fill::IDENTIFIER) && inputs_count == 4 { let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); document.network_interface.replace_implementation(node_id, network_path, &mut node_template); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; // Content: no change - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); - // Fill: a literal Fill value is decomposed, and a wired input (`List / List`) is kept as-is + // Fill: a literal Fill value is decomposed, and a wired input (`List / List`) is kept as-is match old_inputs[1].as_value() { Some(TaggedValue::LegacyFill(old_fill)) => { let exposed = old_inputs[1].is_exposed(); let fill_value = match old_fill { - graphic_types::migrations::legacy::Fill::None => TaggedValue::Color(None), - graphic_types::migrations::legacy::Fill::Solid(color) => TaggedValue::Color(Some(*color)), - graphic_types::migrations::legacy::Fill::Gradient(gradient) => TaggedValue::Gradient(gradient.stops.clone()), + graphic_types::migrations::legacy::LegacyFill::None => TaggedValue::no_paint(), + graphic_types::migrations::legacy::LegacyFill::Solid(color) => TaggedValue::Color(*color), + graphic_types::migrations::legacy::LegacyFill::Gradient(gradient) => TaggedValue::GradientRamp(GradientRamp { + gradient_spread: gradient.spread_method, + ..gradient.stops.clone() + }), }; document .network_interface - .set_input(&InputConnector::node(*node_id, 1), NodeInput::value(fill_value, exposed), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 1), NodeInput::value(fill_value, exposed), network_path); // Gradient metadata (4, 5, 6): applies only to a literal gradient, solids/none keep the template defaults - if let graphic_types::migrations::legacy::Fill::Gradient(gradient) = old_fill { + if let graphic_types::migrations::legacy::LegacyFill::Gradient(gradient) = old_fill { document.network_interface.set_input( - &InputConnector::node(*node_id, 4), - NodeInput::value(TaggedValue::GradientType(gradient.gradient_type), false), - network_path, - ); - document.network_interface.set_input( - &InputConnector::node(*node_id, 5), - NodeInput::value(TaggedValue::GradientSpreadMethod(gradient.spread_method), false), + &InputConnector::node_at_index(*node_id, 4), + NodeInput::value(TaggedValue::GradientForm(gradient.gradient_type), false), network_path, ); - let transform = if gradient.absolute { - Some(gradient.transform * gradient.to_transform()) + if gradient.absolute { + let transform = gradient.transform * gradient.to_transform(); + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, 5), NodeInput::value(TaggedValue::Bool(true), false), network_path); + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, 6), NodeInput::value(TaggedValue::DAffine2(transform), false), network_path); } else { - // Baking a legacy bounding-box-relative gradient is deferred until the measurement pre-pass can supply the paint target's bounds + // Baking a legacy bounding-box-relative gradient is deferred until the measurement pre-pass can supply the paint + // target's bounds, so the template's unbaked `_has_transform = false` stands until the bake lands document.pending_gradient_bbox_bake.push((network_path.to_vec(), *node_id, gradient.clone())); - None - }; - document - .network_interface - .set_input(&InputConnector::node(*node_id, 6), NodeInput::value(TaggedValue::OptionalDAffine2(transform), false), network_path); + } } } // Wired/exposed fill keeps the connection. - // The generic paint connector accepts the existing `List`/`List` paint sources directly. + // The generic paint connector accepts the existing `List`/`List` paint sources directly. _ => { - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); } } // Color backup: no change - document.network_interface.set_input(&InputConnector::node(*node_id, 2), old_inputs[2].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), old_inputs[2].clone(), network_path); // Gradient backup: extract stops if let Some(TaggedValue::LegacyGradient(g)) = old_inputs[3].as_value() { - document - .network_interface - .set_input(&InputConnector::node(*node_id, 3), NodeInput::value(TaggedValue::Gradient(g.stops.clone()), false), network_path); + document.network_interface.set_input( + &InputConnector::node_at_index(*node_id, 3), + NodeInput::value( + TaggedValue::GradientRamp(GradientRamp { + gradient_spread: g.spread_method, + ..g.stops.clone() + }), + false, + ), + network_path, + ); // A solid/no-fill node leaves the gradient metadata inputs unused, so seed them from the backup gradient for a later Solid -> Gradient toggle to restore if matches!( old_inputs[1].as_value(), Some(TaggedValue::LegacyFill( - graphic_types::migrations::legacy::Fill::None | graphic_types::migrations::legacy::Fill::Solid(_) + graphic_types::migrations::legacy::LegacyFill::None | graphic_types::migrations::legacy::LegacyFill::Solid(_) )) ) { - document - .network_interface - .set_input(&InputConnector::node(*node_id, 4), NodeInput::value(TaggedValue::GradientType(g.gradient_type), false), network_path); document.network_interface.set_input( - &InputConnector::node(*node_id, 5), - NodeInput::value(TaggedValue::GradientSpreadMethod(g.spread_method), false), + &InputConnector::node_at_index(*node_id, 4), + NodeInput::value(TaggedValue::GradientForm(g.gradient_type), false), network_path, ); - let transform = if g.absolute { - Some(g.transform * g.to_transform()) + if g.absolute { + let transform = g.transform * g.to_transform(); + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, 5), NodeInput::value(TaggedValue::Bool(true), false), network_path); + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, 6), NodeInput::value(TaggedValue::DAffine2(transform), false), network_path); } else { document.pending_gradient_bbox_bake.push((network_path.to_vec(), *node_id, g.clone())); - None - }; - document - .network_interface - .set_input(&InputConnector::node(*node_id, 6), NodeInput::value(TaggedValue::OptionalDAffine2(transform), false), network_path); + } } } inputs_count = 7; } + // Fill split its `Option` placement into a `_has_transform` bool immediately before the `_transform` matrix. The modern + // shape is also 7 inputs, so this era is identified by its `_spread_method` input at 5 or its optional transform at 6. + let is_pre_transform_split_fill = inputs_count == 7 + && (matches!(node.inputs.get(5).and_then(|input| input.as_value()), Some(TaggedValue::GradientSpread(_))) + || matches!(node.inputs.get(6).and_then(|input| input.as_value()), Some(TaggedValue::LegacyOptionalDAffine2(_)))); + if reference == DefinitionIdentifier::ProtoNode(graphene_std::vector::fill::IDENTIFIER) && is_pre_transform_split_fill { + let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); + let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; + + let gradient_spread = match old_inputs.get(5).and_then(|input| input.as_value()) { + Some(&TaggedValue::GradientSpread(value)) => value, + _ => GradientSpread::default(), + }; + + for (index, input) in old_inputs.iter().enumerate().take(5) { + let input = if index == 1 || index == 3 { + fold_gradient_spread_into_ramp_input(input, gradient_spread) + } else { + input.clone() + }; + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, index), input, network_path); + } + + match old_inputs.get(6).and_then(|input| input.as_value()) { + Some(TaggedValue::LegacyOptionalDAffine2(value)) => { + let has_transform = value.is_some(); + let transform = value.unwrap_or(glam::DAffine2::IDENTITY); + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, 5), NodeInput::value(TaggedValue::Bool(has_transform), false), network_path); + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, 6), NodeInput::value(TaggedValue::DAffine2(transform), false), network_path); + } + // A wired (or otherwise non-value) transform keeps its connection and is treated as present + _ => { + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, 5), NodeInput::value(TaggedValue::Bool(true), false), network_path); + let transform_input = old_inputs.get(6).cloned().unwrap_or_else(|| NodeInput::value(TaggedValue::DAffine2(glam::DAffine2::IDENTITY), false)); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 6), transform_input, network_path); + } + } + + inputs_count = 7; + } + + // The Fill node's `_spread_method` input moved into the `GradientRamp` value's own `gradient_spread` field + if reference == DefinitionIdentifier::ProtoNode(graphene_std::vector::fill::IDENTIFIER) && inputs_count == 8 { + let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); + let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; + + let gradient_spread = match old_inputs.get(5).and_then(|input| input.as_value()) { + Some(&TaggedValue::GradientSpread(value)) => value, + _ => GradientSpread::default(), + }; + + for (index, input) in old_inputs.iter().enumerate().take(5) { + let input = if index == 1 || index == 3 { + fold_gradient_spread_into_ramp_input(input, gradient_spread) + } else { + input.clone() + }; + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, index), input, network_path); + } + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 5), old_inputs[6].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 6), old_inputs[7].clone(), network_path); + + inputs_count = 7; + } + // Upgrade Stroke node to reorder parameters and add "Align" and "Paint Order" (#2644) if reference == DefinitionIdentifier::ProtoNode(graphene_std::vector::stroke::IDENTIFIER) && inputs_count == 8 { let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); @@ -1727,91 +1837,169 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let align_input = NodeInput::value(TaggedValue::StrokeAlign(StrokeAlign::Center), false); let paint_order_input = NodeInput::value(TaggedValue::PaintOrder(PaintOrder::StrokeAbove), false); - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 2), old_inputs[2].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 3), align_input, network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 4), old_inputs[5].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 5), old_inputs[6].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 6), old_inputs[7].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 7), paint_order_input, network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 8), old_inputs[3].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 9), old_inputs[4].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), old_inputs[2].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 3), align_input, network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 4), old_inputs[5].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 5), old_inputs[6].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 6), old_inputs[7].clone(), network_path); + // Our stroke node keeps the paint order input, so the dash pair lands at 8 and 9 + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 7), paint_order_input, network_path); + let dash_input = migrate_dash_input(&old_inputs[3]).unwrap_or_else(|| old_inputs[3].clone()); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 8), dash_input, network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 9), old_inputs[4].clone(), network_path); + + inputs_count = 10; } - // Upgrade Text node to include line height and character spacing, which were previously hardcoded to 1, from https://github.com/GraphiteEditor/Graphite/pull/2016 - if reference == DefinitionIdentifier::ProtoNode(ProtoNodeIdentifier::new("graphene_std::text::TextNode")) && inputs_count == 8 { + // A legacy "no color" on a plain color connector (`TaggedValue::no_paint()` restored by the deserializer) becomes a color, + // since only paint connectors keep the no-paint choice + { + let migrate_color_input = |input: &NodeInput, fallback: Color| -> Option { + let NodeInput::Value { tagged_value, exposed } = input else { return None }; + if !tagged_value.is_no_paint() { + return None; + } + Some(NodeInput::value(TaggedValue::Color(fallback), *exposed)) + }; + + let conversions: &[(ParameterRef, Color)] = &[ + (graphene_std::vector::fill::BackupColorInput.into(), Color::BLACK), + (graphene_std::artboard::create_artboard::BackgroundInput.into(), Color::WHITE), + (graphene_std::math_nodes::color_value::ColorInput.into(), Color::TRANSPARENT), + (graphene_std::raster_nodes::adjustments::black_and_white::TintInput.into(), Color::BLACK), + (graphene_std::raster_nodes::blending_nodes::color_overlay::ColorInput.into(), Color::BLACK), + (graphene_std::raster_nodes::std_nodes::empty_image::ColorInput.into(), Color::WHITE), + ]; + for (parameter, fallback) in conversions { + if reference != DefinitionIdentifier::ProtoNode(parameter.node_identifier.clone()) { + continue; + } + let Some(input) = node.inputs.get(parameter.input_index) else { continue }; + if let Some(migrated) = migrate_color_input(input, *fallback) { + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, parameter.input_index), migrated, network_path); + } + } + } + + // The stroke dash sequence became the `DashPattern` value type; convert any already-shaped stroke that still stores a legacy dash input + if reference == DefinitionIdentifier::ProtoNode(graphene_std::vector::stroke::IDENTIFIER) + && let Some(dash_input) = node.input(graphene_std::vector::stroke::DashPatternInput) + && let Some(migrated) = migrate_dash_input(dash_input) + { + document + .network_interface + .set_input(&InputConnector::node(*node_id, graphene_std::vector::stroke::DashPatternInput), migrated, network_path); + } + + // The stored no-paint sentinel was the `List` type default before the paint connectors ranked down to `Item`. + // This must run before the stale-List-default cleanup below, which would otherwise adopt the definition's default paint. + { + let legacy_no_paint = TaggedValue::TypeDefault(concrete!(List)); + let paint_parameters: &[ParameterRef] = &[graphene_std::vector::fill::PaintInput.into(), graphene_std::vector::stroke::PaintInput.into()]; + for parameter in paint_parameters { + if reference != DefinitionIdentifier::ProtoNode(parameter.node_identifier.clone()) { + continue; + } + let Some(NodeInput::Value { tagged_value, exposed }) = node.inputs.get(parameter.input_index) else { + continue; + }; + if **tagged_value == legacy_no_paint { + document.network_interface.set_input( + &InputConnector::node_at_index(*node_id, parameter.input_index), + NodeInput::value(TaggedValue::no_paint(), *exposed), + network_path, + ); + } + } + } + + // The corner radius became the `BoxCorners` value type; convert any already-shaped rectangle that still stores a legacy corner input + if reference == DefinitionIdentifier::ProtoNode(graphene_std::vector::generator_nodes::rectangle::IDENTIFIER) + && let Some(corner_input) = node.input(graphene_std::vector::generator_nodes::rectangle::CornerRadiusInput) + && let Some(migrated) = migrate_corner_radius_input(corner_input) + { + document.network_interface.set_input( + &InputConnector::node(*node_id, graphene_std::vector::generator_nodes::rectangle::CornerRadiusInput), + migrated, + network_path, + ); + } + + // The rectangle's corner radius became the `BoxCorners` value type and its hidden individual-radii toggle moved after the + // user-visible inputs. A legacy rectangle stores that toggle (a plain `bool`) at index 3, where the new shape stores the corner + // radius, so a `bool` value there identifies the old input order: [width, height, individual, corner_radius, clamped]. + if reference == DefinitionIdentifier::ProtoNode(graphene_std::vector::generator_nodes::rectangle::IDENTIFIER) + && let Some(toggle_input) = node.inputs.get(3) + && matches!(toggle_input.as_value(), Some(TaggedValue::Bool(_))) + { + let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); + let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; + + let corner_radius = migrate_corner_radius_input(&old_inputs[4]).unwrap_or_else(|| old_inputs[4].clone()); + + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), old_inputs[2].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 3), corner_radius, network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 4), old_inputs[5].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 5), old_inputs[3].clone(), network_path); + } + + // The Text to Vector node's runtime `separate_glyphs` toggle became the dedicated "Text to Vector Glyphs" node, leaving Text to Vector as a plain + // string-to-compound-path converter. A 2-input Text to Vector is the old toggled shape: a `true` toggle routes to Text to Vector Glyphs, otherwise + // the node stays Text to Vector; either way the toggle input is dropped and the string wire is preserved. + if reference == DefinitionIdentifier::ProtoNode(graphene_std::text::text_to_vector::IDENTIFIER) && inputs_count == 2 { + let separate_glyphs = matches!(node.inputs.get(1).and_then(|input| input.as_value()), Some(TaggedValue::Bool(true))); + let target = if separate_glyphs { + graphene_std::text::text_to_vector_glyphs::IDENTIFIER + } else { + graphene_std::text::text_to_vector::IDENTIFIER + }; + + let mut node_template = resolve_proto_node_type(target)?.default_node_template(); + document.network_interface.replace_implementation(node_id, network_path, &mut node_template); + document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; + if let Some(string_input) = node.inputs.first() { + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), string_input.clone(), network_path); + } + } + + // Every Text node era before alignment only appended inputs, so each is a prefix of the 11-input layout. + // Alignment (#2920) is the exception: it landed at index 9 and pushed Per-Glyph Instances out to 10. + if reference == DefinitionIdentifier::ProtoNode(ProtoNodeIdentifier::new("graphene_std::text::TextNode")) && (4..=10).contains(&inputs_count) { let mut template: NodeTemplate = legacy_text_node_template()?; document.network_interface.replace_implementation(node_id, network_path, &mut template); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 2), old_inputs[2].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 3), old_inputs[3].clone(), network_path); - document.network_interface.set_input( - &InputConnector::node(*node_id, 4), - if inputs_count == 6 { - old_inputs[4].clone() - } else { - NodeInput::value(TaggedValue::F64(TypesettingConfig::default().line_height_ratio), false) - }, - network_path, - ); - document.network_interface.set_input( - &InputConnector::node(*node_id, 5), - if inputs_count == 6 { - old_inputs[5].clone() - } else { - NodeInput::value(TaggedValue::F64(TypesettingConfig::default().letter_spacing), false) - }, - network_path, - ); - document.network_interface.set_input( - &InputConnector::node(*node_id, 6), - if inputs_count >= 7 { - old_inputs[6].clone() - } else { - NodeInput::value(TaggedValue::F64(TypesettingConfig::default().max_width.unwrap_or_default()), false) - }, - network_path, - ); - document.network_interface.set_input( - &InputConnector::node(*node_id, 7), - if inputs_count >= 8 { - old_inputs[7].clone() - } else { - NodeInput::value(TaggedValue::F64(TypesettingConfig::default().max_width.unwrap_or_default()), false) - }, - network_path, - ); - document.network_interface.set_input( - &InputConnector::node(*node_id, 8), - if inputs_count >= 9 { - old_inputs[8].clone() - } else { - NodeInput::value(TaggedValue::F64(TypesettingConfig::default().letter_tilt), false) - }, - network_path, - ); - document.network_interface.set_input( - &InputConnector::node(*node_id, 9), - if inputs_count >= 10 { - old_inputs[9].clone() - } else { - NodeInput::value(TaggedValue::TextAlign(TextAlign::default()), false) - }, - network_path, - ); - document.network_interface.set_input( - &InputConnector::node(*node_id, 10), - if inputs_count >= 11 { - old_inputs[10].clone() - } else { - NodeInput::value(TaggedValue::Bool(false), false) - }, - network_path, - ); + // Line height and character spacing were hardcoded to 1 in the era before they became inputs + let hardcoded_to_one = || NodeInput::value(TaggedValue::F64(1.), false); + // Zero is how an absent `Option` maximum reads to the split below + let unset_maximum = || NodeInput::value(TaggedValue::F64(0.), false); + + let upgraded_inputs = [ + old_inputs[0].clone(), + old_inputs[1].clone(), + old_inputs[2].clone(), + old_inputs[3].clone(), + old_inputs.get(4).cloned().unwrap_or_else(hardcoded_to_one), + old_inputs.get(5).cloned().unwrap_or_else(hardcoded_to_one), + old_inputs.get(6).cloned().unwrap_or_else(unset_maximum), + old_inputs.get(7).cloned().unwrap_or_else(unset_maximum), + old_inputs + .get(8) + .cloned() + .unwrap_or_else(|| NodeInput::value(TaggedValue::F64(TypesettingConfig::default().letter_tilt), false)), + NodeInput::value(TaggedValue::TextAlign(TextAlign::default()), false), + old_inputs.get(9).cloned().unwrap_or_else(|| NodeInput::value(TaggedValue::Bool(false), false)), + ]; + for (index, input) in upgraded_inputs.into_iter().enumerate() { + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, index), input, network_path); + } + inputs_count = 11 } @@ -1825,35 +2013,36 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], // Copy over old inputs #[allow(clippy::needless_range_loop)] for i in 0..=5 { - document.network_interface.set_input(&InputConnector::node(*node_id, i), old_inputs[i].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, i), old_inputs[i].clone(), network_path); } + // The old `Option` maximum becomes a bool plus a value, with zero standing in for the absent option. + // A wired maximum has no value to read, so it keeps its connection and counts as present. + let split_maximum = |input: &NodeInput| match input.as_value() { + Some(&TaggedValue::F64(maximum)) => (maximum != 0., NodeInput::value(TaggedValue::F64(if maximum == 0. { 100. } else { maximum }), false)), + _ => (true, input.clone()), + }; + // Max Width - let Some(&TaggedValue::F64(old_max_width)) = old_inputs[6].as_value() else { return None }; + let (has_max_width, max_width) = split_maximum(&old_inputs[6]); document .network_interface - .set_input(&InputConnector::node(*node_id, 6), NodeInput::value(TaggedValue::Bool(old_max_width != 0.), false), network_path); - document.network_interface.set_input( - &InputConnector::node(*node_id, 7), - NodeInput::value(TaggedValue::F64(if old_max_width == 0. { 100. } else { old_max_width }), false), - network_path, - ); + .set_input(&InputConnector::node_at_index(*node_id, 6), NodeInput::value(TaggedValue::Bool(has_max_width), false), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 7), max_width, network_path); // Max Height - let Some(&TaggedValue::F64(old_max_height)) = old_inputs[7].as_value() else { return None }; + let (has_max_height, max_height) = split_maximum(&old_inputs[7]); document .network_interface - .set_input(&InputConnector::node(*node_id, 8), NodeInput::value(TaggedValue::Bool(old_max_height != 0.), false), network_path); - document.network_interface.set_input( - &InputConnector::node(*node_id, 9), - NodeInput::value(TaggedValue::F64(if old_max_height == 0. { 100. } else { old_max_height }), false), - network_path, - ); + .set_input(&InputConnector::node_at_index(*node_id, 8), NodeInput::value(TaggedValue::Bool(has_max_height), false), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 9), max_height, network_path); // Copy over old inputs #[allow(clippy::needless_range_loop)] for i in 10..=12 { - document.network_interface.set_input(&InputConnector::node(*node_id, i), old_inputs[i - 2].clone(), network_path); + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, i), old_inputs[i - 2].clone(), network_path); } inputs_count = 13; @@ -1870,10 +2059,10 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::Bool(true), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 1), NodeInput::value(TaggedValue::Bool(true), false), network_path); } // Upgrade the 'Tangent on Path' node to include a boolean input for whether the output should be in radians, which was previously the only option but is now not the default @@ -1883,13 +2072,13 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 2), old_inputs[2].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 3), old_inputs[3].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), old_inputs[2].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 3), old_inputs[3].clone(), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 4), NodeInput::value(TaggedValue::Bool(true), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 4), NodeInput::value(TaggedValue::Bool(true), false), network_path); } // Upgrade the Modulo node to include a boolean input for whether the output should be always positive, which was previously not an option @@ -1899,11 +2088,25 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 2), NodeInput::value(TaggedValue::Bool(false), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 2), NodeInput::value(TaggedValue::Bool(false), false), network_path); + } + + // Convert the old 'Vec2 Value' node, identified by its leftover 3-input shape with separate X and Y inputs, + // into the 'Combine Vec2' node which now fills that role (the new 'Vec2 Value' node instead takes a single vec2 input) + if reference == DefinitionIdentifier::ProtoNode(graphene_std::math_nodes::vec_2_value::IDENTIFIER) && inputs_count == 3 { + let combine_vec2_reference = DefinitionIdentifier::ProtoNode(graphene_std::math_nodes::combine_vec_2::IDENTIFIER); + let mut node_template = resolve_document_node_type(&combine_vec2_reference)?.default_node_template(); + document.network_interface.replace_implementation(node_id, network_path, &mut node_template); + + let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; + + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), old_inputs[2].clone(), network_path); } // Upgrade the Mirror node to add the `keep_original` boolean input @@ -1913,12 +2116,12 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 2), old_inputs[2].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), old_inputs[2].clone(), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 3), NodeInput::value(TaggedValue::Bool(true), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 3), NodeInput::value(TaggedValue::Bool(true), false), network_path); } // Upgrade the Mirror node to add the `reference_point` input and change `offset` from `DVec2` to `f64` @@ -1931,17 +2134,17 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let Some(&TaggedValue::DVec2(old_offset)) = old_inputs[1].as_value() else { return None }; let old_offset = if old_offset.x.abs() > old_offset.y.abs() { old_offset.x } else { old_offset.y }; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); document.network_interface.set_input( - &InputConnector::node(*node_id, 1), + &InputConnector::node_at_index(*node_id, 1), NodeInput::value(TaggedValue::ReferencePoint(graphene_std::transform::ReferencePoint::Center), false), network_path, ); document .network_interface - .set_input(&InputConnector::node(*node_id, 2), NodeInput::value(TaggedValue::F64(old_offset), false), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 3), old_inputs[2].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 4), old_inputs[3].clone(), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 2), NodeInput::value(TaggedValue::F64(old_offset), false), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 3), old_inputs[2].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 4), old_inputs[3].clone(), network_path); } // Upgrade `image` nodes that stored image data as `Image`` to `image` nodes that store a reference to the image data as a resource. @@ -1964,7 +2167,7 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let _ = document.network_interface.replace_inputs(node_id, network_path, &mut node_template); document .network_interface - .set_input(&InputConnector::node(*node_id, 0), NodeInput::value(TaggedValue::Resource(resource_id), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 0), NodeInput::value(TaggedValue::Resource(resource_id), false), network_path); } } @@ -1973,7 +2176,7 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], if reference == DefinitionIdentifier::ProtoNode(ProtoNodeIdentifier::new("graphene_std::text::TextNode")) && inputs_count == 13 && matches!(node.inputs.first(), Some(NodeInput::Scope(_))) { document .network_interface - .set_input(&InputConnector::node(*node_id, 0), NodeInput::value(TaggedValue::None, false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 0), NodeInput::value(TaggedValue::None, false), network_path); if let Some(TaggedValue::Font(font)) = node.inputs.get(2).and_then(|input| input.as_value()) { let resource_id = ResourceId::new(); @@ -1987,7 +2190,7 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], ); document .network_interface - .set_input(&InputConnector::node(*node_id, 2), NodeInput::value(TaggedValue::Resource(resource_id), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 2), NodeInput::value(TaggedValue::Resource(resource_id), false), network_path); } } @@ -1999,9 +2202,9 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], document .network_interface - .set_input(&InputConnector::node(*node_id, 0), NodeInput::value(TaggedValue::None, false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 0), NodeInput::value(TaggedValue::None, false), network_path); for (i, input) in old_inputs.iter().enumerate() { - document.network_interface.set_input(&InputConnector::node(*node_id, i + 1), input.clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, i + 1), input.clone(), network_path); } } @@ -2011,31 +2214,8 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); - } - - // Old shape: [background, bounds, trace, cache]. Both "bounds" (input 1) and "cache" (input 3) are dropped, and "cache" is now stored as - // internal node state via `#[data]` on the brush node, so it is not a node input at all in the new shape. - if reference == DefinitionIdentifier::ProtoNode(graphene_std::brush::brush::brush::IDENTIFIER) && inputs_count == 4 { - let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); - document.network_interface.replace_implementation(node_id, network_path, &mut node_template); - - let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[2].clone(), network_path); - } - - // Old shape: [background, trace, cache]. The "cache" input is dropped because the brush node now stores its cache as internal `#[data]` state. - if reference == DefinitionIdentifier::ProtoNode(graphene_std::brush::brush::brush::IDENTIFIER) && inputs_count == 3 { - let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); - document.network_interface.replace_implementation(node_id, network_path, &mut node_template); - - let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); } if reference == DefinitionIdentifier::ProtoNode(ProtoNodeIdentifier::new("graphene_core::vector::RemoveHandlesNode")) { @@ -2044,13 +2224,13 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::F64(0.), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 1), NodeInput::value(TaggedValue::F64(0.), false), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 2), NodeInput::value(TaggedValue::Bool(false), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 2), NodeInput::value(TaggedValue::Bool(false), false), network_path); } if reference == DefinitionIdentifier::ProtoNode(ProtoNodeIdentifier::new("graphene_core::vector::GenerateHandlesNode")) { @@ -2059,11 +2239,11 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 2), NodeInput::value(TaggedValue::Bool(true), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 2), NodeInput::value(TaggedValue::Bool(true), false), network_path); } if reference == DefinitionIdentifier::ProtoNode(graphene_std::vector::merge_by_distance::IDENTIFIER) && inputs_count == 2 { @@ -2072,10 +2252,10 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); document.network_interface.set_input( - &InputConnector::node(*node_id, 2), + &InputConnector::node_at_index(*node_id, 2), NodeInput::value(TaggedValue::MergeByDistanceAlgorithm(graphene_std::vector::misc::MergeByDistanceAlgorithm::Topological), false), network_path, ); @@ -2087,10 +2267,10 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); document.network_interface.set_input( - &InputConnector::node(*node_id, 2), + &InputConnector::node_at_index(*node_id, 2), NodeInput::value(TaggedValue::MergeByDistanceAlgorithm(graphene_std::vector::misc::MergeByDistanceAlgorithm::Spatial), false), network_path, ); @@ -2104,13 +2284,13 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let new_spacing_value = NodeInput::value(TaggedValue::PointSpacingType(graphene_std::vector::misc::PointSpacingType::Separation), false); let new_quantity_value = NodeInput::value(TaggedValue::U32(100), false); - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), new_spacing_value, network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 2), old_inputs[1].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 3), new_quantity_value, network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 4), old_inputs[2].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 5), old_inputs[3].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 6), old_inputs[4].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), new_spacing_value, network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 3), new_quantity_value, network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 4), old_inputs[2].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 5), old_inputs[3].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 6), old_inputs[4].clone(), network_path); } // Make the "Quantity" parameter a u32 instead of f64 @@ -2124,37 +2304,40 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], && let TaggedValue::F64(value) = **tagged_value { let new_quantity_value = NodeInput::value(TaggedValue::U32(value as u32), *exposed); - document.network_interface.set_input(&InputConnector::node(*node_id, 3), new_quantity_value, network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 3), new_quantity_value, network_path); } } - // Make the "Grid" node, if its input of index 3 is a DVec2 for "angles" instead of a u32 for the "columns" input that now succeeds "angles", move the angle to index 5 (after "columns" and "rows") + // Upgrade the "Grid" node from its six-input layout to the current seven-input layout (which adds a trailing + // "connect_cells" toggle, defaulting to the connected mesh that older grids produced). Legacy documents also placed + // "angles" at index 3 instead of index 5 (after "columns" and "rows"), so we reorder those. Either way, "connect_cells" + // is left at its default from the new node template. if reference == DefinitionIdentifier::ProtoNode(graphene_std::vector::generator_nodes::grid::IDENTIFIER) && inputs_count == 6 { - let node_definition = resolve_document_node_type(&reference)?; - let mut new_node_template = node_definition.default_node_template(); - - let mut current_node_template = document.network_interface.create_node_template(node_id, network_path)?; + let mut new_node_template = resolve_document_node_type(&reference)?.default_node_template(); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut new_node_template)?; - let index_3_value = old_inputs.get(3).cloned(); - let mut upgraded = false; + // The two six-input layouts differ only in where the DVec2 "angles" and the u32 "columns"/"rows" sit: + // Legacy: [primary, grid_type, spacing, angles (DVec2), columns (u32), rows (u32)] + // Modern: [primary, grid_type, spacing, columns (u32), rows (u32), angles (DVec2)] + // So a DVec2 "angles" at index 3, or a u32 "rows" at index 5, marks the legacy order. Checking both slots classifies + // correctly even when one of them is a wired or imported connection rather than a literal value. + let index_3_is_angles = matches!(old_inputs.get(3), Some(NodeInput::Value { tagged_value, .. }) if matches!(**tagged_value, TaggedValue::DVec2(_))); + let index_5_is_rows = matches!(old_inputs.get(5), Some(NodeInput::Value { tagged_value, .. }) if matches!(**tagged_value, TaggedValue::U32(_))); + let legacy_angles_layout = index_3_is_angles || index_5_is_rows; - if let Some(NodeInput::Value { tagged_value, exposed: _ }) = index_3_value - && matches!(*tagged_value, TaggedValue::DVec2(_)) - { - // Move index 3 to the end - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 2), old_inputs[2].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 3), old_inputs[4].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 4), old_inputs[5].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 5), old_inputs[3].clone(), network_path); - - upgraded = true; - } - - if !upgraded { - let _ = document.network_interface.replace_inputs(node_id, network_path, &mut current_node_template); + if legacy_angles_layout { + // Old order: [primary, grid_type, spacing, angles, columns, rows]. Move "angles" from index 3 to index 5. + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), old_inputs[2].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 3), old_inputs[4].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 4), old_inputs[5].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 5), old_inputs[3].clone(), network_path); + } else { + // Modern six-input order. Carry each input over to the same index. + for (index, input) in old_inputs.iter().take(6).enumerate() { + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, index), input.clone(), network_path); + } } } @@ -2171,6 +2354,39 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], document.network_interface.add_import(TaggedValue::U32(0), false, 1, "Loop Level", "TODO", &node_path); } + // Drop the placeholder primary input the "Read Vector" node used to carry, since it reads its value from the context + if reference == DefinitionIdentifier::ProtoNode(graphene_std::context::read_vector::IDENTIFIER) && inputs_count > 0 { + let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); + document.network_interface.replace_implementation(node_id, network_path, &mut node_template); + document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; + } + + // The "Dot Product" node gained a "Normalize" toggle, which older nodes predate by always taking the raw dot product + if reference == DefinitionIdentifier::ProtoNode(graphene_std::math_nodes::dot_product::IDENTIFIER) && inputs_count == 2 { + let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); + let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; + + for (index, input) in old_inputs.iter().take(2).enumerate() { + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, index), input.clone(), network_path); + } + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, 2), NodeInput::value(TaggedValue::Bool(false), false), network_path); + } + + // The "Query JSON" node succeeded "JSON Get", whose object lookups always returned their strings unquoted + if reference == DefinitionIdentifier::ProtoNode(graphene_std::text_nodes::json::query_json::IDENTIFIER) && inputs_count == 2 { + let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); + let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; + + for (index, input) in old_inputs.iter().take(2).enumerate() { + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, index), input.clone(), network_path); + } + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, 2), NodeInput::value(TaggedValue::Bool(true), false), network_path); + } + // Upgrade the "Animation" node to add the "Rate" input if reference == DefinitionIdentifier::ProtoNode(graphene_std::animation::animation_time::IDENTIFIER) && inputs_count < 2 { let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); @@ -2179,10 +2395,10 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], document .network_interface - .set_input(&InputConnector::node(*node_id, 0), NodeInput::value(TaggedValue::None, false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 0), NodeInput::value(TaggedValue::None, false), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::F64(1.), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 1), NodeInput::value(TaggedValue::F64(1.), false), network_path); } // Upgrade the "Read Position" node to add the "Loop Level" input @@ -2193,10 +2409,10 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], document .network_interface - .set_input(&InputConnector::node(*node_id, 0), NodeInput::value(TaggedValue::None, false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 0), NodeInput::value(TaggedValue::None, false), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::U32(0), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 1), NodeInput::value(TaggedValue::U32(0), false), network_path); } // Migrate from the old source/target v1 "Morph" node to the new `List`-based v2 "Morph" node. @@ -2238,15 +2454,19 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], document.network_interface.shift_absolute_node_position(&merge_node_id, merge_position, network_path); // Connect the old 'source' and 'target' inputs to the new Merge node - document.network_interface.set_input(&InputConnector::node(merge_node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(merge_node_id, 1), old_inputs[1].clone(), network_path); + document + .network_interface + .set_input(&InputConnector::node_at_index(merge_node_id, 0), old_inputs[0].clone(), network_path); + document + .network_interface + .set_input(&InputConnector::node_at_index(merge_node_id, 1), old_inputs[1].clone(), network_path); // Connect the new Merge node to the 'content' input of the Morph node document .network_interface - .set_input(&InputConnector::node(*node_id, 0), NodeInput::node(merge_node_id, 0), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 0), NodeInput::node(merge_node_id, 0), network_path); // Connect the old 'progression' input to the new 'progression' input of the Morph node - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[2].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[2].clone(), network_path); inputs_count = 2; } @@ -2254,54 +2474,54 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], // Migrate from the v2 "Morph" node (2 inputs: content, progression) to the v3 "Morph" node (5 inputs: content, progression, reverse, distribution, path). // The old progression used integer part for pair selection (range 0..N-1 where N is the number of content objects). // The new progression uses fractional 0..1 for euclidean traversal through all objects. - // We insert Count Elements β†’ Subtract 1 β†’ Divide to remap: new_progression = old_progression / (N - 1). + // We insert List Length β†’ Subtract 1 β†’ Divide to remap: new_progression = old_progression / (N - 1). // For the common 2-object case (N=2), this divides by 1 which is a no-op, preserving identical behavior. if reference == DefinitionIdentifier::ProtoNode(graphene_std::vector::morph::IDENTIFIER) && inputs_count == 2 { let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; // Reconnect content (input 0) and leave path (input 4) as default - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); let Some(morph_position) = document.network_interface.position_from_downstream_node(node_id, network_path) else { log::error!("Could not get position for morph node {node_id}"); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); return None; }; - // Create Count Elements node: counts content `List` items β†’ N - let Some(count_elements_def) = resolve_document_node_type(&DefinitionIdentifier::ProtoNode(graphene_std::vector::count_elements::IDENTIFIER)) else { - log::error!("Could not get count_elements node from definition when upgrading morph"); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); + // Create List Length node: counts content `List` items β†’ N + let Some(list_length_def) = resolve_document_node_type(&DefinitionIdentifier::ProtoNode(graphene_std::vector::list_length::IDENTIFIER)) else { + log::error!("Could not get list_length node from definition when upgrading morph"); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); return None; }; - let count_elements_template = count_elements_def.default_node_template(); - let count_elements_id = NodeId::new(); + let list_length_template = list_length_def.default_node_template(); + let list_length_id = NodeId::new(); // Create Subtract node: N β†’ N-1 let Some(subtract_def) = resolve_document_node_type(&DefinitionIdentifier::ProtoNode(graphene_std::math_nodes::subtract::IDENTIFIER)) else { log::error!("Could not get subtract node from definition when upgrading morph"); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); return None; }; let mut subtract_template = subtract_def.default_node_template(); - subtract_template.document_node.inputs[1] = NodeInput::value(TaggedValue::F64(1.), false); + subtract_template.inputs[1] = NodeInput::value(TaggedValue::F64(1.), false); let subtract_id = NodeId::new(); // Create Divide node: old_progression / (N-1) β†’ new progression let Some(divide_def) = resolve_document_node_type(&DefinitionIdentifier::ProtoNode(graphene_std::math_nodes::divide::IDENTIFIER)) else { log::error!("Could not get divide node from definition when upgrading morph"); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); return None; }; let divide_template = divide_def.default_node_template(); let divide_id = NodeId::new(); // Insert and position nodes - document.network_interface.insert_node(count_elements_id, count_elements_template, network_path); + document.network_interface.insert_node(list_length_id, list_length_template, network_path); document .network_interface - .shift_absolute_node_position(&count_elements_id, morph_position + IVec2::new(-21, 2), network_path); + .shift_absolute_node_position(&list_length_id, morph_position + IVec2::new(-21, 2), network_path); document.network_interface.insert_node(subtract_id, subtract_template, network_path); document.network_interface.shift_absolute_node_position(&subtract_id, morph_position + IVec2::new(-14, 2), network_path); @@ -2309,22 +2529,28 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], document.network_interface.insert_node(divide_id, divide_template, network_path); document.network_interface.shift_absolute_node_position(÷_id, morph_position + IVec2::new(-7, 1), network_path); - // Wire: content source β†’ Count Elements input 0 - document.network_interface.set_input(&InputConnector::node(count_elements_id, 0), old_inputs[0].clone(), network_path); - - // Wire: Count Elements output β†’ Subtract input 0 (minuend) + // Wire: content source β†’ List Length input 0 document .network_interface - .set_input(&InputConnector::node(subtract_id, 0), NodeInput::node(count_elements_id, 0), network_path); + .set_input(&InputConnector::node_at_index(list_length_id, 0), old_inputs[0].clone(), network_path); + + // Wire: List Length output β†’ Subtract input 0 (minuend) + document + .network_interface + .set_input(&InputConnector::node_at_index(subtract_id, 0), NodeInput::node(list_length_id, 0), network_path); // Wire: old progression β†’ Divide input 0 (numerator) - document.network_interface.set_input(&InputConnector::node(divide_id, 0), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(divide_id, 0), old_inputs[1].clone(), network_path); // Wire: Subtract output β†’ Divide input 1 (denominator) - document.network_interface.set_input(&InputConnector::node(divide_id, 1), NodeInput::node(subtract_id, 0), network_path); + document + .network_interface + .set_input(&InputConnector::node_at_index(divide_id, 1), NodeInput::node(subtract_id, 0), network_path); // Wire: Divide output β†’ Morph progression input - document.network_interface.set_input(&InputConnector::node(*node_id, 1), NodeInput::node(divide_id, 0), network_path); + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, 1), NodeInput::node(divide_id, 0), network_path); } // Migrate old Arrow node from (start, end, shaft_width, head_width, head_length) to (arrow_to, shaft_width, head_width, head_length) with a Transform node for positioning @@ -2356,15 +2582,15 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; // Preserve primary input connection - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); // Set arrow_to = end - start document .network_interface - .set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::DVec2(end - start), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 1), NodeInput::value(TaggedValue::DVec2(end - start), false), network_path); // Preserve shaft_width, head_width, head_length (shifted from indices 3,4,5 to 2,3,4) - document.network_interface.set_input(&InputConnector::node(*node_id, 2), old_inputs[3].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 3), old_inputs[4].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 4), old_inputs[5].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), old_inputs[3].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 3), old_inputs[4].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 4), old_inputs[5].clone(), network_path); // Find downstream connection to insert Transform node let downstream = document @@ -2380,7 +2606,7 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], return None; }; let mut transform_template = transform_node_type.default_node_template(); - transform_template.document_node.inputs[1] = NodeInput::value(TaggedValue::DVec2(start), false); + transform_template.inputs[1] = NodeInput::value(TaggedValue::DVec2(start), false); let transform_id = NodeId::new(); @@ -2421,11 +2647,11 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; // Preserve primary input connection - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); // Set line_to = end - start document .network_interface - .set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::DVec2(end - start), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 1), NodeInput::value(TaggedValue::DVec2(end - start), false), network_path); // Find downstream connection to insert Transform node let downstream = document @@ -2441,7 +2667,7 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], return None; }; let mut transform_template = transform_node_type.default_node_template(); - transform_template.document_node.inputs[1] = NodeInput::value(TaggedValue::DVec2(start), false); + transform_template.inputs[1] = NodeInput::value(TaggedValue::DVec2(start), false); let transform_id = NodeId::new(); @@ -2458,10 +2684,12 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document - .network_interface - .set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::ScaleType(ScaleType::Magnitude), false), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input( + &InputConnector::node_at_index(*node_id, 1), + NodeInput::value(TaggedValue::ScaleType(ScaleType::Magnitude), false), + network_path, + ); } // Add the "Along Normals" parameter to the "Jitter Points" node @@ -2469,12 +2697,12 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 2), old_inputs[2].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[1].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 2), old_inputs[2].clone(), network_path); document .network_interface - .set_input(&InputConnector::node(*node_id, 3), NodeInput::value(TaggedValue::Bool(false), false), network_path); + .set_input(&InputConnector::node_at_index(*node_id, 3), NodeInput::value(TaggedValue::Bool(false), false), network_path); } // SVG-import legacy Path nodes baked their geometry at non-exposed input 0; move it to input 1 (the modern slot for VectorModification). @@ -2488,15 +2716,17 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let was_exposed = *exposed; document.network_interface.set_input( - &InputConnector::node(*node_id, 0), - NodeInput::type_default(descriptor!(graphene_std::list::List), true), + &InputConnector::node_at_index(*node_id, 0), + NodeInput::type_default(concrete!(graphene_std::vector::Vector), true), network_path, ); if !was_exposed { - document - .network_interface - .set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::VectorModification(modification), false), network_path); + document.network_interface.set_input( + &InputConnector::node_at_index(*node_id, 1), + NodeInput::value(TaggedValue::VectorModification(modification), false), + network_path, + ); } } } @@ -2506,8 +2736,8 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], let mut node_template = resolve_document_node_type(&reference)?.default_node_template(); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path); - document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[2].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), old_inputs[0].clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 1), old_inputs[2].clone(), network_path); } // `wgpu-executor` scope was removed, change to the auto injected scope node `graphene_std::platform_application_io::wgpu_executor` @@ -2516,13 +2746,43 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], && *name == "wgpu-executor" { document.network_interface.set_input( - &InputConnector::node(*node_id, i), + &InputConnector::node_at_index(*node_id, i), NodeInput::Scope("graphene_std::platform_application_io::WgpuExecutorNode".into()), network_path, ); } } + // A value input stored as a List-form TypeDefault adopts the definition's current default when the connector's declared default has since changed (e.g. the connector was ranked down to Item). + // The red-slash no-paint choice shares that stored form but is a deliberate value, not a stale disconnect default, so it is exempt. + if let Some(definition) = resolve_document_node_type(&reference) { + let definition_inputs = definition.node_template.inputs.clone(); + for (index, definition_input) in definition_inputs.iter().enumerate() { + if !matches!(definition_input, NodeInput::Value { .. }) { + continue; + } + + let stale_list_default = document + .network_interface + .input_from_connector(&InputConnector::node_at_index(*node_id, index), network_path) + .is_some_and(|stored_input| match stored_input { + NodeInput::Value { tagged_value, .. } => match &**tagged_value { + TaggedValue::TypeDefault(stored_type) if matches!(stored_type, Type::Record(_)) && !tagged_value.is_no_paint() => { + !matches!(definition_input, NodeInput::Value { tagged_value, .. } if matches!(&**tagged_value, TaggedValue::TypeDefault(definition_type) if definition_type == stored_type)) + } + _ => false, + }, + _ => false, + }); + + if stale_list_default { + document + .network_interface + .set_input(&InputConnector::node_at_index(*node_id, index), definition_input.clone(), network_path); + } + } + } + // ================================== // PUT ALL MIGRATIONS ABOVE THIS LINE // ================================== @@ -2560,19 +2820,39 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], /// definition by its old reference name, swaps it to a still-supported implementation, and preserves the user's inputs. /// After this runs, the node's reference resolves cleanly so the rest of `migrate_node` proceeds normally. fn migrate_removed_catalog_definitions(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], document: &mut DocumentMessageHandler) -> Option<()> { - // Collapse the legacy "Sample Polyline" wrapper network into the standalone `sample_polyline` proto node. - // The proto node now computes per-bezpath segment lengths inline, so the wrapper's separate `subpath_segment_lengths` - // and `Memoize` nodes are no longer needed. The 7 user-facing inputs are positionally identical between the - // old wrapper and the new proto node. - if let Some(DefinitionIdentifier::Network(name)) = document.network_interface.reference(node_id, network_path) - && name == "Sample Polyline" - && node.inputs.len() == 7 + // Collapse the legacy "Sample Points" and "Sample Polyline" wrapper networks into the standalone `sample_polyline` + // proto node, which now computes per-bezpath segment lengths inline instead of through the wrapper's helper nodes. + // The oldest documents lose their stored reference on load, so the wrapper is recognized by the nodes it encloses. + let wrapper_inputs = match &node.implementation { + DocumentNodeImplementation::Network(inner) => { + let helpers = [graphene_std::ops::passthrough::IDENTIFIER, graphene_std::memo::memoize::IDENTIFIER]; + let mut sample_nodes = 0; + let only_helpers = inner.nodes.values().all(|inner_node| match &inner_node.implementation { + DocumentNodeImplementation::ProtoNode(identifier) if *identifier == graphene_std::vector::sample_polyline::IDENTIFIER => { + sample_nodes += 1; + true + } + DocumentNodeImplementation::ProtoNode(identifier) => helpers.contains(identifier), + _ => false, + }); + (only_helpers && sample_nodes == 1).then_some(node.inputs.len()) + } + _ => None, + }; + if let Some(wrapper_inputs) = wrapper_inputs + && (wrapper_inputs == 5 || wrapper_inputs == 7) { let mut node_template = resolve_proto_node_type(graphene_std::vector::sample_polyline::IDENTIFIER)?.default_node_template(); document.network_interface.replace_implementation(node_id, network_path, &mut node_template); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; - for (index, input) in old_inputs.iter().take(7).enumerate() { - document.network_interface.set_input(&InputConnector::node(*node_id, index), input.clone(), network_path); + + // The 5-input era predates the separation/quantity choice, so its lone spacing distance becomes the separation + let upgraded_inputs: Vec<(usize, NodeInput)> = match wrapper_inputs { + 5 => [0, 2, 4, 5, 6].into_iter().zip(old_inputs.iter().cloned()).collect(), + _ => old_inputs.iter().take(7).cloned().enumerate().collect(), + }; + for (index, input) in upgraded_inputs { + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, index), input, network_path); } } @@ -2588,7 +2868,7 @@ fn migrate_removed_catalog_definitions(node_id: &NodeId, node: &DocumentNode, ne document.network_interface.replace_implementation(node_id, network_path, &mut node_template); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; for (index, input) in old_inputs.iter().take(3).enumerate() { - document.network_interface.set_input(&InputConnector::node(*node_id, index), input.clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, index), input.clone(), network_path); } } @@ -2604,7 +2884,32 @@ fn migrate_removed_catalog_definitions(node_id: &NodeId, node: &DocumentNode, ne document.network_interface.replace_implementation(node_id, network_path, &mut node_template); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; for (index, input) in old_inputs.iter().take(2).enumerate() { - document.network_interface.set_input(&InputConnector::node(*node_id, index), input.clone(), network_path); + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, index), input.clone(), network_path); + } + } + + // The removed Attach Attribute node degrades to a passthrough of its + // content: its eager whole-list source input cannot be mechanically rewired as Write Attribute's lazy per-item value producer. + if let Some(DefinitionIdentifier::ProtoNode(identifier)) = document.network_interface.reference(node_id, network_path) + && identifier.as_str().ends_with("::AttachAttributeNode") + { + let mut node_template = resolve_proto_node_type(graphene_std::ops::passthrough::IDENTIFIER)?.default_node_template(); + document.network_interface.replace_implementation(node_id, network_path, &mut node_template); + let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; + if let Some(content) = old_inputs.first() { + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), content.clone(), network_path); + } + } + + // The Upload Texture node's old wrapper-network form maps onto its proto node form, which draws the executor from scope + if let Some(DefinitionIdentifier::Network(name)) = document.network_interface.reference(node_id, network_path) + && name == "Upload Texture" + { + let mut node_template = resolve_proto_node_type(graphene_std::platform_application_io::upload_texture::IDENTIFIER)?.default_node_template(); + document.network_interface.replace_implementation(node_id, network_path, &mut node_template); + let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?; + if let Some(content) = old_inputs.first() { + document.network_interface.set_input(&InputConnector::node_at_index(*node_id, 0), content.clone(), network_path); } } @@ -2615,6 +2920,114 @@ fn migrate_removed_catalog_definitions(node_id: &NodeId, node: &DocumentNode, ne mod tests { use super::*; + // The removed-definition blocks above abort silently via `?` if their swap target ever leaves the catalog + #[test] + fn removed_definition_swap_targets_resolve() { + assert!(resolve_proto_node_type(graphene_std::ops::passthrough::IDENTIFIER).is_some()); + assert!(resolve_proto_node_type(graphene_std::platform_application_io::upload_texture::IDENTIFIER).is_some()); + } + + // Migrating a Merge network's coercion nodes by alias would leave a reducer in the primary slot, so every alias must reset instead + #[test] + fn every_into_group_alias_resets_the_merge_definition() { + let aliases = into_group_aliases().collect::>(); + assert!(!aliases.is_empty(), "the reset is driven by these aliases, so losing them all would disable it unnoticed"); + + for alias in aliases { + assert!( + document_migration_reset_node_definition(&format!(r#""implementation":{{"ProtoNode":"{alias}"}}"#)), + "a document referencing `{alias}` should reset its layer definitions" + ); + } + } + + // The Text node produced geometry until it became a string source, so every shape it ever had must reach the + // current one and gain the converter that turns its string back into geometry + #[test] + fn every_legacy_text_shape_gains_its_geometry_converter() { + use crate::messages::portfolio::document::utility_types::network_interface::NodeTemplate; + use graphene_std::NodeParameter; + use graphene_std::text::Font; + + // Each era only appended to the one before it, so the shorter shapes are prefixes of this longest pre-alignment one + let legacy_inputs = [ + NodeInput::scope("editor-api"), + NodeInput::value(TaggedValue::String("Lorem".into()), false), + NodeInput::value(TaggedValue::Font(Font::new("Lato".to_string(), "Regular (400)".to_string())), false), + NodeInput::value(TaggedValue::F64(48.), false), + NodeInput::value(TaggedValue::F64(1.5), false), + NodeInput::value(TaggedValue::F64(2.), false), + NodeInput::value(TaggedValue::F64(0.), false), + NodeInput::value(TaggedValue::F64(0.), false), + NodeInput::value(TaggedValue::F64(10.), false), + NodeInput::value(TaggedValue::Bool(false), false), + ]; + + for shape in [4, 6, 8, 9, 10] { + let (text_id, consumer_id) = (NodeId(1), NodeId(2)); + let mut document = DocumentMessageHandler::default(); + document.network_interface.insert_node( + text_id, + NodeTemplate { + implementation: NodeTemplateImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_std::text::TextNode")), + inputs: legacy_inputs[..shape].to_vec(), + ..Default::default() + }, + &[], + ); + document.network_interface.insert_node( + consumer_id, + NodeTemplate { + inputs: vec![NodeInput::value(TaggedValue::None, false)], + ..Default::default() + }, + &[], + ); + document.network_interface.set_input(&InputConnector::node_at_index(consumer_id, 0), NodeInput::node(text_id, 0), &[]); + + document_migration_upgrades(&mut document, false); + + let network = document.network_interface.document_network(); + let text_node = network.nodes.get(&text_id).expect("the upgraded text node should keep its ID"); + assert_eq!(text_node.inputs.len(), 12, "a {shape}-input text node should reach the current shape"); + + // The converter is a new node, so it is found by identity rather than by ID + let converter = network + .nodes + .iter() + .find(|(_, node)| matches!(&node.implementation, DocumentNodeImplementation::ProtoNode(identifier) if *identifier == graphene_std::text::text_to_vector::IDENTIFIER)) + .map(|(converter_id, _)| *converter_id) + .unwrap_or_else(|| panic!("a {shape}-input text node should gain a string converter")); + assert_eq!( + network.nodes[&consumer_id].inputs.first(), + Some(&NodeInput::node(converter, 0)), + "the converter should be spliced onto the wire leaving a {shape}-input text node" + ); + + let input_value = |index: usize| text_node.inputs.get(index).and_then(|input| input.as_value()).cloned(); + assert_eq!(input_value(graphene_std::text::text::SizeInput::INDEX), Some(TaggedValue::F64(48.)), "shape {shape} lost its size"); + if shape >= 6 { + assert_eq!( + input_value(graphene_std::text::text::LineHeightInput::INDEX), + Some(TaggedValue::F64(1.5)), + "shape {shape} lost its line height" + ); + assert_eq!( + input_value(graphene_std::text::text::LetterSpacingInput::INDEX), + Some(TaggedValue::F64(2.)), + "shape {shape} lost its letter spacing" + ); + } + if shape >= 9 { + assert_eq!( + input_value(graphene_std::text::text::LetterTiltInput::INDEX), + Some(TaggedValue::F64(10.)), + "shape {shape} lost its letter tilt" + ); + } + } + } + #[test] fn the_flip_reset_markers_keep_the_historical_merge_internals_spelling() { // The node itself is removed; the marker matches its spelling in diff --git a/editor/src/messages/portfolio/portfolio_message_handler.rs b/editor/src/messages/portfolio/portfolio_message_handler.rs index 5dbd6fb55c..847662e4f0 100644 --- a/editor/src/messages/portfolio/portfolio_message_handler.rs +++ b/editor/src/messages/portfolio/portfolio_message_handler.rs @@ -5,8 +5,8 @@ use crate::application::{Editor, generate_uuid}; use crate::consts::{DEFAULT_DOCUMENT_NAME, FILE_EXTENSION, GDD_FILE_EXTENSION}; use crate::messages::animation::TimingInformation; use crate::messages::dialog::simple_dialogs; -use crate::messages::frontend::utility_types::{DocumentInfo, PersistedState}; -use crate::messages::input_mapper::utility_types::input_keyboard::Key; +use crate::messages::frontend::utility_types::{DocumentInfo, FileFilter, PersistedState}; +use crate::messages::input_mapper::utility_types::keyboard::Key; use crate::messages::input_mapper::utility_types::macros::{action_shortcut, action_shortcut_manual}; use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::portfolio::document::DocumentMessageContext; @@ -501,6 +501,10 @@ impl MessageHandler> for Portfolio responses.add(FrontendMessage::TriggerSaveFile { name: filename, folder: None, + filters: vec![FileFilter { + name: "Graphite Document".into(), + extensions: vec![FILE_EXTENSION.into()], + }], content: serde_bytes::ByteBuf::from(content), }); } else { @@ -508,6 +512,10 @@ impl MessageHandler> for Portfolio Ok(zip_bytes) => responses.add(FrontendMessage::TriggerSaveFile { name: format!("{FOLDER_NAME}.zip"), folder: None, + filters: vec![FileFilter { + name: "Zip Archive".into(), + extensions: vec!["zip".into()], + }], content: serde_bytes::ByteBuf::from(zip_bytes), }), Err(e) => { @@ -652,11 +660,28 @@ impl MessageHandler> for Portfolio } PortfolioMessage::Open => { // This portfolio message wraps the frontend message so it can be listed as an action, which isn't possible for frontend messages - responses.add(FrontendMessage::TriggerOpen); + responses.add(FrontendMessage::TriggerOpen { + filters: vec![ + FileFilter { + name: "Graphite Document".into(), + extensions: vec![FILE_EXTENSION.into(), GDD_FILE_EXTENSION.into()], + }, + FileFilter { + name: "Image".into(), + extensions: vec!["svg".into(), "png".into(), "jpg".into(), "jpeg".into(), "bmp".into(), "gif".into()], + }, + ], + }); } PortfolioMessage::Import => { // This portfolio message wraps the frontend message so it can be listed as an action, which isn't possible for frontend messages - responses.add(FrontendMessage::TriggerImport); + // TODO: Also offer the Graphite document filter once importing Graphite documents as nodes is supported + responses.add(FrontendMessage::TriggerImport { + filters: vec![FileFilter { + name: "Image".into(), + extensions: vec!["svg".into(), "png".into(), "jpg".into(), "jpeg".into(), "bmp".into(), "gif".into()], + }], + }); } PortfolioMessage::OpenFile { path, content } => { let name = path.file_stem().map(|n| n.to_string_lossy().to_string()); @@ -912,7 +937,7 @@ impl MessageHandler> for Portfolio let Some((downstream_node, input_index)) = document .network_interface .outward_wires(&[]) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::node(layer.to_node(), 0))) + .and_then(|outward_wires| outward_wires.get(&OutputConnector::primary_output(layer.to_node()))) .and_then(|outward_wires| outward_wires.first()) .and_then(|input_connector| input_connector.node_id().map(|node_id| (node_id, input_connector.input_index()))) else { diff --git a/editor/src/messages/preferences/preferences_message_handler.rs b/editor/src/messages/preferences/preferences_message_handler.rs index 82a86d0829..58bfcc5035 100644 --- a/editor/src/messages/preferences/preferences_message_handler.rs +++ b/editor/src/messages/preferences/preferences_message_handler.rs @@ -93,6 +93,7 @@ impl MessageHandler> for Prefe zoom_with_scroll: self.zoom_with_scroll, }); responses.add(FrontendMessage::UpdateUIScale { scale: self.ui_scale }); + responses.add(ToolMessage::RefreshToolShelf); } PreferencesMessage::ResetToDefaults => { responses.add(PreferencesMessage::Load { preferences: Self::default() }); diff --git a/editor/src/messages/tool/common_functionality/color_selector.rs b/editor/src/messages/tool/common_functionality/color_selector.rs index 0bd902e005..de122d107f 100644 --- a/editor/src/messages/tool/common_functionality/color_selector.rs +++ b/editor/src/messages/tool/common_functionality/color_selector.rs @@ -6,7 +6,8 @@ use crate::messages::prelude::*; use crate::messages::tool::common_functionality::graph_modification_utils; use crate::messages::tool::utility_types::DocumentToolData; use graphene_std::Color; -use graphene_std::vector::style::{FillChoice, FillChoiceUI, PaintOrder, StrokeAlign, StrokeCap, StrokeJoin}; +use graphene_std::color::SRGBA8; +use graphene_std::vector::style::{FillChoice, PaintOrder, StrokeAlign, StrokeCap, StrokeJoin}; /// Color selector widgets seen in [`LayoutTarget::ToolOptions`] bar. pub struct ToolColorOptions { @@ -85,8 +86,8 @@ impl ToolColorOptions { // In the mixed state (`fill_choice` is `None`) the dash overlay covers the swatch, so the underlying widget value just drives the picker's initial position. // `FillChoice::None` gives it a neutral starting point. let mixed_color = self.fill_choice.is_none(); - // Convert the internal linear-light `FillChoice` to the JS-boundary `FillChoiceUI` (with `SRGBA8` colors) for the widget value. - let widget_value = FillChoiceUI::from(self.fill_choice.as_ref().unwrap_or(&FillChoice::None)); + // Convert the internal linear-light `FillChoice` to the JS-boundary `FillChoice` (with `SRGBA8` colors) for the widget value. + let widget_value = FillChoice::::from(self.fill_choice.as_ref().unwrap_or(&FillChoice::None)); let mixed_enabled = self.enabled.is_none(); // In the mixed-enabled state the underlying `checked` value is hidden behind the indeterminate dash. // The frontend's click handler sends `true` when the user resolves the mixed state by clicking. @@ -124,6 +125,9 @@ pub struct DrawingToolState { pub miter_limit: Option, /// Paint order from the selection. `None` = mixed. pub paint_order: Option, + /// Whether any selected layer has a lone adjacent Fill/Stroke pair for the paint order to swap. + /// Stays true with an empty selection, where the radio still sets the default for new shapes. + pub paint_order_applicable: bool, /// Dash lengths from the selection. `None` = mixed. pub dash_lengths: Option>, /// Dash offset from the selection. `None` = mixed. @@ -149,6 +153,7 @@ impl DrawingToolState { stroke_join: Some(StrokeJoin::default()), miter_limit: Some(4.), paint_order: Some(PaintOrder::default()), + paint_order_applicable: true, dash_lengths: Some(Vec::new()), dash_offset: Some(0.), last_synced_selection: Vec::new(), @@ -182,13 +187,21 @@ impl DrawingToolState { cap: self.stroke_cap.unwrap_or_default(), join: self.stroke_join.unwrap_or_default(), join_miter_limit: self.miter_limit.unwrap_or(4.), - paint_order: self.paint_order.unwrap_or_default(), dash_lengths: self.effective_dash_lengths(), dash_offset: self.dash_offset.unwrap_or(0.), transform: glam::DAffine2::IDENTITY, }; responses.add(GraphOperationMessage::StrokeSet { layer, color, stroke }); } + + /// Queues the paint order rewrite for a freshly created `layer`. The order is the relative position of the + /// Stroke and Fill nodes in the chain, so this must run after both the stroke and fill have been applied. + pub fn apply_stroke_order_to_new_layer(&self, layer: LayerNodeIdentifier, responses: &mut VecDeque) { + let paint_order = self.paint_order.unwrap_or_default(); + if paint_order != PaintOrder::default() { + responses.add(GraphOperationMessage::StrokeOrderSet { layer, paint_order }); + } + } } /// Builds a `FillChoice::Solid` from a color. @@ -303,14 +316,23 @@ pub fn sync_drawing_state(drawing: &mut DrawingToolState, natural_fill_enabled: /// Reads the stroke proto-node inputs (align, cap, join, miter limit, paint order, dash lengths, dash offset) across the selection and updates /// the matching fields on `drawing`. Each field becomes `None` (mixed) when selected strokes disagree. With no selection, fields are left as-is. fn sync_stroke_options(drawing: &mut DrawingToolState, document: &DocumentMessageHandler) -> bool { - let strokes: Vec<_> = document - .network_interface - .selected_nodes() - .selected_layers_except_artboards(&document.network_interface) + let layers = graph_modification_utils::paintable_selected_layers(document); + + // The order radio only swaps a layer's lone adjacent Fill/Stroke pair, so it grays out when no selected + // layer has one; with nothing selected it still sets the default order for new shapes + let paint_order_applicable = layers.is_empty() || layers.iter().any(|&layer| graph_modification_utils::stroke_paint_order_applicable(layer, &document.network_interface)); + let mut applicability_changed = false; + if drawing.paint_order_applicable != paint_order_applicable { + drawing.paint_order_applicable = paint_order_applicable; + applicability_changed = true; + } + + let strokes: Vec<_> = layers + .into_iter() .filter_map(|layer| graph_modification_utils::get_stroke_options(layer, &document.network_interface)) .collect(); if strokes.is_empty() { - return false; + return applicability_changed; } fn unanimous(values: impl IntoIterator) -> Option { @@ -327,7 +349,7 @@ fn sync_stroke_options(drawing: &mut DrawingToolState, document: &DocumentMessag let new_dash_lengths = unanimous(strokes.iter().map(|s| &s.dash_lengths)).cloned(); let new_dash_offset = unanimous(strokes.iter().map(|s| s.dash_offset)); - let mut changed = false; + let mut changed = applicability_changed; if drawing.stroke_align != new_align { drawing.stroke_align = new_align; @@ -390,14 +412,9 @@ pub fn sync_fill_only(fill: &mut ToolColorOptions, natural_fill_enabled: bool, f } } -/// True if at least one (non-artboard) layer is currently selected. -pub fn has_selection(document: &DocumentMessageHandler) -> bool { - document - .network_interface - .selected_nodes() - .selected_layers_except_artboards(&document.network_interface) - .next() - .is_some() +/// True if at least one selected layer can take paint, making the swatches edit the selection instead of the tool's own colors. +pub fn has_paintable_selection(document: &DocumentMessageHandler) -> bool { + !graph_modification_utils::paintable_selected_layers(document).is_empty() } /// Applies a user-picked fill (gradient or solid). With a selection, writes to the layers; with none, pushes a solid to the swap-routed working color slot. @@ -410,7 +427,7 @@ pub fn apply_fill_only_color_pick(fill: &mut ToolColorOptions, fill_choice: Fill fill.fill_choice = Some(fill_choice.clone()); fill.enabled = Some(true); fill.tracks_working_color = false; - if has_selection(document) { + if has_paintable_selection(document) { if document.network_interface.transaction_status() == TransactionStatus::Finished { responses.add(DocumentMessage::StartTransaction); } @@ -425,7 +442,7 @@ pub fn apply_stroke_color_pick(drawing: &mut DrawingToolState, color: Option) { fill.enabled = Some(enabled); - if has_selection(document) { + if has_paintable_selection(document) { responses.add(DocumentMessage::AddTransaction); } if enabled { @@ -470,7 +487,7 @@ pub fn apply_fill_only_enabled(fill: &mut ToolColorOptions, enabled: bool, worki /// Toggles the stroke checkbox: mirrors [`apply_fill_enabled`]. pub fn apply_stroke_enabled(drawing: &mut DrawingToolState, enabled: bool, global: &DocumentToolData, document: &DocumentMessageHandler, responses: &mut VecDeque) { drawing.stroke.enabled = Some(enabled); - if has_selection(document) { + if has_paintable_selection(document) { responses.add(DocumentMessage::AddTransaction); } if enabled { @@ -492,7 +509,7 @@ pub fn apply_stroke_enabled(drawing: &mut DrawingToolState, enabled: bool, globa /// Applies a user-edited stroke weight to the selection, also persisting it as the no-selection default. pub fn apply_line_weight(drawing: &mut DrawingToolState, line_weight: f64, document: &DocumentMessageHandler, responses: &mut VecDeque) { drawing.line_weight = Some(line_weight); - if !has_selection(document) { + if !has_paintable_selection(document) { drawing.default_line_weight = line_weight; } graph_modification_utils::set_stroke_weight_for_selected_layers(line_weight, document, responses); @@ -506,7 +523,7 @@ pub fn apply_working_colors(drawing: &mut DrawingToolState, global: &DocumentToo /// Refreshes a single swatch from the given working color, subject to the rules in [`apply_working_colors`]. pub fn refresh_slot_working_color(slot: &mut ToolColorOptions, working_color: Color, document: &DocumentMessageHandler) { - if slot.fill_choice.is_some() && (!has_selection(document) || slot.tracks_working_color) { + if slot.fill_choice.is_some() && (!has_paintable_selection(document) || slot.tracks_working_color) { slot.fill_choice = Some(solid(working_color)); } } @@ -523,7 +540,7 @@ pub fn reset_colors_on_deactivation(drawing: &mut DrawingToolState, global: &Doc pub fn swap_fill_and_stroke(drawing: &mut DrawingToolState, document: &DocumentMessageHandler, responses: &mut VecDeque) { drawing.colors_swapped = !drawing.colors_swapped; - if has_selection(document) { + if has_paintable_selection(document) { responses.add(DocumentMessage::AddTransaction); } @@ -538,7 +555,7 @@ pub fn swap_fill_and_stroke(drawing: &mut DrawingToolState, document: &DocumentM drawing.fill.tracks_working_color = new_fill_tracks; drawing.stroke.tracks_working_color = new_stroke_tracks; - if has_selection(document) { + if has_paintable_selection(document) { // Apply to layers only when we have a concrete value (`None` means mixed, no single value to broadcast). if drawing.fill.is_active() && let Some(choice) = new_fill @@ -578,7 +595,7 @@ pub enum WeightSyncOutcome { /// Inspects the selection and returns how the weight widget should update. pub fn compute_weight_sync(document: &DocumentMessageHandler) -> WeightSyncOutcome { - let layers: Vec<_> = document.network_interface.selected_nodes().selected_layers_except_artboards(&document.network_interface).collect(); + let layers = graph_modification_utils::paintable_selected_layers(document); if layers.is_empty() { return WeightSyncOutcome::NoSelection; diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/circle_arc_radius_handle.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/circle_arc_radius_handle.rs index 6152a6a5dd..837a1100aa 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/circle_arc_radius_handle.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/circle_arc_radius_handle.rs @@ -11,6 +11,7 @@ use crate::messages::tool::common_functionality::shapes::shape_utility::{extract use glam::{DAffine2, DVec2}; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::ParameterRef; use std::collections::VecDeque; use std::f64::consts::FRAC_PI_2; @@ -147,7 +148,13 @@ impl RadiusHandle { pub fn update_inner_radius(&mut self, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, responses: &mut VecDeque, drag_start: DVec2) { let Some(layer) = self.layer else { return }; - let Some(node_id) = graph_modification_utils::get_circle_id(layer, &document.network_interface).or(get_arc_id(layer, &document.network_interface)) else { + + // This gizmo serves both Circle and Arc layers, so resolve which node is present to know whose radius parameter to write + let (node_id, radius_parameter) = if let Some(node_id) = graph_modification_utils::get_circle_id(layer, &document.network_interface) { + (node_id, ParameterRef::from(graphene_std::vector::generator_nodes::circle::RadiusInput)) + } else if let Some(node_id) = get_arc_id(layer, &document.network_interface) { + (node_id, ParameterRef::from(graphene_std::vector::generator_nodes::arc::RadiusInput)) + } else { return; }; let Some(current_radius) = extract_circle_radius(layer, document).or(extract_arc_parameters(Some(layer), document).map(|(r, _, _, _)| r)) else { @@ -165,7 +172,7 @@ impl RadiusHandle { self.previous_mouse_position = input.mouse.position; responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 1), + input_connector: InputConnector::node(node_id, radius_parameter), input: NodeInput::value(TaggedValue::F64(current_radius + net_delta), false), }); responses.add(NodeGraphMessage::RunDocumentGraph); diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/grid_rows_columns_gizmo.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/grid_rows_columns_gizmo.rs index 308dbbdb48..a5b2a39712 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/grid_rows_columns_gizmo.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/grid_rows_columns_gizmo.rs @@ -13,7 +13,7 @@ use crate::messages::tool::common_functionality::shapes::shape_utility::extract_ use glam::{DAffine2, DVec2}; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; -use graphene_std::NodeInputDecleration; +use graphene_std::ParameterRef; use graphene_std::vector::misc::{GridType, dvec2_to_point, get_line_endpoints}; use kurbo::{Line, ParamCurveNearest, Rect}; use std::collections::VecDeque; @@ -123,7 +123,7 @@ impl RowColumnGizmo { let transform = self.transform_grid(dimensions_delta, self.spacing, grid_type, angles, viewport); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, self.gizmo_type.index()), + input_connector: InputConnector::node(node_id, self.gizmo_type.parameter()), input: NodeInput::value(TaggedValue::U32((self.initial_dimension() as i32 + dimensions_to_add).max(1) as u32), false), }); @@ -411,13 +411,13 @@ impl RowColumnGizmoType { } } - fn index(&self) -> usize { + fn parameter(&self) -> ParameterRef { use graphene_std::vector::generator_nodes::grid::*; match self { - RowColumnGizmoType::Top | RowColumnGizmoType::Bottom => RowsInput::INDEX, - RowColumnGizmoType::Left | RowColumnGizmoType::Right => ColumnsInput::INDEX, - RowColumnGizmoType::None => panic!("RowColumnGizmoType::None does not have a mouse_icon"), + RowColumnGizmoType::Top | RowColumnGizmoType::Bottom => RowsInput.into(), + RowColumnGizmoType::Left | RowColumnGizmoType::Right => ColumnsInput.into(), + RowColumnGizmoType::None => panic!("RowColumnGizmoType::None does not reference a grid input"), } } diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs index c6fef1fbda..1badf26484 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs @@ -13,6 +13,7 @@ use crate::messages::tool::common_functionality::shapes::shape_utility::{extract use glam::{DAffine2, DVec2}; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::ParameterRef; use std::collections::VecDeque; use std::f64::consts::TAU; @@ -194,14 +195,20 @@ impl NumberOfPointsDial { let net_delta = (delta.length() / 25.).round() * sign; let Some(layer) = self.layer else { return }; - let Some(node_id) = graph_modification_utils::get_star_id(layer, &document.network_interface).or(graph_modification_utils::get_polygon_id(layer, &document.network_interface)) else { + + // This dial serves both Star and Polygon layers, so resolve which node is present to know whose sides parameter to write + let (node_id, sides_parameter) = if let Some(node_id) = graph_modification_utils::get_star_id(layer, &document.network_interface) { + (node_id, ParameterRef::from(graphene_std::vector::generator_nodes::star::SidesInput)) + } else if let Some(node_id) = graph_modification_utils::get_polygon_id(layer, &document.network_interface) { + (node_id, ParameterRef::from(graphene_std::vector::generator_nodes::regular_polygon::SidesInput)) + } else { return; }; let new_point_count = ((self.initial_points as i32) + (net_delta as i32)).max(3); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 1), + input_connector: InputConnector::node(node_id, sides_parameter), input: NodeInput::value(TaggedValue::U32(new_point_count as u32), false), }); responses.add(NodeGraphMessage::RunDocumentGraph); diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/point_radius_handle.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/point_radius_handle.rs index d72414f48a..23b399f1b9 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/point_radius_handle.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/point_radius_handle.rs @@ -8,12 +8,14 @@ use crate::messages::portfolio::document::{overlays::utility_types::OverlayConte use crate::messages::prelude::FrontendMessage; use crate::messages::prelude::Responses; use crate::messages::prelude::{DocumentMessageHandler, InputPreprocessorMessageHandler, NodeGraphMessage}; -use crate::messages::tool::common_functionality::graph_modification_utils::{self, NodeGraphLayer}; +use crate::messages::tool::common_functionality::graph_modification_utils::NodeGraphLayer; use crate::messages::tool::common_functionality::shapes::shape_utility::{draw_snapping_ticks, extract_polygon_parameters, polygon_outline, polygon_vertex_position, star_outline}; use crate::messages::tool::common_functionality::shapes::shape_utility::{extract_star_parameters, star_vertex_position}; use glam::DVec2; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::ParameterRef; +use graphene_std::vector::generator_nodes::{regular_polygon, star}; use std::collections::VecDeque; use std::f64::consts::{FRAC_1_SQRT_2, FRAC_PI_4, PI, SQRT_2}; @@ -30,7 +32,8 @@ pub enum PointRadiusHandleState { pub struct PointRadiusHandle { pub layer: Option, point: u32, - radius_index: usize, + /// The radius parameter the hovered or dragged handle writes to: a star's first or second radius, or a polygon's radius. + radius_parameter: Option, snap_radii: Vec, initial_radius: f64, handle_state: PointRadiusHandleState, @@ -63,7 +66,11 @@ impl PointRadiusHandle { let viewport = document.metadata().transform_to_viewport(layer); for i in 0..2 * sides { - let (radius, radius_index) = if i % 2 == 0 { (radius1, 2) } else { (radius2, 3) }; + let (radius, radius_parameter) = if i % 2 == 0 { + (radius1, ParameterRef::from(star::Radius1Input)) + } else { + (radius2, ParameterRef::from(star::Radius2Input)) + }; let point = star_vertex_position(viewport, i as i32, sides, radius1, radius2); let center = viewport.transform_point2(DVec2::ZERO); @@ -73,10 +80,10 @@ impl PointRadiusHandle { } if point.distance(mouse_position) < 5. { - self.radius_index = radius_index; + self.snap_radii = Self::calculate_snap_radii(document, layer, &radius_parameter); + self.radius_parameter = Some(radius_parameter); self.layer = Some(layer); self.point = i; - self.snap_radii = Self::calculate_snap_radii(document, layer, radius_index); self.initial_radius = radius; responses.add(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }); self.update_state(PointRadiusHandleState::Hover); @@ -100,7 +107,7 @@ impl PointRadiusHandle { } if point.distance(mouse_position) < 5. { - self.radius_index = 2; + self.radius_parameter = Some(regular_polygon::RadiusInput.into()); self.layer = Some(layer); self.point = i; self.snap_radii.clear(); @@ -329,21 +336,20 @@ impl PointRadiusHandle { } } - fn calculate_snap_radii(document: &DocumentMessageHandler, layer: LayerNodeIdentifier, radius_index: usize) -> Vec { + fn calculate_snap_radii(document: &DocumentMessageHandler, layer: LayerNodeIdentifier, radius_parameter: &ParameterRef) -> Vec { let mut snap_radii = Vec::new(); - let Some(node_inputs) = NodeGraphLayer::new(layer, &document.network_interface).find_node_inputs(&DefinitionIdentifier::ProtoNode(graphene_std::vector::generator_nodes::star::IDENTIFIER)) - else { + let Some(parameters) = NodeGraphLayer::new(layer, &document.network_interface).find_node_parameters(star::IDENTIFIER) else { return snap_radii; }; - let (Some(&TaggedValue::F64(radius_1)), Some(&TaggedValue::F64(radius_2))) = (node_inputs[2].as_value(), node_inputs[3].as_value()) else { + let (Some(&TaggedValue::F64(radius_1)), Some(&TaggedValue::F64(radius_2))) = (parameters.value(star::Radius1Input), parameters.value(star::Radius2Input)) else { return snap_radii; }; - let other_radius = if radius_index == 3 { radius_1 } else { radius_2 }; + let other_radius = if *radius_parameter == ParameterRef::from(star::Radius2Input) { radius_1 } else { radius_2 }; - let Some(&TaggedValue::U32(sides)) = node_inputs[1].as_value() else { + let Some(&TaggedValue::U32(sides)) = parameters.value(star::SidesInput) else { return snap_radii; }; @@ -415,14 +421,15 @@ impl PointRadiusHandle { pub fn update_inner_radius(&mut self, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, responses: &mut VecDeque, drag_start: DVec2) { let Some(layer) = self.layer else { return }; + let Some(radius_parameter) = self.radius_parameter.clone() else { return }; - let Some(node_id) = graph_modification_utils::get_star_id(layer, &document.network_interface).or(graph_modification_utils::get_polygon_id(layer, &document.network_interface)) else { + // The stored parameter names the node it belongs to (Star or Polygon), so locate that same node on the layer + let Some(node_id) = NodeGraphLayer::new(layer, &document.network_interface).upstream_node_id_from_name(&DefinitionIdentifier::ProtoNode(radius_parameter.node_identifier.clone())) else { return; }; let viewport_transform = document.network_interface.document_metadata().transform_to_viewport(layer); let center = viewport_transform.transform_point2(DVec2::ZERO); - let radius_index = self.radius_index; let original_radius = self.initial_radius; @@ -436,7 +443,7 @@ impl PointRadiusHandle { self.update_state(PointRadiusHandleState::Dragging); - self.check_if_radius_flipped(original_radius, new_radius, document, layer, radius_index); + self.check_if_radius_flipped(original_radius, new_radius, document, layer, &radius_parameter); if let Some((index, snapped_delta)) = self.check_snapping(new_radius, original_radius) { net_delta = snapped_delta; @@ -444,29 +451,28 @@ impl PointRadiusHandle { } responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, radius_index), + input_connector: InputConnector::node(node_id, radius_parameter), input: NodeInput::value(TaggedValue::F64(original_radius + net_delta), false), }); responses.add(NodeGraphMessage::RunDocumentGraph); } - fn check_if_radius_flipped(&mut self, original_radius: f64, new_radius: f64, document: &DocumentMessageHandler, layer: LayerNodeIdentifier, radius_index: usize) { - let Some(node_inputs) = NodeGraphLayer::new(layer, &document.network_interface).find_node_inputs(&DefinitionIdentifier::ProtoNode(graphene_std::vector::generator_nodes::star::IDENTIFIER)) - else { + fn check_if_radius_flipped(&mut self, original_radius: f64, new_radius: f64, document: &DocumentMessageHandler, layer: LayerNodeIdentifier, radius_parameter: &ParameterRef) { + let Some(parameters) = NodeGraphLayer::new(layer, &document.network_interface).find_node_parameters(star::IDENTIFIER) else { return; }; - let (Some(&TaggedValue::F64(radius_1)), Some(&TaggedValue::F64(radius_2))) = (node_inputs[2].as_value(), node_inputs[3].as_value()) else { + let (Some(&TaggedValue::F64(radius_1)), Some(&TaggedValue::F64(radius_2))) = (parameters.value(star::Radius1Input), parameters.value(star::Radius2Input)) else { return; }; - let other_radius = if radius_index == 3 { radius_1 } else { radius_2 }; + let other_radius = if *radius_parameter == ParameterRef::from(star::Radius2Input) { radius_1 } else { radius_2 }; let flipped = (other_radius.is_sign_positive() && original_radius.is_sign_negative() && new_radius.is_sign_positive()) || (other_radius.is_sign_negative() && original_radius.is_sign_positive() && new_radius.is_sign_negative()); if flipped { - self.snap_radii = Self::calculate_snap_radii(document, layer, radius_index); + self.snap_radii = Self::calculate_snap_radii(document, layer, radius_parameter); } } } diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/spiral_turns_handle.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/spiral_turns_handle.rs index 95825c2691..9b297339ed 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/spiral_turns_handle.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/spiral_turns_handle.rs @@ -12,8 +12,7 @@ use crate::messages::tool::common_functionality::shapes::spiral_shape::calculate use glam::DVec2; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; -use graphene_std::NodeInputDecleration; -use graphene_std::subpath::{calculate_growth_factor, spiral_point}; +use graphene_std::vector::algorithms::shapes::{calculate_growth_factor, spiral_point}; use graphene_std::vector::misc::SpiralType; use std::collections::VecDeque; use std::f64::consts::TAU; @@ -190,15 +189,15 @@ impl SpiralTurns { let new_outer_radius = (self.initial_outer_radius + outer_radius_change * sign).max(0.1); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, StartAngleInput::INDEX), + input_connector: InputConnector::node(node_id, StartAngleInput), input: NodeInput::value(TaggedValue::F64(self.initial_start_angle + total_delta), false), }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, TurnsInput::INDEX), + input_connector: InputConnector::node(node_id, TurnsInput), input: NodeInput::value(TaggedValue::F64(new_turns), false), }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, OuterRadiusInput::INDEX), + input_connector: InputConnector::node(node_id, OuterRadiusInput), input: NodeInput::value(TaggedValue::F64(new_outer_radius), false), }); } @@ -207,11 +206,11 @@ impl SpiralTurns { let new_outer_radius = (self.initial_outer_radius + outer_radius_change).max(0.1); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, TurnsInput::INDEX), + input_connector: InputConnector::node(node_id, TurnsInput), input: NodeInput::value(TaggedValue::F64(new_turns), false), }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, OuterRadiusInput::INDEX), + input_connector: InputConnector::node(node_id, OuterRadiusInput), input: NodeInput::value(TaggedValue::F64(new_outer_radius), false), }); } diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/sweep_angle_gizmo.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/sweep_angle_gizmo.rs index efa4b18351..c65b912aba 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/sweep_angle_gizmo.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/sweep_angle_gizmo.rs @@ -332,11 +332,11 @@ impl SweepAngleGizmo { self.snap_angles = Self::calculate_snap_angles(); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 2), + input_connector: InputConnector::node(node_id, graphene_std::vector::generator_nodes::arc::StartAngleInput), input: NodeInput::value(TaggedValue::F64(start_angle), false), }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 3), + input_connector: InputConnector::node(node_id, graphene_std::vector::generator_nodes::arc::SweepAngleInput), input: NodeInput::value(TaggedValue::F64(sweep_angle), false), }); diff --git a/editor/src/messages/tool/common_functionality/graph_modification_utils.rs b/editor/src/messages/tool/common_functionality/graph_modification_utils.rs index c1813bb6e3..e8f49b0083 100644 --- a/editor/src/messages/tool/common_functionality/graph_modification_utils.rs +++ b/editor/src/messages/tool/common_functionality/graph_modification_utils.rs @@ -1,21 +1,20 @@ use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn; use crate::messages::portfolio::document::node_graph::document_node_definitions::{self, DefinitionIdentifier}; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; -use crate::messages::portfolio::document::utility_types::network_interface::{FlowType, InputConnector, NodeNetworkInterface, NodeTemplate}; +use crate::messages::portfolio::document::utility_types::network_interface::{FlowType, InputConnector, NodeNetworkInterface, NodeTemplate, OutputConnector}; use crate::messages::prelude::*; use glam::{DAffine2, DVec2}; +use graph_craft::ProtoNodeIdentifier; use graph_craft::document::value::TaggedValue; use graph_craft::document::{DocumentNode, NodeId, NodeInput}; -use graph_craft::{ProtoNodeIdentifier, concrete}; use graphene_std::Color; -use graphene_std::NodeInputDecleration; use graphene_std::raster::BlendMode; -use graphene_std::raster_types::{CPU, GPU, Image, Raster}; -use graphene_std::subpath::Subpath; +use graphene_std::raster_types::Image; use graphene_std::text::{Font, TypesettingConfig}; use graphene_std::vector::misc::ManipulatorPointId; use graphene_std::vector::style::{FillChoice, PaintOrder, StrokeAlign, StrokeCap, StrokeJoin, initial_gradient_transform_for_bounding_box}; -use graphene_std::vector::{GradientSpreadMethod, GradientStops, GradientType, PointId, SegmentId, VectorModificationType}; +use graphene_std::vector::{Gradient, GradientForm, GradientRamp, GradientSettings, PointId, SegmentId, VectorModificationType}; +use graphene_std::{NodeParameter, ParameterRef}; use std::collections::VecDeque; /// Returns the ID of the first Spline node in the horizontal flow which is not followed by a `Path` node, or `None` if none exists. @@ -92,29 +91,29 @@ pub fn merge_layers(document: &DocumentMessageHandler, first_layer: LayerNodeIde parent: first_layer, }); responses.add(NodeGraphMessage::ConnectUpstreamOutputToInput { - downstream_input: InputConnector::node(second_layer.to_node(), 1), - input_connector: InputConnector::node(merge_node_id, 1), + downstream_input: InputConnector::layer_secondary_input(second_layer.to_node()), + input_connector: InputConnector::layer_secondary_input(merge_node_id), }); responses.add(NodeGraphMessage::DeleteNodes { node_ids: vec![second_layer.to_node()], delete_children: false, }); - // Add a Flatten Path node after the merge - let flatten_node_id = NodeId::new(); - let flatten_node = document_node_definitions::resolve_proto_node_type(graphene_std::vector::flatten_path::IDENTIFIER) - .expect("Failed to create flatten node") + // Add a Combine Paths node after the merge + let combine_paths_node_id = NodeId::new(); + let combine_paths_node = document_node_definitions::resolve_proto_node_type(graphene_std::vector::combine_paths::IDENTIFIER) + .expect("Failed to create combine paths node") .default_node_template(); responses.add(NodeGraphMessage::InsertNode { - node_id: flatten_node_id, - node_template: Box::new(flatten_node), + node_id: combine_paths_node_id, + node_template: Box::new(combine_paths_node), }); responses.add(NodeGraphMessage::MoveNodeToChainStart { - node_id: flatten_node_id, + node_id: combine_paths_node_id, parent: first_layer, }); - // Add a path node after the flatten node + // Add a path node after the combine paths node let path_node_id = NodeId::new(); let path_node = document_node_definitions::resolve_network_node_type("Path") .expect("Failed to create path node") @@ -169,7 +168,7 @@ pub fn merge_points(document: &DocumentMessageHandler, layer: LayerNodeIdentifie let transform = document.metadata().transform_to_document(layer); let Some(vector) = document.network_interface.compute_modified_vector(layer) else { return }; - let segment = vector.segment_bezier_iter().find(|(_, _, start, end)| *end == second_endpont || *start == second_endpont); + let segment = vector.segment_iter().find(|(_, _, start, end)| *end == second_endpont || *start == second_endpont); let Some((segment, _, mut segment_start_point, mut segment_end_point)) = segment else { log::error!("Could not get the segment for second_endpoint."); return; @@ -207,15 +206,6 @@ pub fn merge_points(document: &DocumentMessageHandler, layer: LayerNodeIdentifie responses.add(GraphOperationMessage::Vector { layer, modification_type }); } -/// Create a new vector layer. -pub fn new_vector_layer(subpaths: Vec>, id: NodeId, parent: LayerNodeIdentifier, responses: &mut VecDeque) -> LayerNodeIdentifier { - let insert_index = 0; - responses.add(GraphOperationMessage::NewVectorLayer { id, subpaths, parent, insert_index }); - responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![id] }); - - LayerNodeIdentifier::new_unchecked(id) -} - /// Create a new bitmap layer. pub fn new_image_layer(image: Image, id: NodeId, parent: LayerNodeIdentifier, responses: &mut VecDeque) -> LayerNodeIdentifier { let insert_index = 0; @@ -250,9 +240,7 @@ pub fn new_custom(id: NodeId, nodes: Vec<(NodeId, NodeTemplate)>, parent: LayerN pub fn get_origin(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { use graphene_std::transform_nodes::transform::*; - if let TaggedValue::DVec2(origin) = - NodeGraphLayer::new(layer, network_interface).find_input(&DefinitionIdentifier::ProtoNode(graphene_std::transform_nodes::transform::IDENTIFIER), TranslationInput::INDEX)? - { + if let TaggedValue::DVec2(origin) = NodeGraphLayer::new(layer, network_interface).parameter_value(TranslationInput)? { Some(*origin) } else { None @@ -274,64 +262,196 @@ pub fn get_viewport_center(layer: LayerNodeIdentifier, network_interface: &NodeN pub fn get_fill_node_id_with_direct_fill_input(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { let fill_node_id = NodeGraphLayer::new(layer, network_interface).upstream_node_id_from_name(&DefinitionIdentifier::ProtoNode(graphene_std::vector::fill::IDENTIFIER))?; let fill_node = network_interface.document_network().nodes.get(&fill_node_id)?; - matches!(fill_node.inputs.get(graphene_std::vector::fill::FillInput::INDEX)?, NodeInput::Value { .. }).then_some(fill_node_id) + matches!(fill_node.input(graphene_std::vector::fill::PaintInput)?, NodeInput::Value { .. }).then_some(fill_node_id) } /// Determine the input connector where the gradient chain enters the layer. /// Returns Fill's fill input if the layer has a "Fill" node, otherwise returns the layer's content input. pub fn gradient_chain_target_input(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> InputConnector { if let Some(fill_node_id) = NodeGraphLayer::new(layer, network_interface).upstream_node_id_from_name(&DefinitionIdentifier::ProtoNode(graphene_std::vector::fill::IDENTIFIER)) { - InputConnector::node(fill_node_id, graphene_std::vector::fill::FillInput::INDEX) + InputConnector::node(fill_node_id, graphene_std::vector::fill::PaintInput) } else { - InputConnector::node(layer.to_node(), 1) + InputConnector::layer_secondary_input(layer.to_node()) } } -/// Try to find a "Gradient Value" node that is connected to a "Fill" node, or to a layer directly. -pub fn get_upstream_gradient_value_node_id(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { +/// Try to find the paint value node feeding a 'Fill' node, or a layer directly. +fn get_upstream_paint_value_node_id(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface, identifier: ProtoNodeIdentifier) -> Option { let target_input = gradient_chain_target_input(layer, network_interface); let walk_from = network_interface.upstream_output_connector(&target_input, &[])?.node_id()?; + let reference = DefinitionIdentifier::ProtoNode(identifier); network_interface .upstream_flow_back_from_nodes(vec![walk_from], &[], FlowType::HorizontalFlow) .take_while(|node_id| !network_interface.is_layer(node_id, &[])) - .find(|node_id| network_interface.reference(node_id, &[]).as_ref() == Some(&DefinitionIdentifier::ProtoNode(graphene_std::math_nodes::gradient_value::IDENTIFIER))) + .find(|node_id| network_interface.reference(node_id, &[]).as_ref() == Some(&reference)) +} + +/// Try to find a 'Gradient Value' node that is connected to a 'Fill' node, or to a layer directly. +pub fn get_upstream_gradient_value_node_id(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { + get_upstream_paint_value_node_id(layer, network_interface, graphene_std::math_nodes::gradient_value::IDENTIFIER) +} + +/// A whole-expanse paint to clear off a 'Merge' layer so a paint tool can start its own chain there. +pub struct ReplaceablePaintChain { + /// Where the fresh paint attaches, which is also the link severed to reach it. + pub attachment_input: InputConnector, + /// The paint's nodes, ordered downstream to upstream, empty when there is nothing to clear away. + pub nodes: Vec, +} + +/// The whole-expanse paint on a 'Merge' layer that a paint tool may take over, or `None` +/// when the layer isn't one or its chain holds anything the tools didn't put there. +/// The walk stops at the first node the rest of the graph also draws from, since repainting through it would change +/// what those other consumers see, and it passes through 'Transform' nodes so a swap keeps the layer's placement. +pub fn replaceable_paint_chain(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { + if !network_interface.is_merge(&layer.to_node(), &[]) { + return None; + } + + // A generator discards its primary input, so the chain ends at whichever one is reached + let generators = [graphene_std::math_nodes::color_value::IDENTIFIER, graphene_std::math_nodes::gradient_value::IDENTIFIER]; + let setters = [ + graphene_std::math_nodes::gradient_form::IDENTIFIER, + graphene_std::math_nodes::gradient_spread::IDENTIFIER, + graphene_std::math_nodes::gradient_positions::IDENTIFIER, + graphene_std::math_nodes::gradient_midpoints::IDENTIFIER, + ]; + + let mut nodes = Vec::new(); + let mut input = InputConnector::layer_secondary_input(layer.to_node()); + // Trails the walk over the 'Transform' nodes that survive, then holds still once the paint to clear away begins + let mut attachment_input = input; + + while let Some(upstream) = network_interface.upstream_output_connector(&input, &[]) { + let node_id = upstream.node_id()?; + + // Arriving here means this layer consumes the node, so a further consumer makes it shared + let shared = network_interface + .with_outward_wires(&[], |outward_wires| outward_wires.get(&OutputConnector::primary_output(node_id)).is_some_and(|inputs| inputs.len() > 1)) + .unwrap_or(true); + if shared { + break; + } + + let Some(DefinitionIdentifier::ProtoNode(identifier)) = network_interface.reference(&node_id, &[]) else { + return None; + }; + + if identifier == graphene_std::transform_nodes::transform::IDENTIFIER { + input = InputConnector::primary_input(node_id); + if nodes.is_empty() { + attachment_input = input; + } + continue; + } + + let generator = generators.contains(&identifier); + if !generator && !setters.contains(&identifier) { + return None; + } + + nodes.push(node_id); + + if generator { + break; + } + + input = InputConnector::primary_input(node_id); + } + + Some(ReplaceablePaintChain { attachment_input, nodes }) +} + +/// Try to find a 'Color Value' node that is connected to a 'Fill' node, or to a layer directly. +pub fn get_upstream_color_value_node_id(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { + get_upstream_paint_value_node_id(layer, network_interface, graphene_std::math_nodes::color_value::IDENTIFIER) } /// Get the node connected to Fill's fill input, if any. pub fn get_fill_input_node_id(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { let fill_node_id = NodeGraphLayer::new(layer, network_interface).upstream_node_id_from_name(&DefinitionIdentifier::ProtoNode(graphene_std::vector::fill::IDENTIFIER))?; let fill_node = network_interface.document_network().nodes.get(&fill_node_id)?; - let NodeInput::Node { node_id, .. } = fill_node.inputs.get(graphene_std::vector::fill::FillInput::INDEX)? else { + let NodeInput::Node { node_id, .. } = fill_node.input(graphene_std::vector::fill::PaintInput)? else { return None; }; Some(*node_id) } +/// The ramp held by the 'Gradient Value' node feeding a layer's chain, which carries the whole-ramp settings. +fn get_chain_source_gradient_ramp(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option<&GradientRamp> { + let gradient_value_node = network_interface.document_network().nodes.get(&get_upstream_gradient_value_node_id(layer, network_interface)?)?; + let TaggedValue::GradientRamp(ramp) = gradient_value_node.input(graphene_std::math_nodes::gradient_value::GradientInput)?.as_value()? else { + return None; + }; + Some(ramp) +} + +/// The whole-ramp settings baked into the 'Gradient Value' node feeding a layer's chain. +pub fn get_chain_source_gradient_settings(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { + Some(get_chain_source_gradient_ramp(layer, network_interface)?.into()) +} + /// Get the gradient stops of a layer, if any. -pub fn get_gradient_stops(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { +pub fn get_gradient_stops(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { // Try to find the gradient stops value that is created by a Fill node first if let Some(fill_node_id) = get_fill_node_id_with_direct_fill_input(layer, network_interface) { return network_interface .document_network() .nodes .get(&fill_node_id) - .and_then(|node| node.inputs.get(graphene_std::vector::fill::FillInput::INDEX)) + .and_then(|node| node.input(graphene_std::vector::fill::PaintInput)) .and_then(|input| input.as_value()) - .and_then(|value| if let TaggedValue::Gradient(gradient) = value { Some(gradient.clone()) } else { None }); + .and_then(|value| if let TaggedValue::GradientRamp(ramp) = value { Some(Gradient::from(ramp)) } else { None }); } let gradient_value_node = network_interface.document_network().nodes.get(&get_upstream_gradient_value_node_id(layer, network_interface)?)?; - let TaggedValue::Gradient(stops) = gradient_value_node.inputs.get(graphene_std::math_nodes::gradient_value::GradientInput::INDEX)?.as_value()? else { + let TaggedValue::GradientRamp(ramp) = gradient_value_node.input(graphene_std::math_nodes::gradient_value::GradientInput)?.as_value()? else { return None; }; - Some(stops.clone()) + let mut stops = Gradient::from(ramp); + + // The chain's stop placement comes from the closest-to-layer 'Gradient Positions'/'Gradient Midpoints' nodes, + // matching the runtime where each later node overwrites the whole attribute + let target_input = gradient_chain_target_input(layer, network_interface); + let walk_from = network_interface.upstream_output_connector(&target_input, &[])?.node_id()?; + let positions_reference = DefinitionIdentifier::ProtoNode(graphene_std::math_nodes::gradient_positions::IDENTIFIER); + let midpoints_reference = DefinitionIdentifier::ProtoNode(graphene_std::math_nodes::gradient_midpoints::IDENTIFIER); + + let (mut positions_pending, mut midpoints_pending) = (true, true); + for node_id in network_interface + .upstream_flow_back_from_nodes(vec![walk_from], &[], FlowType::HorizontalFlow) + .take_while(|node_id| !network_interface.is_layer(node_id, &[])) + { + let Some(reference) = network_interface.reference(&node_id, &[]) else { continue }; + let node = network_interface.document_network().nodes.get(&node_id); + + if positions_pending && reference == positions_reference { + positions_pending = false; + if let Some(TaggedValue::F64Array(positions)) = node + .and_then(|node| node.input(graphene_std::math_nodes::gradient_positions::PositionsInput)) + .and_then(|input| input.as_value()) + { + stops.set_positions(positions); + } + } else if midpoints_pending && reference == midpoints_reference { + midpoints_pending = false; + if let Some(TaggedValue::F64Array(midpoints)) = node + .and_then(|node| node.input(graphene_std::math_nodes::gradient_midpoints::MidpointsInput)) + .and_then(|input| input.as_value()) + { + stops.set_midpoints(midpoints); + } + } + } + + Some(stops) } -/// Compute the transform from a gradient's local space to viewport space for the given layer. For a `List` +/// Compute the transform from a gradient's local space to viewport space for the given layer. For a `List` /// layer this is the layer's incoming footprint transform; for a Fill-owned gradient value it composes the layer's viewport /// transform with the [0,1]Β² β†’ bounding-box mapping. -pub fn gradient_space_transform(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> glam::DAffine2 { +pub fn gradient_to_viewport_transform(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> glam::DAffine2 { use crate::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier; let metadata = network_interface.document_metadata(); @@ -347,6 +467,14 @@ pub fn gradient_space_transform(layer: LayerNodeIdentifier, network_interface: & metadata.transform_to_viewport(layer) } +/// Tooltip description for a "Reverse Direction" gradient button, phrased for the given Gradient Form. +pub fn reverse_direction_tooltip_description(gradient_form: GradientForm) -> &'static str { + match gradient_form { + GradientForm::Radial => "Reverse which end the gradient radiates from.", + GradientForm::Linear => "Swap the start and end points of the gradient line.", + } +} + /// True when startβ†’end (mapped through `transform` into viewport space) points predominantly rightward. For purely /// vertical lines we fall back to a stable tiebreaker on (x + y) so the choice doesn't flicker between equal alternatives. pub fn gradient_orientation_rightward(transform: glam::DAffine2) -> bool { @@ -361,11 +489,10 @@ pub fn gradient_orientation_rightward(transform: glam::DAffine2) -> bool { /// Get the current fill of a layer from the closest "Fill" node. pub fn get_fill_color(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { - let inputs = NodeGraphLayer::new(layer, network_interface).find_node_inputs(&DefinitionIdentifier::ProtoNode(graphene_std::vector::fill::IDENTIFIER))?; - let &TaggedValue::Color(color) = inputs.get(graphene_std::vector::fill::FillInput::INDEX)?.as_value()? else { + let TaggedValue::Color(color) = NodeGraphLayer::new(layer, network_interface).parameter_value(graphene_std::vector::fill::PaintInput)? else { return None; }; - color + Some(*color) } /// Get the current blend mode of a layer from the closest upstream "Blend Mode" node. @@ -471,42 +598,35 @@ pub fn get_text<'a>( fonts: &FontsMessageHandler, resources: &ResourceMessageHandler, ) -> Option<(&'a String, Font, TypesettingConfig)> { - let inputs = NodeGraphLayer::new(layer, network_interface).find_node_inputs(&DefinitionIdentifier::ProtoNode(graphene_std::text::text::IDENTIFIER))?; + use graphene_std::text::text; + let parameters = NodeGraphLayer::new(layer, network_interface).find_node_parameters(text::IDENTIFIER)?; - let Some(TaggedValue::String(text)) = inputs.get(graphene_std::text::text::TextInput::INDEX)?.as_value() else { - return None; - }; - let font = match inputs.get(graphene_std::text::text::FontInput::INDEX)?.as_value() { + let Some(TaggedValue::String(text)) = parameters.value(text::TextInput) else { return None }; + let font = match parameters.value(text::FontInput) { Some(TaggedValue::Resource(resource_id)) => fonts.id_font(resources, *resource_id).unwrap_or_default(), _ => Font::default(), }; - let Some(&TaggedValue::F64(font_size)) = inputs.get(graphene_std::text::text::SizeInput::INDEX)?.as_value() else { + let Some(&TaggedValue::F64(font_size)) = parameters.value(text::SizeInput) else { return None }; + let Some(&TaggedValue::F64(line_height_ratio)) = parameters.value(text::LineHeightInput) else { return None; }; - let Some(&TaggedValue::F64(line_height_ratio)) = inputs.get(graphene_std::text::text::LineHeightInput::INDEX)?.as_value() else { + let Some(&TaggedValue::F64(letter_spacing)) = parameters.value(text::LetterSpacingInput) else { return None; }; - let Some(&TaggedValue::F64(letter_spacing)) = inputs.get(graphene_std::text::text::LetterSpacingInput::INDEX)?.as_value() else { + let Some(&TaggedValue::Bool(has_max_width)) = parameters.value(text::HasMaxWidthInput) else { return None; }; - let Some(&TaggedValue::Bool(has_max_width)) = inputs.get(graphene_std::text::text::HasMaxWidthInput::INDEX)?.as_value() else { + let Some(&TaggedValue::F64(max_width)) = parameters.value(text::MaxWidthInput) else { return None }; + let Some(&TaggedValue::Bool(has_max_height)) = parameters.value(text::HasMaxHeightInput) else { return None; }; - let Some(&TaggedValue::F64(max_width)) = inputs.get(graphene_std::text::text::MaxWidthInput::INDEX)?.as_value() else { + let Some(&TaggedValue::F64(max_height)) = parameters.value(text::MaxHeightInput) else { return None; }; - let Some(&TaggedValue::Bool(has_max_height)) = inputs.get(graphene_std::text::text::HasMaxHeightInput::INDEX)?.as_value() else { - return None; - }; - let Some(&TaggedValue::F64(max_height)) = inputs.get(graphene_std::text::text::MaxHeightInput::INDEX)?.as_value() else { - return None; - }; - let Some(&TaggedValue::F64(letter_tilt)) = inputs.get(graphene_std::text::text::LetterTiltInput::INDEX)?.as_value() else { - return None; - }; - let Some(&TaggedValue::TextAlign(align)) = inputs.get(graphene_std::text::text::AlignInput::INDEX)?.as_value() else { + let Some(&TaggedValue::F64(letter_tilt)) = parameters.value(text::LetterTiltInput) else { return None; }; + let Some(&TaggedValue::TextAlign(align)) = parameters.value(text::AlignInput) else { return None }; let typesetting = TypesettingConfig { font_size, @@ -521,8 +641,7 @@ pub fn get_text<'a>( } pub fn get_stroke_width(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { - let weight_node_input_index = graphene_std::vector::stroke::WeightInput::INDEX; - if let TaggedValue::F64(width) = NodeGraphLayer::new(layer, network_interface).find_input(&DefinitionIdentifier::ProtoNode(graphene_std::vector::stroke::IDENTIFIER), weight_node_input_index)? { + if let TaggedValue::F64(width) = NodeGraphLayer::new(layer, network_interface).parameter_value(graphene_std::vector::stroke::WeightInput)? { Some(*width) } else { None @@ -544,36 +663,34 @@ pub struct StrokeOptionsState { /// Reads the non-color stroke option inputs from a layer's Stroke proto node. Returns `None` when the layer has no Stroke node. /// Inputs that aren't a static value (e.g. wired to another node) fall back to per-field defaults so the layer still participates in the sync. pub fn get_stroke_options(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { - let stroke = &DefinitionIdentifier::ProtoNode(graphene_std::vector::stroke::IDENTIFIER); - let layer_view = NodeGraphLayer::new(layer, network_interface); - layer_view.upstream_node_id_from_name(stroke)?; - let read = |index: usize| layer_view.find_input(stroke, index); + use graphene_std::vector::stroke; + let parameters = NodeGraphLayer::new(layer, network_interface).find_node_parameters(stroke::IDENTIFIER)?; - let align = match read(graphene_std::vector::stroke::AlignInput::INDEX) { + let align = match parameters.value(stroke::AlignInput) { Some(TaggedValue::StrokeAlign(value)) => *value, _ => StrokeAlign::default(), }; - let cap = match read(graphene_std::vector::stroke::CapInput::INDEX) { + let cap = match parameters.value(stroke::CapInput) { Some(TaggedValue::StrokeCap(value)) => *value, _ => StrokeCap::default(), }; - let join = match read(graphene_std::vector::stroke::JoinInput::INDEX) { + let join = match parameters.value(stroke::JoinInput) { Some(TaggedValue::StrokeJoin(value)) => *value, _ => StrokeJoin::default(), }; - let miter_limit = match read(graphene_std::vector::stroke::MiterLimitInput::INDEX) { + let miter_limit = match parameters.value(stroke::MiterLimitInput) { Some(TaggedValue::F64(value)) => *value, _ => 4., }; - let paint_order = match read(graphene_std::vector::stroke::PaintOrderInput::INDEX) { + let paint_order = match parameters.value(stroke::PaintOrderInput) { Some(TaggedValue::PaintOrder(value)) => *value, _ => PaintOrder::default(), }; - let dash_lengths = match read(graphene_std::vector::stroke::DashLengthsInput::INDEX) { - Some(TaggedValue::F64Array(value)) => value.clone(), + let dash_lengths = match parameters.value(stroke::DashPatternInput) { + Some(TaggedValue::DashPattern(lengths)) => lengths.clone(), _ => Vec::new(), }; - let dash_offset = match read(graphene_std::vector::stroke::DashOffsetInput::INDEX) { + let dash_offset = match parameters.value(stroke::DashOffsetInput) { Some(TaggedValue::F64(value)) => *value, _ => 0., }; @@ -594,27 +711,30 @@ pub fn get_stroke_id(layer: LayerNodeIdentifier, network_interface: &NodeNetwork NodeGraphLayer::new(layer, network_interface).upstream_node_id_from_name(&DefinitionIdentifier::ProtoNode(graphene_std::vector::stroke::IDENTIFIER)) } -/// Stroke weight of the first selected non-artboard layer, used by tool control bars to mirror the selection's weight. -/// Returns `Some(0.)` if the layer has no Stroke node so the widget reads "0 px", and `None` only when no layer is selected. -pub fn first_selected_stroke_weight(document: &DocumentMessageHandler) -> Option { - document - .network_interface - .selected_nodes() - .selected_layers_except_artboards(&document.network_interface) - .next() - .map(|layer| get_stroke_width(layer, &document.network_interface).unwrap_or(0.)) +/// Whether the paint order can act on the layer: it rides the Stroke node's paint order input, so any layer with a Stroke node qualifies. +pub fn stroke_paint_order_applicable(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> bool { + get_stroke_id(layer, network_interface).is_some() +} + +/// The paint order of a layer's stroke, read from the Stroke node's paint order input rather than from the chain topology. +pub fn get_stroke_paint_order(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> PaintOrder { + match NodeGraphLayer::new(layer, network_interface).parameter_value(graphene_std::vector::stroke::PaintOrderInput) { + Some(TaggedValue::PaintOrder(paint_order)) => *paint_order, + _ => PaintOrder::default(), + } } /// Writes the weight back to every selected non-artboard layer's stroke. Layers with an existing stroke just have their /// `WeightInput` updated; layers without one get a fresh stroke node added (defaulting to a black stroke with the new /// weight) only when the new weight is nonzero, so changing back to 0 doesn't keep adding empty strokes. pub fn set_stroke_weight_for_selected_layers(weight: f64, document: &DocumentMessageHandler, responses: &mut VecDeque) { - let layers: Vec<_> = document.network_interface.selected_nodes().selected_layers_except_artboards(&document.network_interface).collect(); - for layer in layers { + for layer in paintable_selected_layers(document) { if let Some(node_id) = get_stroke_id(layer, &document.network_interface) { - let input_index = graphene_std::vector::stroke::WeightInput::INDEX; - let value = TaggedValue::F64(weight); - responses.add(NodeGraphMessage::SetInputValue { node_id, input_index, value }); + responses.add(NodeGraphMessage::SetInputValue { + node_id, + input_index: graphene_std::vector::stroke::WeightInput::INDEX, + value: TaggedValue::F64(weight).into(), + }); } else if weight > 0. { let color = Some(Color::BLACK); let stroke = graphene_std::vector::style::Stroke::default().with_weight(weight); @@ -625,9 +745,9 @@ pub fn set_stroke_weight_for_selected_layers(weight: f64, document: &DocumentMes /// A Fill node's decoded gradient inputs, with the transform kept in its raw form (not yet baked into `start`/`end`). pub struct FillNodeGradient { - pub stops: GradientStops, - pub gradient_type: GradientType, - pub spread_method: GradientSpreadMethod, + pub stops: Gradient, + pub gradient_form: GradientForm, + pub settings: GradientSettings, pub transform: DAffine2, /// Whether the transform input holds a plain value (so it may be written to) rather than a wire. pub transform_is_value: bool, @@ -637,36 +757,39 @@ pub struct FillNodeGradient { pub fn read_fill_node_gradient(fill_node: &DocumentNode, bounding_box: impl FnOnce() -> [DVec2; 2]) -> Option { use graphene_std::vector::fill; - let TaggedValue::Gradient(stops) = fill_node.inputs.get(fill::FillInput::INDEX)?.as_value()? else { + let TaggedValue::GradientRamp(ramp) = fill_node.input(fill::PaintInput)?.as_value()? else { return None; }; - let gradient_type = match fill_node.inputs.get(fill::GradientTypeInput::INDEX).and_then(|input| input.as_value()) { - Some(&TaggedValue::GradientType(value)) => value, - _ => GradientType::default(), + let settings = GradientSettings::from(ramp); + let stops = Gradient::from(ramp); + let gradient_form = match fill_node.input(fill::GradientFormInput).and_then(|input| input.as_value()) { + Some(&TaggedValue::GradientForm(value)) => value, + _ => GradientForm::default(), }; - let spread_method = match fill_node.inputs.get(fill::SpreadMethodInput::INDEX).and_then(|input| input.as_value()) { - Some(&TaggedValue::GradientSpreadMethod(value)) => value, - _ => GradientSpreadMethod::default(), - }; - let transform_input = fill_node.inputs.get(fill::TransformInput::INDEX).and_then(|input| input.as_value()); - let transform = match transform_input { - Some(&TaggedValue::OptionalDAffine2(value)) => value.unwrap_or_else(|| initial_gradient_transform_for_bounding_box(bounding_box())), + let has_transform = matches!(fill_node.input(fill::HasTransformInput).and_then(|input| input.as_value()), Some(&TaggedValue::Bool(true))); + let transform_input = fill_node.input(fill::TransformInput).and_then(|input| input.as_value()); + let transform = match (has_transform, transform_input) { + (true, Some(&TaggedValue::DAffine2(value))) => value, + (false, _) => initial_gradient_transform_for_bounding_box(bounding_box()), _ => DAffine2::IDENTITY, }; Some(FillNodeGradient { - stops: stops.clone(), - gradient_type, - spread_method, + stops, + gradient_form, + settings, transform, transform_is_value: transform_input.is_some(), }) } /// Returns the stroke color from a layer's upstream Stroke node. pub fn get_stroke_color(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option> { - let color_index = graphene_std::vector::stroke::PaintInput::INDEX; - let tagged = NodeGraphLayer::new(layer, network_interface).find_input(&DefinitionIdentifier::ProtoNode(graphene_std::vector::stroke::IDENTIFIER), color_index)?; - if let TaggedValue::Color(color) = tagged { Some(*color) } else { None } + let tagged = NodeGraphLayer::new(layer, network_interface).parameter_value(graphene_std::vector::stroke::PaintInput)?; + match tagged { + TaggedValue::Color(color) => Some(Some(*color)), + value if value.is_no_paint() => Some(None), + _ => None, + } } /// Aggregated fill state across all selected non-artboard layers. @@ -685,12 +808,21 @@ pub struct SelectedStrokeState { pub optional_color: Option>, } -/// Reads the fill state across all selected non-artboard layers, including whether their enabled states or colors differ. -/// "Enabled" tracks node attachment: a layer counts as enabled whenever a Fill node is attached, even when that fill's value is [`FillChoice::None`]. -/// Unticked means there is no Fill node. Returns `None` only when no layer is selected. -pub fn selected_fill_state(document: &DocumentMessageHandler) -> Option { +/// The selected layers (artboards excluded) whose chains can host Fill and Stroke nodes. +/// The tool options bar's paint widgets treat these as the whole selection, so other layers act as if unselected. +pub fn paintable_selected_layers(document: &DocumentMessageHandler) -> Vec { let selected_nodes = document.network_interface.selected_nodes(); - let mut per_layer = selected_nodes.selected_layers_except_artboards(&document.network_interface).map(|layer| { + selected_nodes + .selected_layers_except_artboards(&document.network_interface) + .filter(|layer| document.network_interface.layer_hosts_paint_nodes(&layer.to_node(), &[])) + .collect() +} + +/// Reads the fill state across all selected non-artboard layers, including whether their enabled states or colors differ. +/// "Enabled" tracks node attachment: a layer counts as enabled whenever a Fill node is attached, even when that fill's value is the no-paint choice. +/// Unticked means there is no Fill node. Returns `None` only when no paintable layer is selected. +pub fn selected_fill_state(document: &DocumentMessageHandler) -> Option { + let mut per_layer = paintable_selected_layers(document).into_iter().map(|layer| { let Some(fill_node_id) = get_fill_id(layer, &document.network_interface) else { return (false, FillChoice::None); }; @@ -698,9 +830,10 @@ pub fn selected_fill_state(document: &DocumentMessageHandler) -> Option Some(color.map_or(FillChoice::None, FillChoice::Solid)), - TaggedValue::Gradient(stops) => Some(FillChoice::Gradient(stops.clone())), + match fill_node.input(graphene_std::vector::fill::PaintInput)?.as_value()? { + TaggedValue::Color(color) => Some(FillChoice::Solid(*color)), + TaggedValue::GradientRamp(ramp) => Some(FillChoice::Gradient(ramp.clone())), + value if value.is_no_paint() => Some(FillChoice::None), _ => None, } })() @@ -740,8 +873,7 @@ pub fn selected_fill_state(document: &DocumentMessageHandler) -> Option Option { - let selected_nodes = document.network_interface.selected_nodes(); - let mut per_layer = selected_nodes.selected_layers_except_artboards(&document.network_interface).map(|layer| { + let mut per_layer = paintable_selected_layers(document).into_iter().map(|layer| { if get_stroke_id(layer, &document.network_interface).is_none() { return (false, None); } @@ -778,38 +910,30 @@ pub fn selected_stroke_state(document: &DocumentMessageHandler) -> Option(dynamic) + Self::downcast_record::(dynamic) } - pub fn grab_input_from_layer(&self, layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface, runtime: &NodeRuntime) -> Option - where - Input::Result: Send + Sync + Clone + 'static, - { + /// Grabs a ranked input's recorded value as its bare element `Element`. + /// `introspect` serves a rank-0 input as its element, so no cell unwrapping is needed here. + pub fn grab_ranked_input(&self, path: &Vec, runtime: &NodeRuntime) -> Option { + self.grab_protonode_input::(path, runtime) + } + + pub fn grab_input_from_layer( + &self, + layer: LayerNodeIdentifier, + network_interface: &NodeNetworkInterface, + runtime: &NodeRuntime, + ) -> Option { let node_graph_layer = NodeGraphLayer::new(layer, network_interface); let node = node_graph_layer.upstream_node_id_from_protonode(Input::identifier())?; - self.grab_protonode_input::(&vec![node], runtime) + self.grab_protonode_input::(&vec![node], runtime) } } } diff --git a/editor/src/node_graph_executor/runtime.rs b/editor/src/node_graph_executor/runtime.rs index a8e1880c08..2c1621da89 100644 --- a/editor/src/node_graph_executor/runtime.rs +++ b/editor/src/node_graph_executor/runtime.rs @@ -104,7 +104,7 @@ impl InternalNodeGraphUpdateSender { } fn send_execution_response(&self, response: ExecutionResponse) { - self.0.send(NodeGraphUpdate::ExecutionResponse(response)).expect("Failed to send response") + self.0.send(NodeGraphUpdate::ExecutionResponse(Box::new(response))).expect("Failed to send response") } fn send_eyedropper_preview(&self, raster: Raster) { diff --git a/editor/src/test_utils.rs b/editor/src/test_utils.rs index c0754313d1..836ce2d537 100644 --- a/editor/src/test_utils.rs +++ b/editor/src/test_utils.rs @@ -1,6 +1,6 @@ use crate::application::Editor; -use crate::messages::input_mapper::utility_types::input_keyboard::ModifierKeys; -use crate::messages::input_mapper::utility_types::input_mouse::{EditorMouseState, MouseKeys, ScrollDelta, ViewportPosition}; +use crate::messages::input_mapper::utility_types::keyboard::ModifierKeys; +use crate::messages::input_mapper::utility_types::pointer::{EditorPointerState, MouseKeys, ViewportPosition}; use crate::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier; use crate::messages::prelude::*; use crate::messages::tool::tool_messages::tool_prelude::Key; @@ -9,8 +9,6 @@ use crate::node_graph_executor::Instrumented; use crate::node_graph_executor::NodeRuntime; use crate::test_utils::test_prelude::LayerNodeIdentifier; use glam::{DVec2, UVec2}; -use graph_craft::document::DocumentNode; -use graphene_std::InputAccessor; use graphene_std::raster::color::Color; use graphene_std::uuid::NodeId; @@ -98,6 +96,10 @@ impl EditorTestUtils { panic!("Failed to evaluate graph: {e}"); } + // Sweep the network interface's structural invariants so any desync fails at the message that caused it + let violations = self.active_document().network_interface.validate_invariants(); + assert!(violations.is_empty(), "Network interface invariant violations:\n{}", violations.join("\n")); + frontend_messages_from_msg } @@ -124,7 +126,7 @@ impl EditorTestUtils { self.move_mouse(position.x, position.y, modifier_keys, MouseKeys::empty()).await; self.mousedown( - EditorMouseState { + EditorPointerState { editor_position: position, mouse_keys: button, ..Default::default() @@ -134,7 +136,7 @@ impl EditorTestUtils { .await; self.mouseup( - EditorMouseState { + EditorPointerState { editor_position: position, ..Default::default() }, @@ -153,10 +155,10 @@ impl EditorTestUtils { self.move_mouse(x2, y2, modifier_keys, MouseKeys::LEFT).await; self.mouseup( - EditorMouseState { + EditorPointerState { editor_position: (x2, y2).into(), mouse_keys: MouseKeys::empty(), - scroll_delta: ScrollDelta::default(), + ..Default::default() }, modifier_keys, ) @@ -173,10 +175,10 @@ impl EditorTestUtils { self.move_mouse(100., 100., ModifierKeys::default(), MouseKeys::LEFT).await; self.mousedown( - EditorMouseState { + EditorPointerState { editor_position: (100., 100.).into(), mouse_keys: MouseKeys::LEFT | MouseKeys::RIGHT, - scroll_delta: ScrollDelta::default(), + ..Default::default() }, ModifierKeys::default(), ) @@ -191,17 +193,8 @@ impl EditorTestUtils { self.editor.dispatcher.message_handlers.portfolio_message_handler.active_document_mut().unwrap() } - pub fn get_node<'a, T: InputAccessor<'a, DocumentNode>>(&'a self) -> impl Iterator + 'a { - self.active_document() - .network_interface - .document_network() - .recursive_nodes() - .inspect(|(_, node, _)| println!("{:#?}", node.implementation)) - .filter_map(move |(_, document, _)| T::new_with_source(document)) - } - pub async fn move_mouse(&mut self, x: f64, y: f64, modifier_keys: ModifierKeys, mouse_keys: MouseKeys) { - let editor_mouse_state = EditorMouseState { + let editor_mouse_state = EditorPointerState { editor_position: ViewportPosition::new(x, y), mouse_keys, ..Default::default() @@ -209,11 +202,11 @@ impl EditorTestUtils { self.input(InputPreprocessorMessage::PointerMove { editor_mouse_state, modifier_keys }).await; } - pub async fn mousedown(&mut self, editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys) { + pub async fn mousedown(&mut self, editor_mouse_state: EditorPointerState, modifier_keys: ModifierKeys) { self.input(InputPreprocessorMessage::PointerDown { editor_mouse_state, modifier_keys }).await; } - pub async fn mouseup(&mut self, editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys) { + pub async fn mouseup(&mut self, editor_mouse_state: EditorPointerState, modifier_keys: ModifierKeys) { self.handle_message(InputPreprocessorMessage::PointerUp { editor_mouse_state, modifier_keys }).await; } @@ -226,10 +219,10 @@ impl EditorTestUtils { pub async fn left_mousedown(&mut self, x: f64, y: f64, modifier_keys: ModifierKeys) { self.mousedown( - EditorMouseState { + EditorPointerState { editor_position: (x, y).into(), mouse_keys: MouseKeys::LEFT, - scroll_delta: ScrollDelta::default(), + ..Default::default() }, modifier_keys, ) @@ -238,10 +231,10 @@ impl EditorTestUtils { pub async fn left_mouseup(&mut self, x: f64, y: f64, modifier_keys: ModifierKeys) { self.mouseup( - EditorMouseState { + EditorPointerState { editor_position: (x, y).into(), mouse_keys: MouseKeys::empty(), - scroll_delta: ScrollDelta::default(), + ..Default::default() }, modifier_keys, ) @@ -294,10 +287,10 @@ impl EditorTestUtils { pub async fn double_click(&mut self, position: DVec2) { self.handle_message(InputPreprocessorMessage::DoubleClick { - editor_mouse_state: EditorMouseState { + editor_mouse_state: EditorPointerState { editor_position: position, mouse_keys: MouseKeys::LEFT, - scroll_delta: ScrollDelta::default(), + ..Default::default() }, modifier_keys: ModifierKeys::empty(), }) @@ -318,10 +311,10 @@ impl EditorTestUtils { } self.mouseup( - EditorMouseState { + EditorPointerState { editor_position: points[points.len() - 1], mouse_keys: MouseKeys::empty(), - scroll_delta: ScrollDelta::default(), + ..Default::default() }, modifier_keys, ) @@ -341,11 +334,19 @@ impl EditorTestUtils { } pub async fn create_node_by_name(&mut self, node_type: DefinitionIdentifier) -> NodeId { + self.create_node(node_type, None).await + } + + pub async fn create_node_by_name_at(&mut self, node_type: DefinitionIdentifier, x: i32, y: i32) -> NodeId { + self.create_node(node_type, Some((x, y))).await + } + + async fn create_node(&mut self, node_type: DefinitionIdentifier, xy: Option<(i32, i32)>) -> NodeId { let node_id = NodeId::new(); self.handle_message(NodeGraphMessage::CreateNodeFromContextMenu { node_id: Some(node_id), node_type, - xy: None, + xy, add_transaction: true, }) .await; @@ -372,8 +373,8 @@ pub mod test_prelude { pub use crate::application::Editor; pub use crate::float_eq; pub use crate::messages::clipboard::utility_types::ClipboardContentRaw; - pub use crate::messages::input_mapper::utility_types::input_keyboard::{Key, ModifierKeys}; - pub use crate::messages::input_mapper::utility_types::input_mouse::MouseKeys; + pub use crate::messages::input_mapper::utility_types::keyboard::{Key, ModifierKeys}; + pub use crate::messages::input_mapper::utility_types::pointer::MouseKeys; pub use crate::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier; pub use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; pub use crate::messages::prelude::*; @@ -386,7 +387,6 @@ pub mod test_prelude { pub use graph_craft::document::DocumentNode; pub use graphene_std::raster::{Color, Image}; pub use graphene_std::transform::Footprint; - pub use graphene_std::{InputAccessor, InputAccessorSource}; #[macro_export] macro_rules! float_eq { diff --git a/flake.lock b/flake.lock index d0870633f0..9e8ffd97d6 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "crane": { "locked": { - "lastModified": 1781825982, - "narHash": "sha256-SlXKwIRIhrOSAcTjCB3ftPLzJWZStQIPS7J1FlZPnKk=", + "lastModified": 1787326676, + "narHash": "sha256-lWhBbBvC05/xwivKBBiM2YNizpmgqCgyOIzomvRuwxs=", "owner": "ipetkov", "repo": "crane", - "rev": "469fd08d0bcf6926321fa973c6777fbc87785dd7", + "rev": "692f7e9ef2ece8125b466f66f2af532b3edaed0d", "type": "github" }, "original": { @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1782723713, - "narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=", + "lastModified": 1787900134, + "narHash": "sha256-VYXO0XZlgj06dxJZRhrD3WoSsvq/c7+/Akyoa22pefw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8", + "rev": "83199d0d373dd3ac2b9a1996b1d0263f76ab7a4c", "type": "github" }, "original": { @@ -45,11 +45,11 @@ ] }, "locked": { - "lastModified": 1782789458, - "narHash": "sha256-CR55gKCChD9ffN1Ag5az20Z3RD4tylHlcM1SSohkMA8=", + "lastModified": 1788077403, + "narHash": "sha256-c20YZQKzQ27qC6Wh729fWRTpI7oV4+7Ur4icKssD4Wc=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "067959ef838c440558ca519cf08ca87f43c3db3a", + "rev": "89e26eeaafa88a2ede4778734acc794ff0299beb", "type": "github" }, "original": { @@ -62,3 +62,4 @@ "root": "root", "version": 7 } + diff --git a/frontend/.gitignore b/frontend/.gitignore index d5e07ad546..9d77d0437e 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -3,3 +3,4 @@ wrapper/pkg/ wrapper/pkg-native/ public/build/ dist/ +node_modules.locked-*/ diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js index a8cd8e699d..38752e68d0 100644 --- a/frontend/eslint.config.js +++ b/frontend/eslint.config.js @@ -73,6 +73,13 @@ export default defineConfig([ ], }, ], + "no-restricted-syntax": [ + "error", + { + selector: "Literal[raw='null']", + message: "Use `undefined` instead of `null`.", + }, + ], // TypeScript plugin config (for TS-specific linting) "@typescript-eslint/indent": "off", @@ -96,7 +103,7 @@ export default defineConfig([ "@typescript-eslint/consistent-type-assertions": ["error", { assertionStyle: "never" }], "@typescript-eslint/consistent-indexed-object-style": ["error", "record"], "@typescript-eslint/consistent-generic-constructors": ["error", "constructor"], - "@typescript-eslint/no-restricted-types": ["error", { types: { null: "Use `undefined` instead." } }], + "@typescript-eslint/no-restricted-types": ["error", { types: { null: "Use `undefined` instead of `null`." } }], // Prettier plugin config (for validating and fixing formatting) "prettier/prettier": "error", diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e5b3d4fe79..5206d4c72b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -5,7 +5,7 @@ "packages": { "": { "name": "graphite-web-frontend", - "license": "Apache-2.0", + "license": "MIT OR Apache-2.0", "dependencies": { "source-code-pro": "2.42.0", "source-sans-pro": "2.45.0" diff --git a/frontend/package.json b/frontend/package.json index 0c01ff212e..14786be9d4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,7 +3,6 @@ "private": true, "description": "Graphite's web app frontend.", "author": "Graphite Authors ", - "browserslist": "> 1.5%, last 2 versions, not dead, not ie 11, not op_mini all, not ios_saf < 13", "type": "module", "scripts": { "check": "svelte-check --fail-on-warnings && eslint", @@ -36,7 +35,7 @@ "vite": "^8.0.3" }, "homepage": "https://graphite.art", - "license": "Apache-2.0", + "license": "MIT OR Apache-2.0", "repository": { "type": "git", "url": "git+https://github.com/GraphiteEditor/Graphite.git" diff --git a/frontend/src/components/Editor.svelte b/frontend/src/components/Editor.svelte index ed8339ef81..1ecd7ce305 100644 --- a/frontend/src/components/Editor.svelte +++ b/frontend/src/components/Editor.svelte @@ -83,45 +83,24 @@ } :root { - // Replace usage of `-rgb` variants with CSS color() function to calculate alpha when browsers support it - // See https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color() and https://caniuse.com/css-color-function - // Specifically, support for the relative syntax is needed: `color(from var(--color-0-black) srgb r g b / 0.5)` to convert black to 50% alpha --color-0-black: #000; - --color-0-black-rgb: 0, 0, 0; --color-1-nearblack: #111; - --color-1-nearblack-rgb: 17, 17, 17; --color-2-mildblack: #222; - --color-2-mildblack-rgb: 34, 34, 34; --color-3-darkgray: #333; - --color-3-darkgray-rgb: 51, 51, 51; --color-4-dimgray: #444; - --color-4-dimgray-rgb: 68, 68, 68; --color-5-dullgray: #555; - --color-5-dullgray-rgb: 85, 85, 85; --color-6-lowergray: #666; - --color-6-lowergray-rgb: 102, 102, 102; --color-7-middlegray: #777; - --color-7-middlegray-rgb: 109, 109, 109; --color-8-uppergray: #888; - --color-8-uppergray-rgb: 136, 136, 136; --color-9-palegray: #999; - --color-9-palegray-rgb: 153, 153, 153; --color-a-softgray: #aaa; - --color-a-softgray-rgb: 170, 170, 170; --color-b-lightgray: #bbb; - --color-b-lightgray-rgb: 187, 187, 187; --color-c-brightgray: #ccc; - --color-c-brightgray-rgb: 204, 204, 204; --color-d-mildwhite: #ddd; - --color-d-mildwhite-rgb: 221, 221, 221; --color-e-nearwhite: #eee; - --color-e-nearwhite-rgb: 238, 238, 238; --color-f-white: #fff; - --color-f-white-rgb: 255, 255, 255; --color-error-red: #d6536e; - --color-error-red-rgb: 214, 83, 110; --color-warning-yellow: #d5aa43; - --color-warning-yellow-rgb: 213, 170, 67; --color-data-general: #cfcfcf; --color-data-general-dim: #8a8a8a; @@ -277,7 +256,7 @@ & { // Setting an alpha value opts out of Safari's "fancy" (but not visible on dark backgrounds) selection highlight rendering // https://stackoverflow.com/a/71753552/775283 - background-color: rgba(var(--color-4-dimgray-rgb), calc(254 / 255)); + background-color: rgb(from var(--color-4-dimgray) r g b / calc(254 / 255)); } } } diff --git a/frontend/src/components/floating-menus/ColorPicker.svelte b/frontend/src/components/floating-menus/ColorPicker.svelte index faabf12cd9..aec680c23f 100644 --- a/frontend/src/components/floating-menus/ColorPicker.svelte +++ b/frontend/src/components/floating-menus/ColorPicker.svelte @@ -5,14 +5,14 @@ import LayoutRow from "/src/components/layout/LayoutRow.svelte"; import WidgetLayout from "/src/components/widgets/WidgetLayout.svelte"; import type { ColorPickerCallbacks, ColorPickerStore } from "/src/stores/color-picker"; - import type { EditorWrapper, FillChoiceUI, MenuDirection } from "/wrapper/pkg/graphite_wasm_wrapper"; + import type { EditorWrapper, FillChoice, MenuDirection, SRGBA8 } from "/wrapper/pkg/graphite_wasm_wrapper"; - const dispatch = createEventDispatcher<{ colorOrGradient: FillChoiceUI; startHistoryTransaction: undefined; commitHistoryTransaction: undefined }>(); + const dispatch = createEventDispatcher<{ colorOrGradient: FillChoice; startHistoryTransaction: undefined; commitHistoryTransaction: undefined }>(); const editor = getContext("editor"); const colorPickerStore = getContext("colorPicker"); - export let colorOrGradient: FillChoiceUI; + export let colorOrGradient: FillChoice; export let allowNone = false; // export let allowTransparency = false; // TODO: Implement export let disabled = false; @@ -98,7 +98,6 @@ .details { margin-left: 16px; width: 200px; - gap: 8px; > .widget-span { --row-height: 24px; @@ -107,6 +106,10 @@ margin-top: auto; } + &:not(:last-child) { + margin-bottom: 8px; + } + > .text-label { // TODO: Use a table or grid layout for this width to match the widest label. Hard-coding it won't work when we add translation/localization. flex: 0 0 34px; diff --git a/frontend/src/components/floating-menus/MenuList.svelte b/frontend/src/components/floating-menus/MenuList.svelte index 09dcb5664c..1d90d9cbe3 100644 --- a/frontend/src/components/floating-menus/MenuList.svelte +++ b/frontend/src/components/floating-menus/MenuList.svelte @@ -416,11 +416,6 @@ export function setHighlighted(newHighlight: MenuListEntry | undefined) { highlighted = newHighlight; - // Interactive menus should keep the active entry the same as the highlighted one - // if (interactive && newHighlight?.value !== activeEntry?.value && newHighlight) { - // dispatch("activeEntry", newHighlight); - // } - // Scroll into view let container = scroller?.div?.(); if (!container || !highlighted) return; diff --git a/frontend/src/components/floating-menus/NodeCatalog.svelte b/frontend/src/components/floating-menus/NodeCatalog.svelte index 08d287d4b7..d9ac6a051f 100644 --- a/frontend/src/components/floating-menus/NodeCatalog.svelte +++ b/frontend/src/components/floating-menus/NodeCatalog.svelte @@ -46,7 +46,7 @@ let matchesRemainingTerms = true; if (isTypeSearch && typeSearchTerm) { - matchesTypeSearch = node.inputTypes?.some((inputType) => inputType.toLowerCase().includes(typeSearchTerm)) || false; + matchesTypeSearch = node.inputTypes?.some((constraint) => constraint === "All" || constraint.Limited.some((inputType) => inputType.toLowerCase().includes(typeSearchTerm))) || false; } if (remainingSearchTerms.length > 0) { diff --git a/frontend/src/components/layout/FloatingMenu.svelte b/frontend/src/components/layout/FloatingMenu.svelte index dfe286dbcd..770ecce2f6 100644 --- a/frontend/src/components/layout/FloatingMenu.svelte +++ b/frontend/src/components/layout/FloatingMenu.svelte @@ -17,10 +17,11 @@ {#each labels as label, index} - !disabled && index !== labels.length - 1 && action(index)} /> + !disabled && index !== labels.length - 1 && action(index)} /> {/each} diff --git a/frontend/src/components/widgets/buttons/TextButton.svelte b/frontend/src/components/widgets/buttons/TextButton.svelte index e239b04dd8..cda8938547 100644 --- a/frontend/src/components/widgets/buttons/TextButton.svelte +++ b/frontend/src/components/widgets/buttons/TextButton.svelte @@ -75,7 +75,7 @@ data-emphasized={emphasized || undefined} data-disabled={disabled || undefined} data-text-button - tabindex={disabled ? -1 : 0} + tabindex={disabled ? -1 : undefined} data-floating-menu-spawner data-block-hover-transfer={menuListChildrenExists ? undefined : ""} on:click={onClick} diff --git a/frontend/src/components/widgets/inputs/CheckboxInput.svelte b/frontend/src/components/widgets/inputs/CheckboxInput.svelte index e550c245de..566e72e48b 100644 --- a/frontend/src/components/widgets/inputs/CheckboxInput.svelte +++ b/frontend/src/components/widgets/inputs/CheckboxInput.svelte @@ -54,7 +54,6 @@ dispatch("checked", inputElement?.checked || false); }} {disabled} - tabindex={disabled ? -1 : 0} bind:this={inputElement} />

for ParameterRef { + fn from(_: P) -> Self { + ParameterRef { + node_identifier: P::identifier(), + input_index: P::INDEX, + } + } +} diff --git a/node-graph/libraries/core-types/src/list.rs b/node-graph/libraries/core-types/src/list.rs index 023e688270..4abd42b23a 100644 --- a/node-graph/libraries/core-types/src/list.rs +++ b/node-graph/libraries/core-types/src/list.rs @@ -1,7 +1,8 @@ use crate::attribute::Attribute as _; use crate::bounds::{BoundingBox, RenderBoundingBox}; use crate::transform::ApplyTransform; -use dyn_any::{StaticType, StaticTypeSized}; +use crate::uuid::NodeId; +use dyn_any::{DynAny, StaticType, StaticTypeSized}; use glam::DAffine2; use graphene_hash::CacheHash; use std::fmt::Debug; @@ -37,6 +38,84 @@ pub const ATTR_MAX_WIDTH: &str = crate::attribute::MaxWidth::NAME; pub const ATTR_MAX_HEIGHT: &str = crate::attribute::MaxHeight::NAME; pub const ATTR_LETTER_TILT: &str = crate::attribute::LetterTilt::NAME; +// Name aliases for markers declared below core-types, so code here and in +// sibling crates can spell the name without depending on the owning crate. +// The marker, and with it the value type and the default, lives in the crate +// named beside each name; these are the string only. +// vector-types (gradient and stroke coverage): +pub const ATTR_GRADIENT_SPREAD: &str = "gradient_spread"; +pub const ATTR_GRADIENT_FORM: &str = "gradient_form"; +pub const ATTR_GRADIENT_SPACE: &str = "gradient_space"; +pub const ATTR_GRADIENT_HUE_DIRECTION: &str = "gradient_hue_direction"; +pub const ATTR_GRADIENT_INTERPOLATION: &str = "gradient_interpolation"; +pub const ATTR_GRADIENT_CYCLIC: &str = "gradient_cyclic"; +pub const ATTR_POSITION: &str = "position"; +pub const ATTR_MIDPOINT: &str = "midpoint"; +pub const ATTR_WEIGHT: &str = "weight"; +pub const ATTR_DASH_OFFSET: &str = "dash_offset"; +pub const ATTR_CAP: &str = "cap"; +pub const ATTR_JOIN: &str = "join"; +pub const ATTR_JOIN_MITER_LIMIT: &str = "join_miter_limit"; +pub const ATTR_ALIGN: &str = "align"; +// graphic-types (paint): +pub const ATTR_APPEARANCE: &str = "appearance"; +pub const ATTR_PAINT: &str = "paint"; +// vector-types (stroke coverage, value type is not `Copy` so it has no marker yet): +pub const ATTR_DASH_PATTERN: &str = "dash_pattern"; +// brush-types (per-stroke styling): +pub const ATTR_COLOR: &str = "color"; +pub const ATTR_DIAMETER: &str = "diameter"; +pub const ATTR_HARDNESS: &str = "hardness"; +pub const ATTR_FLOW: &str = "flow"; + +// ===================== +// TYPE: NodeIdPath +// ===================== + +/// A single path of `NodeId`s locating a node (or its owning layer) within the nested document graph. +/// Wraps a `List` so it flows as one rank-0 value (`Item`) rather than a rank-1 +/// `List` that the element-wise machinery would wrongly zip over per ID. +#[derive(Default, Debug, Clone, PartialEq, CacheHash, DynAny)] +pub struct NodeIdPath(pub List); + +impl From> for NodeIdPath { + fn from(ids: Vec) -> Self { + Self(ids.into_iter().map(Item::new_from_element).collect()) + } +} + +// ================ +// TYPE: Bundle +// ================ + +/// A whole `List` treated as one rank-0 value (`Item>`) rather than a rank-1 `List`. +/// Bundling a collection lets it pass through a connector that selects or carries the entire collection as one opaque +/// cell (such as a Switch branch), instead of the element-wise machinery zipping over it per element. +#[derive(Clone, Debug, PartialEq)] +pub struct Bundle(pub List); + +impl Default for Bundle { + fn default() -> Self { + Self(List::default()) + } +} + +impl CacheHash for Bundle { + fn cache_hash(&self, state: &mut H) { + self.0.cache_hash(state); + } +} + +impl From> for Bundle { + fn from(list: List) -> Self { + Self(list) + } +} + +unsafe impl StaticType for Bundle { + type Static = Bundle; +} + // =========================== // Implicit attribute defaults // =========================== @@ -81,6 +160,13 @@ pub trait AnyAttributeValue: std::any::Any + Send + Sync { /// Returns a debug-formatted string representation of this value. fn display_string(&self) -> String; + /// Hashes this value into the given hasher (object-safe wrapper around `CacheHash`). + fn cache_hash_dyn(&self, state: &mut dyn core::hash::Hasher); + + /// Compares this value to another for value-by-value equality (object-safe wrapper around `PartialEq`). + /// Returns `false` if the underlying types differ. + fn eq_dyn(&self, other: &dyn AnyAttributeValue) -> bool; + /// Wraps this scalar value into a new attribute, preceded by `preceding_defaults` implicit defaults for `key`. fn into_attribute(self: Box, key: &str, preceding_defaults: usize) -> Box; } @@ -117,6 +203,17 @@ impl bool { + other.as_any().downcast_ref::().is_some_and(|other| self == other) + } + /// Wraps this scalar value into a new attribute, preceded by `preceding_defaults` implicit defaults for `key`. fn into_attribute(self: Box, key: &str, preceding_defaults: usize) -> Box { let mut attribute: Box = Box::new(Attribute::(Vec::with_capacity(preceding_defaults + 1))); @@ -385,8 +482,7 @@ unsafe impl StaticType for AttributeDyn { // ================== /// Type-erased single attribute value, used as a node graph parameter type. -/// Lets a node accept a value of any concrete type via the auto-inserted `Convert` -/// without monomorphizing over the value type. +/// Lets a node accept a value of any valid concrete type via the auto-inserted input adapter conversion without monomorphizing over the value type. pub struct AttributeValueDyn(pub Box); impl Clone for AttributeValueDyn { @@ -527,6 +623,17 @@ impl Debug for ItemAttributeValues { } } +impl PartialEq for ItemAttributeValues { + fn eq(&self, other: &Self) -> bool { + self.0.len() == other.0.len() + && self + .0 + .iter() + .zip(&other.0) + .all(|((self_key, self_value), (other_key, other_value))| self_key == other_key && self_value.eq_dyn(other_value.as_ref())) + } +} + impl ItemAttributeValues { /// Creates an empty set of attributes. pub fn new() -> Self { @@ -602,6 +709,16 @@ impl ItemAttributeValues { self.0.iter().map(|(key, value)| (key.as_str(), &**value)) } + /// Returns a type-erased reference to the value of the attribute with the given key, if it exists. + pub fn get_any(&self, key: &str) -> Option<&dyn std::any::Any> { + self.0.iter().find_map(|(existing_key, value)| if existing_key == key { Some((**value).as_any()) } else { None }) + } + + /// Returns an iterator over key and type-erased value pairs of all stored attributes, in insertion order. + pub fn iter_any(&self) -> impl Iterator { + self.0.iter().map(|(key, value)| (key.as_str(), (**value).as_any())) + } + /// Returns a debug-formatted string representation of the attribute value for the given key, if it exists. /// The `overrides` function can provide custom formatting for specific type. pub fn display_value(&self, key: &str, overrides: fn(&dyn std::any::Any) -> Option) -> Option { @@ -1155,7 +1272,7 @@ impl CacheHash for List { self.element.cache_hash(state); // Hash every attribute attribute (key + values) rather than just the well-known ones, so changes to user-defined keys - // (e.g., gradient_type, spread_method) invalidate downstream graph caches as expected + // (e.g., gradient_form, gradient_spread) invalidate downstream graph caches as expected for (key, attribute) in &self.attributes.attributes { std::hash::Hash::hash(key.as_str(), state); attribute.cache_hash_dyn(state); @@ -1221,21 +1338,40 @@ impl FromIterator> for List { /// An owned item containing an element of type `T` and a set of type-erased scalar attributes. /// /// Used to build individual items before pushing them into a [`List`], or when consuming items out of a list via [`IntoIterator`]. -#[derive(Clone, Debug)] +#[derive(Clone, Debug, PartialEq)] pub struct Item { element: T, attributes: ItemAttributeValues, } +impl BoundingBox for Item { + /// Computes the element's bounding box, composing the item's transform attribute with the given transform. + fn bounding_box(&self, transform: DAffine2, include_stroke: bool) -> RenderBoundingBox { + let item_transform: DAffine2 = self.attribute_cloned_or_default(ATTR_TRANSFORM); + self.element().bounding_box(transform * item_transform, include_stroke) + } + + fn thumbnail_bounding_box(&self, transform: DAffine2, include_stroke: bool) -> RenderBoundingBox { + let item_transform: DAffine2 = self.attribute_cloned_or_default(ATTR_TRANSFORM); + self.element().thumbnail_bounding_box(transform * item_transform, include_stroke) + } +} + impl Default for Item { fn default() -> Self { Self::new_from_element(T::default()) } } -impl PartialEq for Item { - fn eq(&self, other: &Self) -> bool { - self.element == other.element +impl CacheHash for Item { + fn cache_hash(&self, state: &mut H) { + self.element.cache_hash(state); + + // Hash every attribute (key + value) so attribute changes invalidate downstream caches, mirroring `List` + for (key, attribute) in &self.attributes.0 { + std::hash::Hash::hash(key.as_str(), state); + attribute.cache_hash_dyn(state); + } } } @@ -1327,6 +1463,42 @@ impl Item { } } +impl From for Item { + fn from(element: T) -> Self { + Self::new_from_element(element) + } +} + +impl From> for List { + fn from(item: Item) -> Self { + Self::new_from_item(item) + } +} + +impl From for List { + fn from(element: T) -> Self { + Self::new_from_element(element) + } +} + +impl ApplyTransform for Item { + /// Right-multiplies the modification into the item's transform attribute. + fn apply_transform(&mut self, modification: &DAffine2) { + let transform = self.attribute_mut_or_insert_default::(ATTR_TRANSFORM); + *transform *= *modification; + } + + /// Left-multiplies the modification into the item's transform attribute. + fn left_apply_transform(&mut self, modification: &DAffine2) { + let transform = self.attribute_mut_or_insert_default::(ATTR_TRANSFORM); + *transform = *modification * *transform; + } +} + +unsafe impl StaticType for Item { + type Static = Item; +} + // =========== // ItemIter // =========== diff --git a/node-graph/libraries/core-types/src/math/float_noise.rs b/node-graph/libraries/core-types/src/math/float_noise.rs new file mode 100644 index 0000000000..36e275aa53 --- /dev/null +++ b/node-graph/libraries/core-types/src/math/float_noise.rs @@ -0,0 +1,71 @@ +use std::fmt::Write; + +/// Recovers the intended number from floating point imprecision noise when that can be done reliably, e.g. 0.30000000000000004 -> 0.3. +/// Rounding to each significant digit count from 1 to 12, the first candidate within a relative 1e-13 of the original is accepted. +/// Actual high-precision values (like 0.3333333333333333) never pass the tolerance and are returned unchanged. +/// f64 only, as f32 lacks precision to reliably distinguish between intentional digits and noise. +pub fn round_away_float_noise(value: f64) -> f64 { + if value == 0. || !value.is_finite() { + return if value == 0. { 0. } else { value }; + } + + // Candidates come from decimal formatting rather than scaling by a power of ten, which is inexact enough to invent + // noise of its own: it turns 1e300 into 9.999999999999999e299 and 999999.9999999 into 999999.9999999999. + // One buffer serves every candidate, since the digit counts are tried in turn. + let mut buffer = String::with_capacity(32); + for significant_digits in 1..=12 { + buffer.clear(); + let _ = write!(buffer, "{value:.*e}", significant_digits - 1); + + let Ok(rounded) = buffer.parse::() else { continue }; + if ((rounded - value) / value).abs() < 1e-13 { + return rounded; + } + } + + value +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn round_away_float_noise_snaps_noisy_values() { + assert_eq!(round_away_float_noise(0.1 + 0.2), 0.3); + assert_eq!(round_away_float_noise(0.3000000000000012), 0.3); + assert_eq!(round_away_float_noise(2.99999999999993), 3.); + assert_eq!(round_away_float_noise(45.00000000000001), 45.); + } + + #[test] + fn round_away_float_noise_keeps_honest_values() { + assert_eq!(round_away_float_noise(1. / 3.), 1. / 3.); + assert_eq!(round_away_float_noise(0.2394023940209349), 0.2394023940209349); + assert_eq!(round_away_float_noise(0.25), 0.25); + assert_eq!(round_away_float_noise(-17.5), -17.5); + } + + #[test] + fn round_away_float_noise_keeps_deliberate_values_with_zero_runs() { + assert_eq!(round_away_float_noise(0.30000005), 0.30000005); + assert_eq!(round_away_float_noise(0.3000000000001), 0.3000000000001); + assert_eq!(round_away_float_noise(1.00000001), 1.00000001); + assert_eq!(round_away_float_noise(2.9999993), 2.9999993); + } + + #[test] + fn round_away_float_noise_normalizes_zero() { + let result = round_away_float_noise(-0.); + assert_eq!(result, 0.); + assert!(result.is_sign_positive()); + } + + #[test] + fn round_away_float_noise_keeps_extreme_magnitudes_exact() { + assert_eq!(round_away_float_noise(1e300), 1e300); + assert_eq!(round_away_float_noise(1.5e300), 1.5e300); + assert_eq!(round_away_float_noise(1e-300), 1e-300); + assert_eq!(round_away_float_noise(f64::MIN_POSITIVE), f64::MIN_POSITIVE); + } +} diff --git a/node-graph/libraries/core-types/src/math/mod.rs b/node-graph/libraries/core-types/src/math/mod.rs index 90a2b6d0e3..bf8af5a78a 100644 --- a/node-graph/libraries/core-types/src/math/mod.rs +++ b/node-graph/libraries/core-types/src/math/mod.rs @@ -1,4 +1,5 @@ pub mod bbox; +pub mod float_noise; pub mod polynomial; pub mod quad; pub mod rect; diff --git a/node-graph/libraries/core-types/src/math/polynomial.rs b/node-graph/libraries/core-types/src/math/polynomial.rs index 392fee51e4..4ca1807b48 100644 --- a/node-graph/libraries/core-types/src/math/polynomial.rs +++ b/node-graph/libraries/core-types/src/math/polynomial.rs @@ -1,10 +1,9 @@ use kurbo::PathSeg; -use std::fmt::{self, Display, Formatter}; -use std::ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign}; +use std::ops::{Mul, MulAssign}; /// A struct that represents a polynomial with a maximum degree of `N-1`. /// -/// It provides basic mathematical operations for polynomials like addition, multiplication, differentiation, integration, etc. +/// It provides basic mathematical operations for polynomials like multiplication, differentiation, integration, etc. #[derive(Copy, Clone, Debug, PartialEq)] pub struct Polynomial { coefficients: [f64; N], @@ -18,18 +17,6 @@ impl Polynomial { Polynomial { coefficients } } - /// Create a polynomial where all its coefficients are zero. - pub fn zero() -> Polynomial { - Polynomial { coefficients: [0.; N] } - } - - /// Return an immutable reference to the coefficients. - /// - /// The coefficient for nth degree is at the nth index in array. Therefore the order of coefficients are reversed than the usual order for writing polynomials mathematically. - pub fn coefficients(&self) -> &[f64; N] { - &self.coefficients - } - /// Return a mutable reference to the coefficients. /// /// The coefficient for nth degree is at the nth index in array. Therefore the order of coefficients are reversed than the usual order for writing polynomials mathematically. @@ -83,98 +70,6 @@ impl Polynomial { ans.derivative_mut(); ans } - - /// Computes the antiderivative at `C = 0`. - /// - /// Returns `None` if the polynomial is not big enough to accommodate the extra degree. - pub fn antiderivative(&self) -> Option> { - let mut ans = *self; - ans.antiderivative_mut()?; - Some(ans) - } -} - -impl Default for Polynomial { - fn default() -> Self { - Self::zero() - } -} - -impl Display for Polynomial { - fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { - let mut first = true; - for (index, coefficient) in self.coefficients.iter().enumerate().rev().filter(|&(_, &coefficient)| coefficient != 0.) { - if first { - first = false; - } else { - f.write_str(" + ")? - } - - coefficient.fmt(f)?; - if index == 0 { - continue; - } - f.write_str("x")?; - if index == 1 { - continue; - } - f.write_str("^")?; - index.fmt(f)?; - } - - Ok(()) - } -} - -impl AddAssign<&Polynomial> for Polynomial { - fn add_assign(&mut self, rhs: &Polynomial) { - self.coefficients.iter_mut().zip(rhs.coefficients.iter()).for_each(|(a, b)| *a += b); - } -} - -impl Add for &Polynomial { - type Output = Polynomial; - - fn add(self, other: &Polynomial) -> Polynomial { - let mut output = *self; - output += other; - output - } -} - -impl Neg for &Polynomial { - type Output = Polynomial; - - fn neg(self) -> Polynomial { - let mut output = *self; - output.coefficients.iter_mut().for_each(|x| *x = -*x); - output - } -} - -impl Neg for Polynomial { - type Output = Polynomial; - - fn neg(mut self) -> Polynomial { - self.coefficients.iter_mut().for_each(|x| *x = -*x); - self - } -} - -impl SubAssign<&Polynomial> for Polynomial { - fn sub_assign(&mut self, rhs: &Polynomial) { - self.coefficients.iter_mut().zip(rhs.coefficients.iter()).for_each(|(a, b)| *a -= b); - } -} - -impl Sub for &Polynomial { - type Output = Polynomial; - - fn sub(self, other: &Polynomial) -> Polynomial { - let mut output = *self; - output -= other; - output - } } impl MulAssign<&Polynomial> for Polynomial { @@ -248,18 +143,6 @@ mod test { assert_eq!(p2.as_size::<2>(), None); } - #[test] - fn addition_and_subtaction() { - let p1 = Polynomial::new([1., 2., 3.]); - let p2 = Polynomial::new([4., 5., 6.]); - - let addition = Polynomial::new([5., 7., 9.]); - let subtraction = Polynomial::new([-3., -3., -3.]); - - assert_eq!(&p1 + &p2, addition); - assert_eq!(&p1 - &p2, subtraction); - } - #[test] fn multiplication() { let p1 = Polynomial::new([1., 2., 3.]).as_size().unwrap(); @@ -278,15 +161,10 @@ mod test { assert_eq!(p.derivative(), p_deriv); p.coefficients_mut()[0] = 0.; - assert_eq!(p_deriv.antiderivative().unwrap(), p); + let mut antiderivative = p_deriv; + assert_eq!(antiderivative.antiderivative_mut(), Some(())); + assert_eq!(antiderivative, p); - assert_eq!(p.antiderivative(), None); - } - - #[test] - fn display() { - let p = Polynomial::new([1., 2., 0., 3.]); - - assert_eq!(format!("{p:.2}"), "3.00x^3 + 2.00x + 1.00"); + assert_eq!(p.antiderivative_mut(), None); } } diff --git a/node-graph/libraries/core-types/src/math/rect.rs b/node-graph/libraries/core-types/src/math/rect.rs index 4998eddb3a..d4ff900528 100644 --- a/node-graph/libraries/core-types/src/math/rect.rs +++ b/node-graph/libraries/core-types/src/math/rect.rs @@ -36,13 +36,6 @@ impl Rect { bounds } - /// Get all the edges in the rect. - #[must_use] - pub fn edges(&self) -> [[DVec2; 2]; 4] { - let corners = [self[0], DVec2::new(self[0].x, self[1].y), self[1], DVec2::new(self[1].y, self[0].x)]; - [[corners[0], corners[1]], [corners[1], corners[2]], [corners[2], corners[3]], [corners[3], corners[0]]] - } - /// Gets the center of a rect #[must_use] pub fn center(&self) -> DVec2 { diff --git a/node-graph/libraries/core-types/src/misc.rs b/node-graph/libraries/core-types/src/misc.rs index 8fb447662d..a83994d9cd 100644 --- a/node-graph/libraries/core-types/src/misc.rs +++ b/node-graph/libraries/core-types/src/misc.rs @@ -61,6 +61,27 @@ impl Clampable for DVec2 { } } +// Implement for ranked wires (element-wise clamping across the frame) +use crate::list::{Item, List}; +impl Clampable for Item { + fn clamp_hard_min(self, min: f64) -> Self { + let (element, attributes) = self.into_parts(); + Item::from_parts(element.clamp_hard_min(min), attributes) + } + fn clamp_hard_max(self, max: f64) -> Self { + let (element, attributes) = self.into_parts(); + Item::from_parts(element.clamp_hard_max(max), attributes) + } +} +impl Clampable for List { + fn clamp_hard_min(self, min: f64) -> Self { + self.into_iter().map(|item| item.clamp_hard_min(min)).collect() + } + fn clamp_hard_max(self, max: f64) -> Self { + self.into_iter().map(|item| item.clamp_hard_max(max)).collect() + } +} + #[cfg(feature = "serde")] #[derive(serde::Deserialize)] struct LegacyTable { @@ -68,8 +89,8 @@ struct LegacyTable { element: Vec, } -// TODO: Eventually remove this migration document upgrade code -pub fn migrate_to_optional_color<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { +// TODO: Eventually remove this document upgrade code +pub fn migrate_to_color<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result { use no_std_types::color::Color; use serde::Deserialize; @@ -81,12 +102,12 @@ pub fn migrate_to_optional_color<'de, D: serde::Deserializer<'de>>(deserializer: } Ok(match ColorFormat::deserialize(deserializer)? { - ColorFormat::OptionalColor(color) => color, - ColorFormat::List(list) => list.element.into_iter().next(), + ColorFormat::OptionalColor(color) => color.unwrap_or(Color::TRANSPARENT), + ColorFormat::List(list) => list.element.into_iter().next().unwrap_or(Color::TRANSPARENT), }) } -// TODO: Eventually remove this migration document upgrade code +// TODO: Eventually remove this document upgrade code pub fn migrate_to_f64_array<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { use serde::Deserialize; @@ -103,6 +124,11 @@ pub fn migrate_to_f64_array<'de, D: serde::Deserializer<'de>>(deserializer: D) - }) } +/// Parses a comma or space separated list of numbers, skipping any pieces that fail to parse. +pub fn parse_f64_list(text: &str) -> Vec { + text.split([',', ' ']).filter(|piece| !piece.is_empty()).filter_map(|piece| piece.parse::().ok()).collect() +} + /// Parse a CSS color string (named color, hex, `rgb(...)`, `hsl(...)`, etc.) into a linear-light [`Color`] using the `color` crate's CSS Color 4 parser. /// Tries the input as-is first (catches CSS named colors like `red`, `rgb(...)`, and well-formed hex like `#abcdef`), then falls back to treating the input as bare hex with length-based expansion to a CSS-parseable form: /// - 1 char `f` β†’ `#fff` (CSS 3-char shorthand) diff --git a/node-graph/libraries/core-types/src/none.rs b/node-graph/libraries/core-types/src/none.rs new file mode 100644 index 0000000000..e99012fbeb --- /dev/null +++ b/node-graph/libraries/core-types/src/none.rs @@ -0,0 +1,9 @@ +use dyn_any::DynAny; +use graphene_hash::CacheHash; + +/// An artist's declaration that there is no content here, distinct from the `()` type's "nothing was wired". +/// Visually represented as a red slash over a white background. Akin to the CSS `none` keyword. +/// +/// Because its name matches the Rust prelude's `Option::None` variant, we always reference this as `none::None`. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash, CacheHash, DynAny)] +pub struct None; diff --git a/node-graph/libraries/core-types/src/ops.rs b/node-graph/libraries/core-types/src/ops.rs index f08ece4e2d..a196672d01 100644 --- a/node-graph/libraries/core-types/src/ops.rs +++ b/node-graph/libraries/core-types/src/ops.rs @@ -1,6 +1,7 @@ use crate::list::{Attribute, AttributeDyn, AttributeValueDyn, Item, List, ListDyn}; +use crate::math::float_noise::round_away_float_noise; use crate::transform::Footprint; -use glam::DVec2; +use glam::{DAffine2, DVec2}; use graphene_hash::CacheHash; /// The [`Convert`] trait allows for conversion between Rust primitive numeric types. @@ -17,11 +18,26 @@ pub trait ConvertAsync: Sized { fn convert(self, footprint: Footprint, converter: C) -> crate::runtime::SourceFuture; } -impl Convert for T { - /// Converts this type into a `String` using its `ToString` implementation. +/// Implements the [`Convert`] trait for formatting a type into a `String` via [`ToString`]. +macro_rules! impl_convert_to_string { + ($($from:ty),* $(,)?) => { + $( + impl Convert for $from { + #[inline] + fn convert(self, _: Footprint, _converter: ()) -> String { + self.to_string() + } + } + )* + }; +} +impl_convert_to_string!(f32, u32, u64, i32, i64, bool, DVec2, DAffine2); + +// Denoised so 0.1 + 0.2 reaches the string as "0.3" rather than "0.30000000000000004" +impl Convert for f64 { #[inline] fn convert(self, _: Footprint, _converter: ()) -> String { - self.to_string() + round_away_float_noise(self).to_string() } } @@ -77,8 +93,7 @@ impl Convert for DVec2 { } /// Constructs `Self` from a single anchor point at the given position. Implemented by the vector crate's -/// path type so the `Convert` impl below can build a single-point path without core-types depending on -/// that crate (mirroring how [`ListConvert`] bridges per-item list conversions). +/// path type so a position wire can convert to a single-point path without core-types depending on that crate. pub trait FromAnchorPosition { fn from_anchor_position(position: DVec2) -> Self; } diff --git a/node-graph/libraries/core-types/src/registry.rs b/node-graph/libraries/core-types/src/registry.rs index d8c7610245..1b8b9c8db9 100644 --- a/node-graph/libraries/core-types/src/registry.rs +++ b/node-graph/libraries/core-types/src/registry.rs @@ -1,7 +1,7 @@ use crate::concrete; use crate::context::{Context, ContextImpl}; use crate::node::Node; -use crate::{ContextFeature, ProtoNodeIdentifier, Type, WasmNotSend, WasmNotSync}; +use crate::{Color, ContextFeature, ProtoNodeIdentifier, Type, WasmNotSend, WasmNotSync}; use dyn_any::DynAny; use graphene_hash::CacheHash; pub use no_std_types::registry::types; @@ -35,6 +35,8 @@ pub struct FieldMetadata { pub exposed: bool, pub widget_override: RegistryWidgetOverride, pub value_source: RegistryValueSource, + /// The default expression's colors, resolved by the macro when the expression consists solely of `Color::*` constants. + pub default_colors: Option<&'static [Color]>, pub default_type: Option, /// The slider's suggested extent, from `#[soft(a..b)]`. Typed values may exceed it. pub number_soft_min: Option, diff --git a/node-graph/libraries/core-types/src/render_complexity.rs b/node-graph/libraries/core-types/src/render_complexity.rs index 691c644aa4..b9bbeeb201 100644 --- a/node-graph/libraries/core-types/src/render_complexity.rs +++ b/node-graph/libraries/core-types/src/render_complexity.rs @@ -1,6 +1,6 @@ // Raster types moved to raster-types crate use crate::Color; -use crate::list::List; +use crate::list::{Item, List}; pub trait RenderComplexity { fn render_complexity(&self) -> usize { @@ -8,6 +8,12 @@ pub trait RenderComplexity { } } +impl RenderComplexity for Item { + fn render_complexity(&self) -> usize { + self.element().render_complexity() + } +} + impl RenderComplexity for List { fn render_complexity(&self) -> usize { self.iter_element_values().map(|element| element.render_complexity()).fold(0, usize::saturating_add) diff --git a/node-graph/libraries/core-types/src/transform.rs b/node-graph/libraries/core-types/src/transform.rs index 60c32887e8..7f2aa272a6 100644 --- a/node-graph/libraries/core-types/src/transform.rs +++ b/node-graph/libraries/core-types/src/transform.rs @@ -217,6 +217,23 @@ impl From<()> for Footprint { } } +/// Consumes an item's `transform` attribute by baking it into the underlying value itself. +pub trait BakeTransform { + fn bake_transform(&mut self, transform: &DAffine2); +} + +impl BakeTransform for DAffine2 { + fn bake_transform(&mut self, transform: &DAffine2) { + *self = *transform * *self; + } +} + +impl BakeTransform for DVec2 { + fn bake_transform(&mut self, transform: &DAffine2) { + *self = transform.transform_point2(*self); + } +} + pub trait ApplyTransform { fn apply_transform(&mut self, modification: &DAffine2); fn left_apply_transform(&mut self, modification: &DAffine2); diff --git a/node-graph/libraries/core-types/src/types.rs b/node-graph/libraries/core-types/src/types.rs index 566ba44241..0a5b2b5889 100644 --- a/node-graph/libraries/core-types/src/types.rs +++ b/node-graph/libraries/core-types/src/types.rs @@ -61,8 +61,48 @@ macro_rules! generic { ($type:ty) => {{ $crate::Type::Generic($crate::Cow::Borrowed(stringify!($type))) }}; } +/// Constructs the [`Type`] of an `Item` holding the given element type, e.g. `item!(f64)` is the type of an `Item`. +/// The two-argument form tags the element descriptor with an alias, preserving the source spelling for widget dispatch. +#[macro_export] +macro_rules! item { + (Item<$inner:ty>) => { + $crate::Type::Item(Box::new($crate::item!($inner))) + }; + ($element:ty) => { + $crate::Type::Item(Box::new($crate::concrete!($element))) + }; + ($element:ty, $alias:ty) => { + $crate::Type::Item(Box::new($crate::concrete!($element, $alias))) + }; +} + +/// Constructs the [`Type`] of a `List` holding the given element type, e.g. `list!(f64)` is the type of a `List`. +#[macro_export] +macro_rules! list { + (List<$inner:ty>) => { + $crate::Type::List(Box::new($crate::list!($inner))) + }; + ($element:ty) => { + $crate::Type::List(Box::new($crate::concrete!($element))) + }; +} + +// The `List<...>`/`Item<...>` rules must appear before the generic `$type:ty` rules, and in each macro that sees the literal tokens, +// because a type captured as `ty` becomes opaque to any inner macro's ranked pattern #[macro_export] macro_rules! future { + (List<$inner:ty>) => { + $crate::Type::Future(Box::new($crate::list!($inner))) + }; + (List<$inner:ty>, $name:ty) => { + $crate::Type::Future(Box::new($crate::list!($inner))) + }; + (Item<$inner:ty>) => { + $crate::Type::Future(Box::new($crate::item!($inner))) + }; + (Item<$inner:ty>, $name:ty) => { + $crate::Type::Future(Box::new($crate::item!($inner, $name))) + }; ($type:ty) => {{ $crate::Type::Future(Box::new(concrete!($type))) }}; ($type:ty, $name:ty) => { $crate::Type::Future(Box::new(concrete!($type, $name))) @@ -71,9 +111,27 @@ macro_rules! future { #[macro_export] macro_rules! fn_type_fut { + (List<$inner:ty>) => { + $crate::Type::Fn(Box::new(concrete!(())), Box::new($crate::Type::Future(Box::new($crate::list!($inner))))) + }; + (Item<$inner:ty>) => { + $crate::Type::Fn(Box::new(concrete!(())), Box::new($crate::Type::Future(Box::new($crate::item!($inner))))) + }; ($type:ty) => { $crate::Type::Fn(Box::new(concrete!(())), Box::new(future!($type))) }; + ($in_type:ty, List<$inner:ty>, alias: $outname:ty) => { + $crate::Type::Fn(Box::new(concrete!($in_type)), Box::new($crate::Type::Future(Box::new($crate::list!($inner))))) + }; + ($in_type:ty, List<$inner:ty>) => { + $crate::Type::Fn(Box::new(concrete!($in_type)), Box::new($crate::Type::Future(Box::new($crate::list!($inner))))) + }; + ($in_type:ty, Item<$inner:ty>, alias: $outname:ty) => { + $crate::Type::Fn(Box::new(concrete!($in_type)), Box::new($crate::Type::Future(Box::new($crate::item!($inner, $inner))))) + }; + ($in_type:ty, Item<$inner:ty>) => { + $crate::Type::Fn(Box::new(concrete!($in_type)), Box::new($crate::Type::Future(Box::new($crate::item!($inner))))) + }; ($in_type:ty, $type:ty, alias: $outname:ty) => { $crate::Type::Fn(Box::new(concrete!($in_type)), Box::new(future!($type, $outname))) }; @@ -375,12 +433,13 @@ pub fn make_type_user_readable(ty: &str) -> String { .replace("UVec2", "Vec2") .replace("&str", "String"); - rewrite_list_as_array_brackets(&ty) + rewrite_ranked_type_wrappers(&ty) } -/// Rewrites `List` as `T[]`. Handles nesting (e.g. `List>` becomes `Vector[][]`). -/// Respects word boundaries so unrelated identifiers that happen to end in `List` are not affected. -fn rewrite_list_as_array_brackets(input: &str) -> String { +/// Rewrites `List` and the whole-collection `Bundle` as `T[]`, and unwraps `Item` to `T`, so ranked wires read as their element type. +/// Handles nesting (e.g. `List>` becomes `Vector[][]`). +/// Respects word boundaries so unrelated identifiers that happen to end in `List` or `Item` are not affected. +fn rewrite_ranked_type_wrappers(input: &str) -> String { let bytes = input.as_bytes(); let mut result = String::with_capacity(input.len()); let mut i = 0; @@ -391,12 +450,31 @@ fn rewrite_list_as_array_brackets(input: &str) -> String { let inner_start = i + b"List<".len(); if let Some(close) = find_matching_angle_bracket(bytes, inner_start) { let inner = &input[inner_start..close]; - result.push_str(&rewrite_list_as_array_brackets(inner)); + result.push_str(&rewrite_ranked_type_wrappers(inner)); result.push_str("[]"); i = close + 1; continue; } } + if at_word_boundary && bytes[i..].starts_with(b"Bundle<") { + let inner_start = i + b"Bundle<".len(); + if let Some(close) = find_matching_angle_bracket(bytes, inner_start) { + let inner = &input[inner_start..close]; + result.push_str(&rewrite_ranked_type_wrappers(inner)); + result.push_str("[]"); + i = close + 1; + continue; + } + } + if at_word_boundary && bytes[i..].starts_with(b"Item<") { + let inner_start = i + b"Item<".len(); + if let Some(close) = find_matching_angle_bracket(bytes, inner_start) { + let inner = &input[inner_start..close]; + result.push_str(&rewrite_ranked_type_wrappers(inner)); + i = close + 1; + continue; + } + } if bytes[i].is_ascii() { result.push(bytes[i] as char); i += 1; diff --git a/node-graph/libraries/graphene-hash/src/lib.rs b/node-graph/libraries/graphene-hash/src/lib.rs index d0d30e0460..9140060c41 100644 --- a/node-graph/libraries/graphene-hash/src/lib.rs +++ b/node-graph/libraries/graphene-hash/src/lib.rs @@ -57,6 +57,7 @@ impl_via_hash! { bool, char, u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize, + core::time::Duration, // glam integer vector types have Hash glam::UVec2, glam::UVec3, glam::UVec4, glam::IVec2, glam::IVec3, glam::IVec4, @@ -68,7 +69,6 @@ impl_via_hash! { #[cfg(feature = "std")] impl_via_hash! { String, - core::time::Duration, } impl<'a> CacheHash for std::borrow::Cow<'a, str> { diff --git a/node-graph/libraries/graphic-types/Cargo.toml b/node-graph/libraries/graphic-types/Cargo.toml index 6c9e0c23c4..0762710a89 100644 --- a/node-graph/libraries/graphic-types/Cargo.toml +++ b/node-graph/libraries/graphic-types/Cargo.toml @@ -20,6 +20,7 @@ wasm = [ # Local dependencies core-types = { workspace = true } graphene-hash = { workspace = true } +brush-types = { workspace = true } raster-types = { workspace = true, features = ["wgpu"] } vector-types = { workspace = true } node-macro = { workspace = true } diff --git a/node-graph/libraries/graphic-types/src/appearance.rs b/node-graph/libraries/graphic-types/src/appearance.rs new file mode 100644 index 0000000000..804cc925d5 --- /dev/null +++ b/node-graph/libraries/graphic-types/src/appearance.rs @@ -0,0 +1,386 @@ +//! The appearance model: an ordered list of paint passes ("coverages") stored in the `ATTR_APPEARANCE` attribute. +//! Data uniform across all covers (the paint) rides the outer `List` so columnar presence holds, +//! while cover-specific data rides the inner `Item`, reusing `ATTR_TRANSFORM` for the stroke-authoring space. + +use crate::graphic::Graphic; +use core_types::graphene_hash::CacheHash; +use core_types::list::{ATTR_ALIGN, ATTR_APPEARANCE, ATTR_CAP, ATTR_DASH_OFFSET, ATTR_DASH_PATTERN, ATTR_JOIN, ATTR_JOIN_MITER_LIMIT, ATTR_PAINT, ATTR_TRANSFORM, ATTR_WEIGHT, Item, List}; +use vector_types::vector::style::{DashPattern, Stroke}; + +/// The geometry-to-region operator a coverage applies before painting: +/// the interior of the geometry (fill) or the region swept along its outline (stroke). +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, CacheHash)] +pub enum Cover { + #[default] + Fill, + Stroke, +} + +impl std::fmt::Display for Cover { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Fill => write!(f, "Fill"), + Self::Stroke => write!(f, "Stroke"), + } + } +} + +/// One paint pass of an [`Appearance`]: a [`Cover`] plus its cover-specific parameters, carried as +/// attributes on the inner item. Attributes for stroke parameters are ignored on fill coverages. +#[derive(Clone, Debug, Default, PartialEq, CacheHash)] +pub struct Coverage(pub Item); + +/// An item's ordered list of paint passes, stored in the `ATTR_APPEARANCE` attribute cell. +/// Earlier coverages paint first, compositing below later ones. Each row's paint is the +/// `ATTR_PAINT` attribute beside it. +/// +/// The empty appearance is its elided attribute default form, and the state in which it is +/// replaced by an inherited appearance from an outer level of the cascade. +#[derive(Clone, Debug, Default, PartialEq, CacheHash)] +pub struct Appearance(pub List); + +/// Where a newly inserted coverage lands in the paint order when no same-cover coverage exists to replace. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum CoverPlacement { + /// The front of the list, painting first (below every existing pass). + Below, + /// The back of the list, painting last (above every existing pass). + Above, +} + +impl Coverage { + /// Creates a fill coverage with no parameters beyond its cover. + pub fn new_fill() -> Self { + Self(Item::new_from_element(Cover::Fill)) + } + + /// Creates a stroke coverage, stamping only the parameters that differ from their implicit defaults. + pub fn new_stroke(stroke: &Stroke) -> Self { + let defaults = Stroke::default(); + let mut item = Item::new_from_element(Cover::Stroke); + + if stroke.weight != defaults.weight { + item.set_attribute(ATTR_WEIGHT, stroke.weight); + } + if !stroke.dash_lengths.is_empty() { + item.set_attribute(ATTR_DASH_PATTERN, DashPattern::from(stroke.dash_lengths.clone())); + } + if stroke.dash_offset != defaults.dash_offset { + item.set_attribute(ATTR_DASH_OFFSET, stroke.dash_offset); + } + if stroke.cap != defaults.cap { + item.set_attribute(ATTR_CAP, stroke.cap); + } + if stroke.join != defaults.join { + item.set_attribute(ATTR_JOIN, stroke.join); + } + if stroke.join_miter_limit != defaults.join_miter_limit { + item.set_attribute(ATTR_JOIN_MITER_LIMIT, stroke.join_miter_limit); + } + if stroke.align != defaults.align { + item.set_attribute(ATTR_ALIGN, stroke.align); + } + if stroke.transform != defaults.transform { + item.set_attribute(ATTR_TRANSFORM, stroke.transform); + } + + Self(item) + } + + /// This coverage's cover. + pub fn cover(&self) -> Cover { + *self.0.element() + } + + /// Extracts the stroke parameters into a [`Stroke`], falling back to the default for any absent attribute. + /// Dash lengths are clamped to non-negative, matching what rendering accepts. + pub fn stroke_params(&self) -> Stroke { + // A single walk of the attribute pairs instead of one keyed scan per parameter, since this runs per item per render pass + let mut stroke = Stroke::default(); + for (key, value) in self.0.attributes().iter_any() { + match key { + ATTR_WEIGHT => stroke.weight = value.downcast_ref().copied().unwrap_or(stroke.weight), + ATTR_DASH_PATTERN => stroke.dash_lengths = value.downcast_ref::().map(DashPattern::clamped_lengths).unwrap_or(stroke.dash_lengths), + ATTR_DASH_OFFSET => stroke.dash_offset = value.downcast_ref().copied().unwrap_or(stroke.dash_offset), + ATTR_CAP => stroke.cap = value.downcast_ref().copied().unwrap_or(stroke.cap), + ATTR_JOIN => stroke.join = value.downcast_ref().copied().unwrap_or(stroke.join), + ATTR_JOIN_MITER_LIMIT => stroke.join_miter_limit = value.downcast_ref().copied().unwrap_or(stroke.join_miter_limit), + ATTR_ALIGN => stroke.align = value.downcast_ref().copied().unwrap_or(stroke.align), + ATTR_TRANSFORM => stroke.transform = value.downcast_ref().copied().unwrap_or(stroke.transform), + _ => {} + } + } + stroke + } +} + +/// Builds an appearance row, eliding the paint attribute when it is the default none-paint. +fn cover_row(coverage: Coverage, paint: Graphic<'static>) -> Item { + let mut row = Item::new_from_element(coverage); + if paint != Graphic::default() { + row.set_attribute(ATTR_PAINT, paint); + } + row +} + +impl Appearance { + /// Creates an appearance holding a single coverage with the given paint. + pub fn new_single(coverage: Coverage, paint: Graphic<'static>) -> Self { + Self(List::new_from_item(cover_row(coverage, paint))) + } + + /// The number of coverages in this appearance. + pub fn len(&self) -> usize { + self.0.len() + } + + /// Whether this appearance holds no coverages, the undeclared state that defers to the cascade. + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } + + /// This appearance if it declares any coverages, or `None` for the undeclared (empty) state. + pub fn declared(&self) -> Option<&Self> { + (!self.is_empty()).then_some(self) + } + + /// Resolves the cascade for one item: its own declared appearance wins, while an undeclared + /// (absent or empty) cell inherits the nearest ancestor's declared appearance. + pub fn cascade<'a>(own: Option<&'a Self>, inherited: Option<&'a Self>) -> Option<&'a Self> { + own.and_then(Self::declared).or(inherited) + } + + /// Iterates the coverages in paint order. + pub fn covers(&self) -> impl Iterator { + self.0.iter_element_values() + } + + /// The coverage at the given index in paint order. + pub fn cover_at(&self, index: usize) -> Option<&Coverage> { + self.0.element(index) + } + + /// The paint of the coverage at the given index, or `None` if the paint attribute is absent. + pub fn paint_at(&self, index: usize) -> Option<&Graphic<'static>> { + self.0.attribute::>(ATTR_PAINT, index) + } + + /// The index of the first coverage of the given cover in paint order. + pub fn first_index_of(&self, cover: Cover) -> Option { + self.covers().position(|coverage| coverage.cover() == cover) + } + + /// The first coverage of the given cover in paint order. + pub fn first_coverage_of(&self, cover: Cover) -> Option<&Coverage> { + self.first_index_of(cover).and_then(|index| self.cover_at(index)) + } + + /// The paint of the first coverage of the given cover, filtered to paint that draws something. + pub fn first_paint_of(&self, cover: Cover) -> Option<&Graphic<'static>> { + self.first_index_of(cover).and_then(|index| self.paint_at(index)).filter(|paint| !paint.is_empty()) + } + + /// Iterates the coverages in paint order together with their paint, which is `None` when absent or drawing nothing. + pub fn covers_with_paints(&self) -> impl Iterator>)> { + self.covers().enumerate().map(|(index, coverage)| (coverage, self.paint_at(index).filter(|paint| !paint.is_empty()))) + } + + /// Gathers the renderer's per-item reads in one walk of the coverage list. + pub fn fill_and_stroke(&self) -> FillAndStroke<'_> { + let mut first_fill = None; + let mut first_stroke = None; + for (index, coverage) in self.covers().enumerate() { + match coverage.cover() { + Cover::Fill if first_fill.is_none() => first_fill = Some(index), + Cover::Stroke if first_stroke.is_none() => first_stroke = Some((index, coverage)), + _ => {} + } + } + + let painted = |index| self.paint_at(index).filter(|paint| !paint.is_empty()); + FillAndStroke { + stroke: first_stroke.map(|(_, coverage)| coverage.stroke_params()), + fill_paint: first_fill.and_then(painted), + stroke_paint: first_stroke.and_then(|(index, _)| painted(index)), + stroke_below: first_stroke.zip(first_fill).is_some_and(|((stroke_index, _), fill_index)| stroke_index < fill_index), + } + } + + /// Whether any coverage of the given cover exists, regardless of whether its paint draws anything. + pub fn has_cover(&self, cover: Cover) -> bool { + self.first_index_of(cover).is_some() + } + + /// Whether any coverage of the given cover has paint that draws something, i.e. paint that is + /// present and not empty. A coverage whose paint is [`Graphic::None`] exists but paints nothing. + pub fn has_painted_cover(&self, cover: Cover) -> bool { + self.covers() + .enumerate() + .any(|(index, coverage)| coverage.cover() == cover && self.paint_at(index).is_some_and(|paint| !paint.is_empty())) + } + + /// Replaces the first coverage of the incoming cover in place (keeping its position in the paint order), + /// or inserts a new row at the requested end of the paint order if none exists. + pub fn replace_or_insert(&mut self, coverage: Coverage, paint: Graphic<'static>, placement: CoverPlacement) { + if let Some(index) = self.first_index_of(coverage.cover()) { + if let Some(element) = self.0.element_mut(index) { + *element = coverage; + } + self.0.set_attribute(ATTR_PAINT, index, paint); + return; + } + + let row = cover_row(coverage, paint); + match placement { + CoverPlacement::Above => self.0.push(row), + CoverPlacement::Below => { + let mut reordered = List::new_from_item(row); + reordered.extend(std::mem::take(&mut self.0)); + self.0 = reordered; + } + } + } + + /// Sets the paint of the first coverage of the given cover, leaving its other parameters untouched. + /// Returns `false` without changing anything if no coverage of that cover exists. + pub fn set_paint_of(&mut self, cover: Cover, paint: Graphic<'static>) -> bool { + let Some(index) = self.first_index_of(cover) else { return false }; + self.0.set_attribute(ATTR_PAINT, index, paint); + true + } + + /// Discards every coverage that is not of the given cover, preserving the survivors' paint order. + pub fn retain_cover(&mut self, cover: Cover) { + self.0 = std::mem::take(&mut self.0).into_iter().filter(|row| row.element().cover() == cover).collect(); + } +} + +/// The first fill and stroke of an appearance in the form rendering consumes: the stroke's parameters, +/// each cover's first paint (filtered to paint that draws something), and their relative paint order. +#[derive(Debug, Default)] +pub struct FillAndStroke<'a> { + pub stroke: Option, + pub fill_paint: Option<&'a Graphic<'static>>, + pub stroke_paint: Option<&'a Graphic<'static>>, + /// Whether the first stroke coverage sits before the first fill in the paint order, painting below it. + pub stroke_below: bool, +} + +/// Stamps a coverage into the item's `ATTR_APPEARANCE` cell, creating the attribute if absent. +/// The coverage replaces the first same-cover one in place, or lands at the placement end of the paint order. +pub fn stamp_coverage(item: &mut Item, coverage: Coverage, paint: Graphic<'static>, placement: CoverPlacement) { + item.attribute_mut_or_insert_default::(ATTR_APPEARANCE).replace_or_insert(coverage, paint, placement); +} + +#[cfg(test)] +mod tests { + use super::*; + use core_types::Color; + use glam::{DAffine2, DVec2}; + use vector_types::vector::style::{StrokeAlign, StrokeCap, StrokeJoin}; + + // Our leaf holds the element bare, so a solid paint is the color leaf itself. + fn solid_paint(color: Color) -> Graphic<'static> { + Graphic::Color(color) + } + + fn paint_color(appearance: &Appearance, index: usize) -> Option { + let paint = appearance.paint_at(index)?; + let Graphic::Color(color) = paint else { return None }; + Some(*color) + } + + #[test] + fn stroke_params_survive_the_attribute_round_trip() { + let stroke = Stroke { + weight: 3., + dash_lengths: vec![4., -2.], + dash_offset: 1.5, + cap: StrokeCap::Round, + join: StrokeJoin::Bevel, + join_miter_limit: 7., + align: StrokeAlign::Inside, + transform: DAffine2::from_scale(DVec2::new(2., 3.)), + }; + + let coverage = Coverage::new_stroke(&stroke); + assert_eq!(coverage.cover(), Cover::Stroke); + + let extracted = coverage.stroke_params(); + assert_eq!(extracted.weight, 3.); + assert_eq!(extracted.dash_lengths, vec![4., 0.], "negative dash lengths should clamp to zero on extraction"); + assert_eq!(extracted.dash_offset, 1.5); + assert_eq!(extracted.cap, StrokeCap::Round); + assert_eq!(extracted.join, StrokeJoin::Bevel); + assert_eq!(extracted.join_miter_limit, 7.); + assert_eq!(extracted.align, StrokeAlign::Inside); + assert_eq!(extracted.transform, DAffine2::from_scale(DVec2::new(2., 3.))); + } + + #[test] + fn empty_appearance_is_undeclared_and_defers_to_the_cascade() { + let inherited = Appearance::new_single(Coverage::new_fill(), solid_paint(Color::BLACK)); + let empty = Appearance::default(); + + assert!(empty.declared().is_none(), "an empty appearance should be undeclared"); + assert!(inherited.declared().is_some(), "an appearance with a coverage should be declared"); + + assert_eq!(Appearance::cascade(Some(&empty), Some(&inherited)), Some(&inherited)); + assert_eq!(Appearance::cascade(None, Some(&inherited)), Some(&inherited)); + assert_eq!(Appearance::cascade(Some(&inherited), None), Some(&inherited)); + assert_eq!(Appearance::cascade(Some(&empty), None), None); + assert_eq!(Appearance::cascade(None, None), None); + } + + #[test] + fn default_valued_stroke_parameters_elide_to_absence() { + let coverage = Coverage::new_stroke(&Stroke::default()); + assert_eq!(coverage.0.attributes().keys().count(), 0, "default parameters should stay absent"); + assert_eq!(coverage.stroke_params(), Stroke::default(), "absent attributes should read back as the defaults"); + + let coverage = Coverage::new_stroke(&Stroke::new(2.)); + let keys: Vec<_> = coverage.0.attributes().keys().collect(); + assert_eq!(keys, vec![ATTR_WEIGHT], "only the non-default weight should be stamped"); + assert_eq!(coverage.stroke_params().weight, 2.); + } + + #[test] + fn replace_keeps_position_and_the_other_rows_paint() { + let mut appearance = Appearance::default(); + appearance.replace_or_insert(Coverage::new_fill(), solid_paint(Color::RED), CoverPlacement::Above); + appearance.replace_or_insert(Coverage::new_stroke(&Stroke::new(2.)), solid_paint(Color::BLACK), CoverPlacement::Above); + + appearance.replace_or_insert(Coverage::new_fill(), solid_paint(Color::BLUE), CoverPlacement::Above); + + assert_eq!(appearance.len(), 2, "replacement should not add a row"); + assert_eq!(appearance.cover_at(0).map(Coverage::cover), Some(Cover::Fill), "the fill should keep its position"); + assert_eq!(paint_color(&appearance, 0), Some(Color::BLUE)); + assert_eq!(paint_color(&appearance, 1), Some(Color::BLACK), "the stroke row's paint should be untouched"); + } + + #[test] + fn below_insertion_prepends_and_preserves_paint_columns() { + let mut appearance = Appearance::default(); + appearance.replace_or_insert(Coverage::new_stroke(&Stroke::new(2.)), solid_paint(Color::BLACK), CoverPlacement::Above); + appearance.replace_or_insert(Coverage::new_fill(), solid_paint(Color::RED), CoverPlacement::Below); + + let covers: Vec<_> = appearance.covers().map(Coverage::cover).collect(); + assert_eq!(covers, vec![Cover::Fill, Cover::Stroke], "a below-placed fill should paint before the stroke"); + assert_eq!(paint_color(&appearance, 0), Some(Color::RED)); + assert_eq!(paint_color(&appearance, 1), Some(Color::BLACK), "the existing row's paint should survive the reorder"); + } + + #[test] + fn painted_cover_distinguishes_none_paint_from_absence() { + let mut appearance = Appearance::default(); + appearance.replace_or_insert(Coverage::new_fill(), Graphic::default(), CoverPlacement::Above); + + assert!(appearance.has_cover(Cover::Fill), "a none-painted coverage still exists"); + assert!(!appearance.has_painted_cover(Cover::Fill), "a none-painted coverage draws nothing"); + assert!(!appearance.has_cover(Cover::Stroke)); + assert!(!appearance.has_painted_cover(Cover::Stroke)); + + appearance.replace_or_insert(Coverage::new_fill(), solid_paint(Color::RED), CoverPlacement::Above); + assert!(appearance.has_painted_cover(Cover::Fill)); + } +} diff --git a/node-graph/libraries/graphic-types/src/artboard.rs b/node-graph/libraries/graphic-types/src/artboard.rs index e2193b70d3..93f2fde822 100644 --- a/node-graph/libraries/graphic-types/src/artboard.rs +++ b/node-graph/libraries/graphic-types/src/artboard.rs @@ -12,7 +12,7 @@ use glam::DAffine2; /// enclosing `List`, not as fields here. This keeps `Artboard` a pure type-system boundary /// that prevents arbitrary `List>>` nesting. #[derive(Clone, Debug, Default, CacheHash, PartialEq, DynAny)] -pub struct Artboard<'e>(List>); +pub struct Artboard<'e>(pub List>); impl<'e> Artboard<'e> { pub fn new(content: List>) -> Self { diff --git a/node-graph/libraries/graphic-types/src/boundary.rs b/node-graph/libraries/graphic-types/src/boundary.rs index ca53dc2157..990e530904 100644 --- a/node-graph/libraries/graphic-types/src/boundary.rs +++ b/node-graph/libraries/graphic-types/src/boundary.rs @@ -13,7 +13,7 @@ use core_types::node::Node; use core_types::record::{Group, GroupItem, LevelStatus, materialize_level}; use core_types::uuid::NodeId; use glam::{DAffine2, DVec2}; -use vector_types::GradientStops; +use vector_types::Gradient; /// The outcome of materializing a leveled wire into a group. // The group is the render path's success payload; boxing it would add a heap allocation per materialized level. @@ -93,7 +93,7 @@ pub fn batch_to_legacy(layout: &core_types::record::Layout, batch: core_types::n .or_else(|| typed::>(&item)) .or_else(|| typed::>(&item)) .or_else(|| typed::(&item)) - .or_else(|| typed::(&item)) + .or_else(|| typed::(&item)) .or_else(|| typed::(&item)) .or_else(|| typed::(&item)) .or_else(|| typed::(&item)) diff --git a/node-graph/libraries/graphic-types/src/graphic/glue.rs b/node-graph/libraries/graphic-types/src/graphic/glue.rs index aa1f66b5c5..57601d01a6 100644 --- a/node-graph/libraries/graphic-types/src/graphic/glue.rs +++ b/node-graph/libraries/graphic-types/src/graphic/glue.rs @@ -12,15 +12,17 @@ use vector_types::Vector; pub fn map_groups_to_owned<'out>(graphic: &Graphic<'_>) -> Graphic<'out> { match graphic { Graphic::Group(group) => Graphic::Group(group.copy_out()), - Graphic::Graphic(children) => { + Graphic::GraphicList(children) => { let mut out = List::new(); for item in children.clone().into_iter() { let (element, attributes) = item.into_parts(); out.push(Item::from_parts(map_groups_to_owned(&element), attributes)); } map_attribute_groups_to_owned(&mut out); - Graphic::Graphic(out) + Graphic::GraphicList(out) } + Graphic::Stroke(stroke) => Graphic::Stroke(stroke.clone()), + Graphic::StrokeList(strokes) => Graphic::StrokeList(strokes.clone()), Graphic::Vector(vector) => Graphic::Vector(vector.clone()), Graphic::RasterCPU(raster) => Graphic::RasterCPU(raster.clone()), Graphic::RasterGPU(raster) => Graphic::RasterGPU(raster.clone()), @@ -35,13 +37,13 @@ pub fn map_groups_to_owned<'out>(graphic: &Graphic<'_>) -> Graphic<'out> { pub fn map_groups_to_resident<'a>(graphic: &Graphic<'a>, arena: &'a core_types::arena::Arena) -> Option> { match graphic { Graphic::Group(group) => group.replay(arena).map(Graphic::Group), - Graphic::Graphic(children) => { + Graphic::GraphicList(children) => { let mut children = children.clone(); for child in children.iter_element_values_mut() { *child = map_groups_to_resident(child, arena)?; } map_attribute_groups_to_resident(&mut children, arena)?; - Some(Graphic::Graphic(children)) + Some(Graphic::GraphicList(children)) } other => Some(other.clone()), } @@ -79,15 +81,17 @@ unsafe fn deep_repark_graphic(value: &(dyn std::any::Any + Send + Sync), dst: *m pub fn map_groups_to_persistent<'p>(graphic: &Graphic<'_>, promotion: &core_types::record::Promotion<'p>) -> Option> { match graphic { Graphic::Group(group) => group.to_persistent(promotion).map(Graphic::Group), - Graphic::Graphic(children) => { + Graphic::GraphicList(children) => { let mut out = List::new(); for item in children.clone().into_iter() { let (element, attributes) = item.into_parts(); out.push(Item::from_parts(map_groups_to_persistent(&element, promotion)?, attributes)); } map_attribute_groups_to_persistent(&mut out, promotion)?; - Some(Graphic::Graphic(out)) + Some(Graphic::GraphicList(out)) } + Graphic::Stroke(stroke) => Some(Graphic::Stroke(stroke.clone())), + Graphic::StrokeList(strokes) => Some(Graphic::StrokeList(strokes.clone())), Graphic::Vector(vector) => Some(Graphic::Vector(vector.clone())), Graphic::RasterCPU(raster) => Some(Graphic::RasterCPU(raster.clone())), Graphic::RasterGPU(raster) => Some(Graphic::RasterGPU(raster.clone())), @@ -195,7 +199,9 @@ fn graphic_retained_heap(graphic: &Graphic<'_>) -> usize { Graphic::RasterCPU(raster) => raster.data.len() * size_of::(), Graphic::Text(text) => text.len(), Graphic::Gradient(gradient) => gradient.len() * size_of::<(f64, Color)>(), - Graphic::Graphic(children) => (0..children.len()).filter_map(|index| children.element(index)).map(graphic_retained_heap).sum(), + Graphic::GraphicList(children) => (0..children.len()).filter_map(|index| children.element(index)).map(graphic_retained_heap).sum(), + Graphic::Stroke(stroke) => stroke.position.len() * size_of::(), + Graphic::StrokeList(strokes) => (0..strokes.len()).filter_map(|index| strokes.element(index)).map(|stroke| stroke.position.len() * size_of::()).sum(), Graphic::Group(_) | Graphic::RasterGPU(_) | Graphic::Color(_) => 0, } } @@ -206,7 +212,6 @@ fn vector_retained_heap(vector: &Vector) -> usize { size_of_val(vector.point_domain.ids()) + size_of_val(vector.point_domain.positions()) + size_of_val(vector.segment_domain.ids()) - + size_of_val(vector.region_domain.ids()) + size_of_val(vector.colinear_manipulators.as_slice()) } @@ -215,7 +220,7 @@ fn vector_retained_heap(vector: &Vector) -> usize { fn graphic_contains_groups(graphic: &Graphic) -> bool { match graphic { Graphic::Group(_) => true, - Graphic::Graphic(children) => list_contains_groups(children), + Graphic::GraphicList(children) => list_contains_groups(children), _ => false, } } diff --git a/node-graph/libraries/graphic-types/src/graphic/legacy.rs b/node-graph/libraries/graphic-types/src/graphic/legacy.rs index ab6f745e7a..463f602e00 100644 --- a/node-graph/libraries/graphic-types/src/graphic/legacy.rs +++ b/node-graph/libraries/graphic-types/src/graphic/legacy.rs @@ -6,7 +6,7 @@ use crate::markers::{ATTR_FILL, ATTR_STROKE}; use core_types::Color; use core_types::list::{AttributeValueDyn, Item, List}; use raster_types::{CPU, GPU, Raster}; -use vector_types::{GradientStops, Vector}; +use vector_types::{Gradient, Vector}; /// One typed run as an owned list, elements cloned and every attribute copied /// through its erased read. Content keeps its native form; the legacy @@ -52,15 +52,17 @@ pub(crate) fn run_to_legacy_list(graphic: &Graphic<'_>) -> Graphic<'out> { match graphic { Graphic::Group(group) => group_to_legacy_graphic(group), - Graphic::Graphic(children) => { + Graphic::GraphicList(children) => { let mut out = List::new(); for item in children.clone().into_iter() { let (element, attributes) = item.into_parts(); out.push(Item::from_parts(map_groups_to_legacy(&element), attributes)); } map_paint_attrs_to_legacy(&mut out); - Graphic::Graphic(out) + Graphic::GraphicList(out) } + Graphic::Stroke(stroke) => Graphic::Stroke(stroke.clone()), + Graphic::StrokeList(strokes) => Graphic::StrokeList(strokes.clone()), Graphic::Vector(vector) => Graphic::Vector(vector.clone()), Graphic::RasterCPU(raster) => Graphic::RasterCPU(raster.clone()), Graphic::RasterGPU(raster) => Graphic::RasterGPU(raster.clone()), @@ -81,13 +83,13 @@ pub fn group_to_legacy_graphic(group: &core_types::record::Group) -> Graphic<'st .or_else(|| run_to_legacy_list::>(item).map(|list| detable_items(list, Graphic::RasterCPU))) .or_else(|| run_to_legacy_list::>(item).map(|list| detable_items(list, Graphic::RasterGPU))) .or_else(|| run_to_legacy_list::(item).map(|list| detable_items(list, Graphic::Color))) - .or_else(|| run_to_legacy_list::(item).map(|list| detable_items(list, Graphic::Gradient))) + .or_else(|| run_to_legacy_list::(item).map(|list| detable_items(list, Graphic::Gradient))) .or_else(|| run_to_legacy_list::(item).map(|list| detable_items(list, Graphic::Text))); if let Some(typed) = typed { - return Graphic::Graphic(typed); + return Graphic::GraphicList(typed); } } - Graphic::Graphic(group_to_legacy_list(group)) + Graphic::GraphicList(group_to_legacy_list(group)) } /// The group as a legacy `List`: a `Graphic` run becomes the items, @@ -105,7 +107,7 @@ pub fn group_to_legacy_list(group: &core_types::record::Group) -> List>(item).map(|list| detable_items(list, Graphic::RasterCPU))) .or_else(|| run_to_legacy_list::>(item).map(|list| detable_items(list, Graphic::RasterGPU))) .or_else(|| run_to_legacy_list::(item).map(|list| detable_items(list, Graphic::Color))) - .or_else(|| run_to_legacy_list::(item).map(|list| detable_items(list, Graphic::Gradient))) + .or_else(|| run_to_legacy_list::(item).map(|list| detable_items(list, Graphic::Gradient))) .or_else(|| run_to_legacy_list::(item).map(|list| detable_items(list, Graphic::Text))) .unwrap_or_default() } diff --git a/node-graph/libraries/graphic-types/src/graphic/mod.rs b/node-graph/libraries/graphic-types/src/graphic/mod.rs index 62ae5e3db4..c429ea5c77 100644 --- a/node-graph/libraries/graphic-types/src/graphic/mod.rs +++ b/node-graph/libraries/graphic-types/src/graphic/mod.rs @@ -14,6 +14,7 @@ pub use paint::{ pub use walk::{GraphicLevel, GraphicLevelColumn, RowStep, VectorRow, direct_vector_len, flatten_vector_rows, group_is_empty, lane_attributes, run_lane_attributes, walk_vector_rows}; use walk::{group_all_clipped, group_bounding_box, group_is_fully_transparent, group_is_opaque, group_render_complexity}; +use brush_types::Stroke; use core_types::bounds::{BoundingBox, RenderBoundingBox}; use core_types::graphene_hash::CacheHash; use core_types::list::{Item, List}; @@ -24,7 +25,7 @@ use core_types::{ATTR_CLIPPING_MASK, ATTR_EDITOR_LAYER_PATH, ATTR_OPACITY, ATTR_ use dyn_any::DynAny; use glam::{DAffine2, DVec2}; use raster_types::{CPU, GPU, Raster}; -use vector_types::GradientStops; +use vector_types::Gradient; pub use vector_types::Vector; /// The possible forms of graphical content that can be rendered by the Render node into either an image or SVG syntax. @@ -33,19 +34,22 @@ pub use vector_types::Vector; /// transitionally the legacy `Graphic` list. #[derive(Clone, Debug, CacheHash, PartialEq, DynAny)] pub enum Graphic<'e> { - Graphic(List>), + GraphicList(List>), Vector(Vector), RasterCPU(Raster), RasterGPU(Raster), Color(Color), - Gradient(GradientStops), + Gradient(Gradient), Text(String), + Stroke(Stroke), + /// Transitional typed list, kept because master's brush nodes match on it directly. + StrokeList(List), Group(core_types::record::Group<'e>), } impl Default for Graphic<'_> { fn default() -> Self { - Self::Graphic(List::new()) + Self::GraphicList(List::new()) } } @@ -101,8 +105,9 @@ into_graphic_element! { RasterCPU: Raster; RasterGPU: Raster; Color: Color; - Gradient: GradientStops; + Gradient: Gradient; Text: String; + Stroke: Stroke; } impl IntoGraphicElement for Graphic<'static> { @@ -146,9 +151,9 @@ impl From for Graphic<'_> { } // Note: List -> Option is in gcore (Color is defined there) -// GradientStops -impl From for Graphic<'_> { - fn from(gradient: GradientStops) -> Self { +// Gradient +impl From for Graphic<'_> { + fn from(gradient: Gradient) -> Self { Graphic::Gradient(gradient) } } @@ -160,6 +165,33 @@ impl From for Graphic<'_> { } } +// Stroke +impl From for Graphic<'_> { + fn from(stroke: Stroke) -> Self { + Graphic::Stroke(stroke) + } +} + +impl From> for Graphic<'_> { + fn from(strokes: List) -> Self { + Graphic::StrokeList(strokes) + } +} + +/// Whether the list is a single bare leaf carrying no attribute of its own, so +/// wrapping it collapses no structure and rebuilding it would be busywork. +/// Master reads one `appearance` here; our paint is still the fill and stroke pair. +pub fn is_lone_anonymous_leaf(content: &List) -> bool { + content.len() == 1 + && !matches!(content.element(0), Some(Graphic::GraphicList(_))) + && content.attribute::(ATTR_TRANSFORM, 0).is_none() + && content.attribute::(ATTR_OPACITY, 0).is_none() + && content.attribute::(ATTR_OPACITY_FILL, 0).is_none() + && content.attribute::>(crate::markers::ATTR_FILL, 0).is_none() + && content.attribute::>(crate::markers::ATTR_STROKE, 0).is_none() + && content.attribute::>(ATTR_EDITOR_LAYER_PATH, 0).is_none() +} + /// Deeply flattens a `List`, collecting only elements matching a specific variant (extracted by `extract_variant`) /// and discarding all other non-matching content. Recursion through `Graphic::Graphic` sub-`List`s composes transforms and opacity. fn flatten_graphic_list(content: List, extract_variant: fn(Graphic) -> Option>) -> List { @@ -181,7 +213,7 @@ fn flatten_graphic_list(content: List, extract_variant: fn(Graphic) match element { // Compose the parent's transform/opacity/fill onto each child, but only for attributes the parent carries. // A child lacking one is padded with the composition identity (`1.` for opacity/fill, identity for transform), so composing through it is a no-op. - Graphic::Graphic(mut sub_list) => { + Graphic::GraphicList(mut sub_list) => { if parent_has_transform { for v in sub_list.iter_attribute_values_mut_or_default::(ATTR_TRANSFORM) { *v = current_transform * *v; @@ -251,7 +283,7 @@ impl TryFromGraphic for Color { } } -impl TryFromGraphic for GradientStops { +impl TryFromGraphic for Gradient { fn try_from_graphic(graphic: Graphic) -> Option> { if let Graphic::Gradient(t) = graphic { Some(List::new_from_element(t)) } else { None } } @@ -306,7 +338,7 @@ impl IntoGraphicList for List { } } -impl IntoGraphicList for List { +impl IntoGraphicList for List { fn into_graphic_list(self) -> List> { detable_items(self, Graphic::Gradient) } @@ -340,16 +372,16 @@ impl From for Graphic<'_> { // Note: List conversions handled by blanket impl in gcore impl<'e> Graphic<'e> { - pub fn as_graphic(&self) -> Option<&List>> { + pub fn as_graphic_list(&self) -> Option<&List>> { match self { - Graphic::Graphic(graphic) => Some(graphic), + Graphic::GraphicList(graphic) => Some(graphic), _ => None, } } - pub fn as_graphic_mut(&mut self) -> Option<&mut List>> { + pub fn as_graphic_list_mut(&mut self) -> Option<&mut List>> { match self { - Graphic::Graphic(graphic) => Some(graphic), + Graphic::GraphicList(graphic) => Some(graphic), _ => None, } } @@ -382,7 +414,7 @@ impl<'e> Graphic<'e> { } match self { - Graphic::Graphic(list) => all_clipped(list), + Graphic::GraphicList(list) => all_clipped(list), Graphic::Group(group) => group_all_clipped(group), _ => false, } @@ -395,42 +427,43 @@ impl<'e> Graphic<'e> { } } - pub fn is_opaque(&self) -> bool { + pub fn is_guaranteed_fully_opaque(&self) -> bool { match self { - Graphic::Graphic(list) => !list.is_empty() && list.iter_element_values().all(Graphic::is_opaque), + Graphic::GraphicList(list) => !list.is_empty() && list.iter_element_values().all(Graphic::is_guaranteed_fully_opaque), // A bare leaf carries no paint attribute, which rides its lane, so // nothing here claims opacity. Graphic::Vector(_) => false, Graphic::Color(color) => color.is_opaque(), - Graphic::Gradient(stops) => stops.iter().all(|stop| stop.color.is_opaque()), - Graphic::RasterCPU(_) | Graphic::RasterGPU(_) | Graphic::Text(_) => false, + Graphic::Gradient(gradient) => !gradient.is_empty() && gradient.iter().all(|stop| stop.color.is_opaque()), + Graphic::RasterCPU(_) | Graphic::RasterGPU(_) | Graphic::Text(_) | Graphic::Stroke(_) | Graphic::StrokeList(_) => false, Graphic::Group(group) => group_is_opaque(group), } } - pub fn is_fully_transparent(&self) -> bool { + pub fn is_guaranteed_fully_transparent(&self) -> bool { match self { - Graphic::Graphic(list) => list.iter_element_values().all(Graphic::is_fully_transparent), - // A bare leaf carries no paint attribute, so only an unstroked - // vector is invisible on its own. - Graphic::Vector(vector) => vector.stroke.as_ref().is_none_or(|stroke| !stroke.has_renderable_stroke()), + Graphic::GraphicList(list) => list.iter_element_values().all(Graphic::is_guaranteed_fully_transparent), + // A bare leaf carries no paint attribute, which rides its lane, so + // nothing here can prove invisibility. + Graphic::Vector(_) => false, Graphic::Color(color) => color.a() == 0., - Graphic::Gradient(stops) => stops.iter().all(|stop| stop.color.a() == 0.), - Graphic::RasterCPU(_) | Graphic::RasterGPU(_) | Graphic::Text(_) => false, + // A stopless ramp paints solid black, so it counts as transparent only once it has stops. + Graphic::Gradient(gradient) => !gradient.is_empty() && gradient.iter().all(|stop| stop.color.a() == 0.), + Graphic::RasterCPU(_) | Graphic::RasterGPU(_) | Graphic::Text(_) | Graphic::Stroke(_) | Graphic::StrokeList(_) => false, Graphic::Group(group) => group_is_fully_transparent(group), } } /// True if this paint opaquely covers the entire fill region. /// Vector, Raster, and a nested Graphic may leave gaps, so they return false. - pub fn covers_opaquely(&self) -> bool { - matches!(self, Graphic::Color(_) | Graphic::Gradient(_)) && self.is_opaque() + pub fn is_guaranteed_to_cover_opaquely(&self) -> bool { + matches!(self, Graphic::Color(_) | Graphic::Gradient(_)) && self.is_guaranteed_fully_opaque() } /// Whether the graphic holds no content: a leaf always holds its element. pub fn is_empty(&self) -> bool { match self { - Graphic::Graphic(list) => list.is_empty(), + Graphic::GraphicList(list) => list.is_empty(), Graphic::Group(group) => group_is_empty(group), _ => false, } @@ -443,10 +476,12 @@ impl BoundingBox for Graphic<'_> { Graphic::Vector(vector) => BoundingBox::bounding_box(vector, transform, include_stroke), Graphic::RasterCPU(raster) => raster.bounding_box(transform, include_stroke), Graphic::RasterGPU(raster) => raster.bounding_box(transform, include_stroke), - Graphic::Graphic(list) => list.bounding_box(transform, include_stroke), + Graphic::GraphicList(list) => list.bounding_box(transform, include_stroke), Graphic::Color(color) => color.bounding_box(transform, include_stroke), Graphic::Gradient(gradient) => gradient.bounding_box(transform, include_stroke), Graphic::Text(text) => text.bounding_box(transform, include_stroke), + // Brush strokes carry no vector outline; a brush node renders them to rasters. + Graphic::Stroke(_) | Graphic::StrokeList(_) => RenderBoundingBox::None, Graphic::Group(group) => group_bounding_box(group, transform, include_stroke, false), } } @@ -456,10 +491,11 @@ impl BoundingBox for Graphic<'_> { Graphic::Vector(vector) => vector.thumbnail_bounding_box(transform, include_stroke), Graphic::RasterCPU(raster) => raster.thumbnail_bounding_box(transform, include_stroke), Graphic::RasterGPU(raster) => raster.thumbnail_bounding_box(transform, include_stroke), - Graphic::Graphic(graphic) => graphic.thumbnail_bounding_box(transform, include_stroke), + Graphic::GraphicList(graphic) => graphic.thumbnail_bounding_box(transform, include_stroke), Graphic::Color(color) => color.thumbnail_bounding_box(transform, include_stroke), Graphic::Gradient(gradient) => gradient.thumbnail_bounding_box(transform, include_stroke), Graphic::Text(list) => list.thumbnail_bounding_box(transform, include_stroke), + Graphic::Stroke(_) | Graphic::StrokeList(_) => RenderBoundingBox::None, Graphic::Group(group) => group_bounding_box(group, transform, include_stroke, true), } } @@ -484,13 +520,15 @@ impl<'e> ListConvert> for Raster { impl RenderComplexity for Graphic<'_> { fn render_complexity(&self) -> usize { match self { - Self::Graphic(list) => list.render_complexity(), + Self::GraphicList(list) => list.render_complexity(), Self::Vector(list) => list.render_complexity(), Self::RasterCPU(list) => list.render_complexity(), Self::RasterGPU(list) => list.render_complexity(), Self::Color(list) => list.render_complexity(), Self::Gradient(list) => list.render_complexity(), Self::Text(list) => list.render_complexity(), + Self::Stroke(stroke) => stroke.position.len(), + Self::StrokeList(strokes) => (0..strokes.len()).filter_map(|index| strokes.element(index)).map(|stroke| stroke.position.len()).sum(), Self::Group(group) => group_render_complexity(group), } } @@ -594,7 +632,7 @@ mod tests { let flattened: List = graphics.into_flattened_list(); assert_eq!(flattened.attribute_cloned_or_default::(ATTR_OPACITY, 0), 0.5); - let mut group = List::new_from_element(Graphic::Graphic(List::new_from_element(vector_graphic()))); + let mut group = List::new_from_element(Graphic::GraphicList(List::new_from_element(vector_graphic()))); group.set_attribute(ATTR_OPACITY, 0, 0.5_f64); let flattened: List = group.into_flattened_list(); assert_eq!(flattened.attribute_cloned_or_default::(ATTR_OPACITY, 0), 0.5); @@ -612,33 +650,33 @@ mod graphic_is_opaque_tests { Graphic::Color(color) } - fn gradient_graphic(gradient: GradientStops) -> Graphic<'static> { + fn gradient_graphic(gradient: Gradient) -> Graphic<'static> { Graphic::Gradient(gradient) } #[test] fn opaque_color_is_opaque() { let g = color_graphic(1.); - assert!(g.is_opaque()); + assert!(g.is_guaranteed_fully_opaque()); } #[test] fn transparent_color_is_not_opaque() { let g = color_graphic(0.5); - assert!(!g.is_opaque()); + assert!(!g.is_guaranteed_fully_opaque()); } #[test] fn vector_is_not_opaque() { let g = Graphic::Vector(Vector::default()); - assert!(!g.is_opaque()); + assert!(!g.is_guaranteed_fully_opaque()); } #[test] fn gradient_with_all_opaque_stops_is_opaque() { let color_1 = Color::from_rgbaf32(1., 0., 0., 1.).unwrap(); let color_2 = Color::from_rgbaf32(1., 0., 0., 1.).unwrap(); - let gradient = GradientStops::new(vec![ + let gradient = Gradient::new(vec![ GradientStop { position: 0., midpoint: 0.5, @@ -651,14 +689,14 @@ mod graphic_is_opaque_tests { }, ]); let g = gradient_graphic(gradient); - assert!(g.is_opaque()); + assert!(g.is_guaranteed_fully_opaque()); } #[test] fn gradient_with_transparent_stop_is_not_opaque() { let color_1 = Color::from_rgbaf32(1., 0., 0., 0.5).unwrap(); let color_2 = Color::from_rgbaf32(1., 0., 0., 1.).unwrap(); - let gradient = GradientStops::new(vec![ + let gradient = Gradient::new(vec![ GradientStop { position: 0., midpoint: 0.5, @@ -671,7 +709,7 @@ mod graphic_is_opaque_tests { }, ]); let g = gradient_graphic(gradient); - assert!(!g.is_opaque()); + assert!(!g.is_guaranteed_fully_opaque()); } } @@ -682,11 +720,11 @@ mod test_support { use core_types::record::{RunBuilder, element_write_hashed}; use glam::DVec2; use vector_types::Vector; - use vector_types::subpath::Subpath; + use vector_types::vector::algorithms::shapes::rectangle_bezpath; use vector_types::vector::PointId; pub(in crate::graphic) fn unit_square_at(corner: DVec2) -> Vector { - Vector::from_subpath(Subpath::::new_rectangle(corner, corner + DVec2::ONE)) + Vector::from_bezpath(rectangle_bezpath(corner, corner + DVec2::ONE)) } pub(in crate::graphic) fn native_group_paint<'a>(vector: &Vector, arena: &'a core_types::arena::Arena) -> List> { diff --git a/node-graph/libraries/graphic-types/src/graphic/paint.rs b/node-graph/libraries/graphic-types/src/graphic/paint.rs index c84349716d..8120b1d12a 100644 --- a/node-graph/libraries/graphic-types/src/graphic/paint.rs +++ b/node-graph/libraries/graphic-types/src/graphic/paint.rs @@ -41,13 +41,13 @@ where /// opaque, fill absent or opaque, stroke invisible or fully transparent. pub fn vector_can_reduce_to_clip_path>(source: &S) -> bool { (0..source.lane_count()).all(|index| { - let Some(element) = source.element(index) else { return false }; let opacity: f64 = source.attr::(index); - let fill_opaque_or_absent = paint_graphics::(source, index).is_none_or(|graphic_list| graphic_list.element(0).is_none_or(|graphic| graphic.is_opaque())); + let fill_opaque_or_absent = paint_graphics::(source, index).is_none_or(|graphic_list| graphic_list.element(0).is_none_or(|graphic| graphic.is_guaranteed_fully_opaque())); - let stroke_invisible_or_transparent = element.stroke.as_ref().is_none_or(|stroke| !stroke.has_renderable_stroke()) - || paint_graphics::(source, index).is_none_or(|graphic_list| graphic_list.element(0).is_none_or(|graphic| graphic.is_fully_transparent())); + // Master deleted `Vector::stroke`, so the stroke width term has no source here; only the paint term is left, which reduces to a clip path less often but never wrongly. + let stroke_invisible_or_transparent = + paint_graphics::(source, index).is_none_or(|graphic_list| graphic_list.element(0).is_none_or(|graphic| graphic.is_guaranteed_fully_transparent())); opacity > 1. - f64::EPSILON && fill_opaque_or_absent && stroke_invisible_or_transparent }) @@ -228,7 +228,7 @@ pub fn bake_paint_transforms(attributes: &mut ItemAttributeValues, transform: DA *item_transform = transform * *item_transform; } for graphic in graphics.iter_element_values_mut() { - if let Graphic::Graphic(list) = graphic { + if let Graphic::GraphicList(list) = graphic { bake_graphic_paint_transform(list, transform); } } diff --git a/node-graph/libraries/graphic-types/src/graphic/walk.rs b/node-graph/libraries/graphic-types/src/graphic/walk.rs index b28436fb13..e49cc53bdc 100644 --- a/node-graph/libraries/graphic-types/src/graphic/walk.rs +++ b/node-graph/libraries/graphic-types/src/graphic/walk.rs @@ -13,7 +13,7 @@ use core_types::uuid::NodeId; use core_types::{ATTR_EDITOR_LAYER_PATH, ATTR_OPACITY, ATTR_OPACITY_FILL, ATTR_TRANSFORM, Color}; use glam::{DAffine2, DVec2}; use raster_types::{CPU, GPU, Raster}; -use vector_types::{GradientStops, Vector}; +use vector_types::{Gradient, Vector}; /// One run's attribute tokens, minted once so the lane loops read at an offset. struct RunAttrs { @@ -60,7 +60,7 @@ pub(in crate::graphic) fn group_is_opaque(group: &core_types::record::Group) -> && (0..item.len()).all(|lane| { RunAttrs::read_or(item, attrs.opacity, lane, 1.) >= 1. && RunAttrs::read_or(item, attrs.opacity_fill, lane, 1.) >= 1. - && lanes.as_ref().is_some_and(|lanes| lanes.element_ref(lane).is_opaque()) + && lanes.as_ref().is_some_and(|lanes| lanes.element_ref(lane).is_guaranteed_fully_opaque()) }) } @@ -68,7 +68,7 @@ pub(in crate::graphic) fn group_is_fully_transparent(group: &core_types::record: let item = &group.content; let attrs = RunAttrs::of(item); let lanes = item.typed_lanes::(); - (0..item.len()).all(|lane| RunAttrs::read_or(item, attrs.opacity, lane, 1.) <= 0. || lanes.as_ref().is_some_and(|lanes| lanes.element_ref(lane).is_fully_transparent())) + (0..item.len()).all(|lane| RunAttrs::read_or(item, attrs.opacity, lane, 1.) <= 0. || lanes.as_ref().is_some_and(|lanes| lanes.element_ref(lane).is_guaranteed_fully_transparent())) } pub(in crate::graphic) fn group_bounding_box(group: &core_types::record::Group, transform: DAffine2, include_stroke: bool, thumbnail: bool) -> RenderBoundingBox { @@ -117,7 +117,7 @@ pub(in crate::graphic) fn group_bounding_box(group: &core_types::record::Group, .or_else(|| typed_run::>(item, transform, include_stroke, thumbnail)) .or_else(|| typed_run::>(item, transform, include_stroke, thumbnail)) .or_else(|| typed_run::(item, transform, include_stroke, thumbnail)) - .or_else(|| typed_run::(item, transform, include_stroke, thumbnail)) + .or_else(|| typed_run::(item, transform, include_stroke, thumbnail)) .or_else(|| typed_run::(item, transform, include_stroke, thumbnail)) .unwrap_or(RenderBoundingBox::Infinite) } @@ -377,7 +377,7 @@ fn walk_vector_rows_impl<'a>( layer_path: parent_layer_path, paint: row_paint, }), - Graphic::Graphic(children) => walk_vector_rows_impl( + Graphic::GraphicList(children) => walk_vector_rows_impl( GraphicLevel::Legacy(children), scale.composed(&level, index), level.try_attr::(index), @@ -430,7 +430,7 @@ pub(in crate::graphic) fn push_lane_paint_into_interiors(list: &mut List>(item)) .or_else(|| typed_run::>(item)) .or_else(|| typed_run::(item)) - .or_else(|| typed_run::(item)) + .or_else(|| typed_run::(item)) .or_else(|| typed_run::(item)) .unwrap_or(item.len()) } @@ -496,8 +496,8 @@ mod run_tests { nested.set_attribute(core_types::ATTR_TRANSFORM, 0, DAffine2::from_scale(DVec2::splat(2.))); let mut top = List::new(); - top.push(Item::new_from_element(Graphic::Graphic(painted))); - top.push(Item::new_from_element(Graphic::Graphic(nested))); + top.push(Item::new_from_element(Graphic::GraphicList(painted))); + top.push(Item::new_from_element(Graphic::GraphicList(nested))); top.push(Item::new_from_element(Graphic::Group(core_types::record::Group { row: None, content: inner_item }))); top.push(Item::new_from_element(Graphic::Color(Color::BLACK))); top.push(Item::new_from_element(Graphic::Vector(unit_square_at(DVec2::new(6., 0.))))); diff --git a/node-graph/libraries/graphic-types/src/lib.rs b/node-graph/libraries/graphic-types/src/lib.rs index 8d920b6a05..17eaba151c 100644 --- a/node-graph/libraries/graphic-types/src/lib.rs +++ b/node-graph/libraries/graphic-types/src/lib.rs @@ -1,3 +1,4 @@ +pub mod appearance; pub mod artboard; pub mod boundary; pub mod graphic; @@ -9,48 +10,53 @@ pub use raster_types; pub use vector_types; // Re-export commonly used types at the crate root +pub use appearance::{Appearance, Cover, CoverPlacement, Coverage, FillAndStroke, stamp_coverage}; pub use artboard::Artboard; -pub use graphic::{Graphic, IntoGraphicList, TryFromGraphic, Vector}; +pub use graphic::{Graphic, IntoGraphicList, TryFromGraphic, Vector, is_lone_anonymous_leaf}; pub use markers::{ATTR_EDITOR_MERGED_LAYERS, ATTR_FILL, ATTR_STROKE}; pub mod migrations { use crate::Vector; + use core_types::Color; + use vector_types::gradient::GradientStops; + use vector_types::{Gradient, GradientRamp, GradientSpace}; // Storing legacy structs that are only used in document migration. - // TODO: Eventually remove this migration document upgrade code + // TODO: Eventually remove this document upgrade code pub mod legacy { use core_types::Color; use dyn_any::DynAny; use glam::{DAffine2, DVec2}; - use vector_types::vector::{PointDomain, RegionDomain, SegmentDomain, misc::HandleId, style::Stroke}; - use vector_types::{GradientStops, Vector, vector}; + use vector_types::vector::{PointDomain, SegmentDomain, misc::HandleId, style::Stroke}; + use vector_types::{GradientRamp, Vector, vector}; #[derive(Default, Debug, Clone, PartialEq, graphene_hash::CacheHash, DynAny, serde::Serialize, serde::Deserialize)] - pub struct Gradient { - pub stops: GradientStops, - pub gradient_type: vector::style::GradientType, + pub struct LegacyGradient { + #[serde(deserialize_with = "crate::migrations::migrate_to_gradient_ramp")] + pub stops: GradientRamp, + pub gradient_type: vector::style::GradientForm, pub start: DVec2, pub end: DVec2, #[serde(default)] - pub spread_method: vector::style::GradientSpreadMethod, + pub spread_method: vector::style::GradientSpread, #[serde(default)] pub absolute: bool, #[serde(default)] pub transform: DAffine2, } - impl Gradient { + impl LegacyGradient { /// Converts a legacy bounding-box-relative gradient (`start`/`end` in [0,1]) into an absolute one in the geometry's local space. /// `bounding_box` maps [0,1] onto the geometry's bounding box; `layer_transform` is the layer's own transform, /// used to bake the elliptical adjustment that reproduces the legacy isotropic radial through a non-uniform layer. - pub fn to_absolute(&self, bounding_box: DAffine2, layer_transform: DAffine2) -> Gradient { + pub fn to_absolute(&self, bounding_box: DAffine2, layer_transform: DAffine2) -> LegacyGradient { let start = bounding_box.transform_point2(self.start); let end = bounding_box.transform_point2(self.end); let direction = end - start; // The legacy radial drew as a circle in the layer's own space; bake the adjustment that, composed with the // endpoint frame, makes the new pipeline reproduce that circle through the (possibly non-uniform) layer transform. - let radial_invertible = self.gradient_type == vector::style::GradientType::Radial + let radial_invertible = self.gradient_type == vector::style::GradientForm::Radial && layer_transform.is_finite() && layer_transform.matrix2.determinant().recip().is_finite() && direction.length_squared() > 1e-20; @@ -66,7 +72,7 @@ pub mod migrations { DAffine2::IDENTITY }; - Gradient { + LegacyGradient { start, end, transform, @@ -83,18 +89,19 @@ pub mod migrations { } #[derive(Default, Debug, Clone, PartialEq, graphene_hash::CacheHash, DynAny, serde::Serialize, serde::Deserialize)] - pub enum Fill { + pub enum LegacyFill { #[default] None, Solid(Color), - Gradient(Gradient), + Gradient(LegacyGradient), } /// The legacy `fill` field is intentionally omitted because vector payload migration only - /// recovers editable vector data. The fill/stroke paints are migrated from the the node inputs. + /// recovers editable vector data. The stroke parses solely to validate the legacy shape. #[derive(serde::Deserialize)] #[cfg_attr(test, derive(Default, serde::Serialize))] pub(super) struct PathStyle { + #[allow(dead_code)] pub stroke: Option, } @@ -102,11 +109,11 @@ pub mod migrations { #[derive(serde::Deserialize)] #[cfg_attr(test, derive(Default, serde::Serialize))] pub(super) struct VectorData { + #[allow(dead_code)] pub style: PathStyle, pub colinear_manipulators: Vec<[HandleId; 2]>, pub point_domain: PointDomain, pub segment_domain: SegmentDomain, - pub region_domain: RegionDomain, } #[derive(serde::Deserialize)] @@ -116,7 +123,7 @@ pub mod migrations { } } - // TODO: Eventually remove this migration document upgrade code + // TODO: Eventually remove this document upgrade code /// Returns the first `Vector` recovered from any of the legacy on-disk shapes (the legacy `VectorData` flat struct, a single `Vector`, or any of the historical `List` variants). pub fn migrate_to_optional_vector<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { use serde::Deserialize; @@ -134,26 +141,64 @@ pub mod migrations { Ok(match VectorFormat::deserialize(deserializer)? { VectorFormat::OldVectorData(old) => Some(Vector { - stroke: old.style.stroke, colinear_manipulators: old.colinear_manipulators, point_domain: old.point_domain, segment_domain: old.segment_domain, - region_domain: old.region_domain, }), VectorFormat::Vector(vector) => Some(vector), VectorFormat::List(list) => list.element.into_iter().next(), }) } + // TODO: Eventually remove this document upgrade code + /// Recovers a [`GradientRamp`] from any of its on-disk shapes: the current nested form, the flat stops struct + /// that preceded it, or the ancient position-color tuple list (whose even positions elide back to absence). + /// The pre-ramp shapes come from documents that rendered in gamma, so they carry that space explicitly. + pub fn migrate_to_gradient_ramp<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result { + use serde::Deserialize; + + #[derive(serde::Deserialize)] + #[serde(untagged)] + enum GradientRampFormat { + Ramp(GradientRamp), + FlatStops(GradientStops), + Tuples(Vec<(f64, Color)>), + } + + Ok(match GradientRampFormat::deserialize(deserializer)? { + GradientRampFormat::Ramp(ramp) => ramp, + GradientRampFormat::FlatStops(stops) => GradientRamp { + gradient_space: GradientSpace::RgbGamma, + ..GradientRamp::from(stops) + }, + GradientRampFormat::Tuples(stops) => { + let position: Vec = stops.iter().map(|(position, _)| *position).collect(); + let mut gradient = Gradient::from(stops.into_iter().map(|(_, color)| color).collect::>()); + gradient.set_positions(&position); + gradient.elide_default_attributes(false); + + GradientRamp { + gradient_space: GradientSpace::RgbGamma, + ..GradientRamp::from(gradient) + } + } + }) + } + #[cfg(test)] mod migration_tests { use super::*; use vector_types::vector::style::Stroke; + /// The legacy `style` payload (including its stroke) must still parse so the untagged format + /// disambiguation succeeds, even though the geometry is all that survives. #[test] - fn preserves_stroke_from_old_vector_data_style() { + fn recovers_geometry_from_old_vector_data_with_style() { + use core_types::ops::FromAnchorPosition; + let old_vector = legacy::VectorData { style: legacy::PathStyle { stroke: Some(Stroke::new(12.)) }, + point_domain: Vector::from_anchor_position(glam::DVec2::new(3., 4.)).point_domain, ..Default::default() }; @@ -165,23 +210,27 @@ pub mod migrations { .unwrap() .as_object_mut() .unwrap() - .insert("fill".into(), serde_json::to_value(legacy::Fill::default()).unwrap()); - let migrated = migrate_to_optional_vector(value).unwrap().unwrap(); + .insert("fill".into(), serde_json::to_value(legacy::LegacyFill::default()).unwrap()); - assert_eq!(migrated.stroke.unwrap().weight, 12.); + let migrated = migrate_to_optional_vector(value).unwrap().expect("the legacy shape should parse into a vector"); + + assert_eq!( + migrated.point_domain.positions(), + [glam::DVec2::new(3., 4.)], + "the legacy geometry should survive alongside the discarded style" + ); } #[test] - fn preserves_stroke_from_current_vector_data() { - let vector = Vector { - stroke: Some(Stroke::new(12.)), - ..Default::default() - }; + fn recovers_geometry_from_current_vector_data() { + use core_types::ops::FromAnchorPosition; + + let vector = Vector::from_anchor_position(glam::DVec2::new(3., 4.)); let value = serde_json::to_value(&vector).unwrap(); let migrated = migrate_to_optional_vector(value).unwrap().unwrap(); - assert_eq!(migrated.stroke.unwrap().weight, 12.); + assert_eq!(migrated.point_domain.positions(), [glam::DVec2::new(3., 4.)]); } } } diff --git a/node-graph/libraries/no-std-types/src/blending.rs b/node-graph/libraries/no-std-types/src/blending.rs index 092a6c67a6..cd4cd1116e 100644 --- a/node-graph/libraries/no-std-types/src/blending.rs +++ b/node-graph/libraries/no-std-types/src/blending.rs @@ -1,3 +1,4 @@ +use crate::color::Color; use core::fmt::Display; use node_macro::BufferStruct; use num_enum::{FromPrimitive, IntoPrimitive}; @@ -185,3 +186,125 @@ impl Display for BlendMode { } } } + +/// Composites `foreground` over `background` with the given blend mode, fading the result by `opacity`. +#[inline(always)] +pub fn blend_colors(foreground: Color, background: Color, blend_mode: BlendMode, opacity: f32) -> Color { + // The alpha-only utility modes composite no color, so opacity interpolates their alpha toward the backdrop's instead + let faded_alpha = |applied: Color| background.with_alpha(background.a() + (applied.a() - background.a()) * opacity); + + let target_color = match blend_mode { + // Other utility blend modes (hidden from the normal list) - do not have alpha blend + BlendMode::Erase => return faded_alpha(background.alpha_subtract(foreground)), + BlendMode::Restore => return faded_alpha(background.alpha_add(foreground)), + BlendMode::MultiplyAlpha => return faded_alpha(background.alpha_multiply(foreground)), + blend_mode => apply_blend_mode(foreground, background, blend_mode), + }; + + background.alpha_blend(target_color.apply_opacity(opacity)) +} + +/// Mixes the two colors by the blend mode's own formula, leaving the alpha compositing to the caller. +pub fn apply_blend_mode(foreground: Color, background: Color, blend_mode: BlendMode) -> Color { + match blend_mode { + // Normal group + BlendMode::Normal => background.blend_rgb(foreground, Color::blend_normal), + // Darken group + BlendMode::Darken => background.blend_rgb(foreground, Color::blend_darken), + BlendMode::Multiply => background.blend_rgb(foreground, Color::blend_multiply), + BlendMode::ColorBurn => background.blend_rgb(foreground, Color::blend_color_burn), + BlendMode::LinearBurn => background.blend_rgb(foreground, Color::blend_linear_burn), + BlendMode::DarkerColor => background.blend_darker_color(foreground), + // Lighten group + BlendMode::Lighten => background.blend_rgb(foreground, Color::blend_lighten), + BlendMode::Screen => background.blend_rgb(foreground, Color::blend_screen), + BlendMode::ColorDodge => background.blend_rgb(foreground, Color::blend_color_dodge), + BlendMode::LinearDodge => background.blend_rgb(foreground, Color::blend_linear_dodge), + BlendMode::LighterColor => background.blend_lighter_color(foreground), + // Contrast group + BlendMode::Overlay => background.blend_rgb(foreground, Color::blend_overlay), + BlendMode::SoftLight => background.blend_rgb(foreground, Color::blend_softlight), + BlendMode::HardLight => background.blend_rgb(foreground, Color::blend_hardlight), + BlendMode::VividLight => background.blend_rgb(foreground, Color::blend_vivid_light), + BlendMode::LinearLight => background.blend_rgb(foreground, Color::blend_linear_light), + BlendMode::PinLight => background.blend_rgb(foreground, Color::blend_pin_light), + BlendMode::HardMix => background.blend_rgb(foreground, Color::blend_hard_mix), + // Inversion group + BlendMode::Difference => background.blend_rgb(foreground, Color::blend_difference), + BlendMode::Exclusion => background.blend_rgb(foreground, Color::blend_exclusion), + BlendMode::Subtract => background.blend_rgb(foreground, Color::blend_subtract), + BlendMode::Divide => background.blend_rgb(foreground, Color::blend_divide), + // Component group + BlendMode::Hue => background.blend_hue(foreground), + BlendMode::Saturation => background.blend_saturation(foreground), + BlendMode::Color => background.blend_color(foreground), + BlendMode::Luminosity => background.blend_luminosity(foreground), + // The alpha-only utility modes mix no color, so the foreground passes through for the caller to composite + BlendMode::Erase | BlendMode::Restore | BlendMode::MultiplyAlpha => foreground, + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn overlay_is_hard_light_with_swapped_operands() { + let a = Color::from_rgbaf32_unchecked(0.8, 0.3, 0.6, 1.); + let b = Color::from_rgbaf32_unchecked(0.2, 0.7, 0.4, 1.); + + let overlay = apply_blend_mode(a, b, BlendMode::Overlay); + let swapped_hard_light = apply_blend_mode(b, a, BlendMode::HardLight); + + assert!((overlay.r() - swapped_hard_light.r()).abs() < 1e-5, "red was {} vs {}", overlay.r(), swapped_hard_light.r()); + assert!((overlay.g() - swapped_hard_light.g()).abs() < 1e-5, "green was {} vs {}", overlay.g(), swapped_hard_light.g()); + assert!((overlay.b() - swapped_hard_light.b()).abs() < 1e-5, "blue was {} vs {}", overlay.b(), swapped_hard_light.b()); + } + + #[test] + fn blended_colors_keep_the_foreground_alpha() { + let foreground = Color::from_rgbaf32_unchecked(0.8, 0.3, 0.6, 0.25); + let background = Color::from_rgbaf32_unchecked(0.2, 0.7, 0.4, 1.); + + let modes = [ + BlendMode::Multiply, + BlendMode::Overlay, + BlendMode::DarkerColor, + BlendMode::LighterColor, + BlendMode::Hue, + BlendMode::Saturation, + BlendMode::Color, + BlendMode::Luminosity, + ]; + for mode in modes { + let blended = apply_blend_mode(foreground, background, mode); + assert!((blended.a() - 0.25).abs() < 1e-5, "{mode} alpha was {}", blended.a()); + } + } + + #[test] + fn darker_color_compares_unassociated_channels() { + // The premultiplied backdrop reads as 0.1 gray but is really 0.5 gray, so the 0.4 gray foreground is the darker color + let foreground = Color::from_rgbaf32_unchecked(0.4, 0.4, 0.4, 1.); + let background = Color::from_rgbaf32_unchecked(0.1, 0.1, 0.1, 0.2); + + let blended = apply_blend_mode(foreground, background, BlendMode::DarkerColor); + + assert!((blended.r() - 0.4).abs() < 1e-5, "red was {}", blended.r()); + assert!((blended.a() - 1.).abs() < 1e-5, "alpha was {}", blended.a()); + } + + #[test] + fn alpha_only_modes_fade_with_opacity() { + let foreground = Color::from_rgbaf32_unchecked(0.9, 0.9, 0.9, 1.); + let background = Color::from_rgbaf32_unchecked(0.3, 0.5, 0.7, 1.); + + // A full-opacity erase removes all coverage, and half opacity fades that effect halfway back toward the backdrop + let full = blend_colors(foreground, background, BlendMode::Erase, 1.); + let half = blend_colors(foreground, background, BlendMode::Erase, 0.5); + + assert!((full.a() - 0.).abs() < 1e-5, "alpha was {}", full.a()); + assert!((half.a() - 0.5).abs() < 1e-5, "alpha was {}", half.a()); + assert!((half.r() - 0.3).abs() < 1e-5, "red was {}", half.r()); + } +} diff --git a/node-graph/libraries/no-std-types/src/color/color_types.rs b/node-graph/libraries/no-std-types/src/color/color_types.rs index 56ba5d958e..13bbe37912 100644 --- a/node-graph/libraries/no-std-types/src/color/color_types.rs +++ b/node-graph/libraries/no-std-types/src/color/color_types.rs @@ -273,7 +273,7 @@ pub struct Color { // `f32` channels mean `Color` doesn't qualify for a derived `Eq`, but in practice we never store NaN here, and the renderer's `HashMap>, _>` deduplication needs `Color: Eq` to propagate up through the wrapper. impl Eq for Color {} -// TODO: Eventually remove this migration document upgrade code +// TODO: Eventually remove this document upgrade code #[cfg(feature = "std")] impl serde::Serialize for Color { fn serialize(&self, serializer: S) -> Result { @@ -290,7 +290,7 @@ impl serde::Serialize for Color { } } -// TODO: Eventually remove this migration document upgrade code +// TODO: Eventually remove this document upgrade code #[cfg(feature = "std")] impl<'de> serde::Deserialize<'de> for Color { fn deserialize>(deserializer: D) -> Result { @@ -413,6 +413,7 @@ impl Color { pub const YELLOW: Color = Color::from_rgbf32_unchecked(1., 1., 0.); pub const CYAN: Color = Color::from_rgbf32_unchecked(0., 1., 1.); pub const MAGENTA: Color = Color::from_rgbf32_unchecked(1., 0., 1.); + pub const MIDDLE_GRAY: Color = Color::from_rgbf32_unchecked(0.5, 0.5, 0.5); pub const TRANSPARENT: Color = Self { red: 0., green: 0., @@ -703,10 +704,13 @@ impl Color { c_b + c_s - 1. } - /// Whole-color "Darker Color" blend: keeps whichever color has the lower mean RGB. + /// Whole-color "Darker Color" blend: keeps whichever color has the lower mean RGB, with `other`'s alpha. #[inline(always)] pub fn blend_darker_color(&self, other: Color) -> Color { - if self.average_rgb_channels() <= other.average_rgb_channels() { *self } else { other } + let background = self.to_unassociated_alpha(); + let darker = if background.average_rgb_channels() <= other.average_rgb_channels() { background } else { other }; + + darker.with_alpha(other.alpha) } /// Per-channel "Screen" blend. @@ -733,10 +737,13 @@ impl Color { c_b + c_s } - /// Whole-color "Lighter Color" blend: keeps whichever color has the higher mean RGB. + /// Whole-color "Lighter Color" blend: keeps whichever color has the higher mean RGB, with `other`'s alpha. #[inline(always)] pub fn blend_lighter_color(&self, other: Color) -> Color { - if self.average_rgb_channels() >= other.average_rgb_channels() { *self } else { other } + let background = self.to_unassociated_alpha(); + let lighter = if background.average_rgb_channels() >= other.average_rgb_channels() { background } else { other }; + + lighter.with_alpha(other.alpha) } /// Per-channel "Soft Light" blend. @@ -758,6 +765,11 @@ impl Color { } } + /// Per-channel "Overlay" blend, which is "Hard Light" with the backdrop and source channels swapped. + pub fn blend_overlay(c_b: f32, c_s: f32) -> f32 { + Color::blend_hardlight(c_s, c_b) + } + /// Per-channel "Vivid Light" blend. pub fn blend_vivid_light(c_b: f32, c_s: f32) -> f32 { if c_s <= 0.5 { @@ -810,33 +822,36 @@ impl Color { if c_b == 0. { 1. } else { c_b / c_s } } - /// Whole-color "Hue" blend: source hue with this color's saturation and Rec.601 luma. + /// Whole-color "Hue" blend: source hue with this color's saturation and Rec.601 luma, with `c_s`'s alpha. pub fn blend_hue(&self, c_s: Color) -> Color { - let sat_b = self.chroma_range(); - let lum_b = self.luminance_rec_601(); - c_s.with_saturation(sat_b).with_luminance(lum_b) + let background = self.to_unassociated_alpha(); + let sat_b = background.chroma_range(); + let lum_b = background.luminance_rec_601(); + + c_s.with_saturation(sat_b).with_luminance(lum_b).with_alpha(c_s.alpha) } - /// Whole-color "Saturation" blend: this color's hue/luma with source saturation. + /// Whole-color "Saturation" blend: this color's hue/luma with source saturation, with `c_s`'s alpha. pub fn blend_saturation(&self, c_s: Color) -> Color { + let background = self.to_unassociated_alpha(); let sat_s = c_s.chroma_range(); - let lum_b = self.luminance_rec_601(); + let lum_b = background.luminance_rec_601(); - self.with_saturation(sat_s).with_luminance(lum_b) + background.with_saturation(sat_s).with_luminance(lum_b).with_alpha(c_s.alpha) } - /// Whole-color "Color" blend: source hue/saturation with this color's luma. + /// Whole-color "Color" blend: source hue/saturation with this color's luma, with `c_s`'s alpha. pub fn blend_color(&self, c_s: Color) -> Color { - let lum_b = self.luminance_rec_601(); + let lum_b = self.to_unassociated_alpha().luminance_rec_601(); - c_s.with_luminance(lum_b) + c_s.with_luminance(lum_b).with_alpha(c_s.alpha) } - /// Whole-color "Luminosity" blend: this color's hue/saturation with source luma. + /// Whole-color "Luminosity" blend: this color's hue/saturation with source luma, with `c_s`'s alpha. pub fn blend_luminosity(&self, c_s: Color) -> Color { let lum_s = c_s.luminance_rec_601(); - self.with_luminance(lum_s) + self.to_unassociated_alpha().with_luminance(lum_s).with_alpha(c_s.alpha) } /// All four channels as `(red, green, blue, alpha)`. @@ -918,6 +933,14 @@ impl Color { ) } + /// Like [`Self::lerp`] but interpolating in gamma sRGB space, the space SVG interpolates in between adjacent gradient stops. + #[inline(always)] + pub fn lerp_gamma_srgb(&self, other: &Color, t: f32) -> Self { + let a = self.to_gamma_srgb_channels(); + let b = other.to_gamma_srgb_channels(); + Color::from_gamma_srgb_channels(a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t, a[3] + (b[3] - a[3]) * t) + } + /// Generic power curve `c.powf(1 / exponent)` applied per RGB channel. Distinct from the sRGB transfer curve (see [`Self::to_gamma_srgb_channels`]). /// The expected output must still be treated as linear-light. #[inline(always)] diff --git a/node-graph/libraries/no-std-types/src/lib.rs b/node-graph/libraries/no-std-types/src/lib.rs index b6b681e51f..bdd147703c 100644 --- a/node-graph/libraries/no-std-types/src/lib.rs +++ b/node-graph/libraries/no-std-types/src/lib.rs @@ -4,6 +4,7 @@ pub mod blending; pub mod choice_type; pub mod color; pub mod context; +pub mod list; pub mod registry; pub mod shaders; diff --git a/node-graph/libraries/no-std-types/src/list.rs b/node-graph/libraries/no-std-types/src/list.rs new file mode 100644 index 0000000000..0300a4a590 --- /dev/null +++ b/node-graph/libraries/no-std-types/src/list.rs @@ -0,0 +1,41 @@ +//! A zero-cost stand-in for `core_types::list::Item` used when node kernels are compiled for the GPU. +//! +//! Shader node kernels compile twice: under `std` against the real attribute-carrying `Item`, and under +//! `no_std` (SPIR-V) against this transparent wrapper, imported as `Item`. Only the element-access surface is +//! provided, since rust-gpu cannot allocate and attributes have no per-pixel meaning; attribute use fails the +//! shader build. It is named distinctly from `Item` so a search for the canonical type finds only that one. + +/// A rank-0 wire value holding a single element, mirroring the element-access API of the real `Item`. +#[repr(transparent)] +#[derive(Copy, Clone, Debug, Default, PartialEq)] +pub struct ShaderItem { + element: T, +} + +impl ShaderItem { + /// Constructs an item with the given element. + pub fn new_from_element(element: T) -> Self { + Self { element } + } + + /// Returns a shared reference to this item's element. + pub fn element(&self) -> &T { + &self.element + } + + /// Returns a mutable reference to this item's element. + pub fn element_mut(&mut self) -> &mut T { + &mut self.element + } + + /// Consumes this item and returns the owned element. + pub fn into_element(self) -> T { + self.element + } +} + +impl From for ShaderItem { + fn from(element: T) -> Self { + Self::new_from_element(element) + } +} diff --git a/node-graph/libraries/raster-types/src/raster_types.rs b/node-graph/libraries/raster-types/src/raster_types.rs index 0f255d38bb..d210447182 100644 --- a/node-graph/libraries/raster-types/src/raster_types.rs +++ b/node-graph/libraries/raster-types/src/raster_types.rs @@ -140,7 +140,7 @@ mod cpu { pub use gpu::GPU; #[cfg(feature = "wgpu")] -pub use gpu::Texture; +pub use gpu::{Texture, TextureWeakRef}; #[cfg(feature = "wgpu")] mod gpu { @@ -149,37 +149,57 @@ mod gpu { use std::sync::Arc; #[derive(Clone, Debug, PartialEq, Eq, Hash, DynAny)] - pub struct Texture(Arc); + pub struct Texture(Arc); + + #[derive(Debug, PartialEq, Eq, Hash)] + struct TextureInner(wgpu::Texture); + + impl Drop for TextureInner { + fn drop(&mut self) { + self.0.destroy(); + } + } + + impl Texture { + pub fn is_shared(&self) -> bool { + Arc::strong_count(&self.0) > 1 + } + + pub fn is_weakly_shared(&self) -> bool { + Arc::weak_count(&self.0) > 0 + } + + pub fn downgrade(&self) -> TextureWeakRef { + TextureWeakRef(Arc::downgrade(&self.0)) + } + } + + #[derive(Clone, Debug)] + pub struct TextureWeakRef(std::sync::Weak); + + impl TextureWeakRef { + pub fn upgrade(&self) -> Option { + self.0.upgrade().map(Texture) + } + } impl Deref for Texture { type Target = wgpu::Texture; fn deref(&self) -> &Self::Target { - &self.0 + &self.0.0 } } impl AsRef for Texture { fn as_ref(&self) -> &wgpu::Texture { - &self.0 - } - } - - impl From> for Texture { - fn from(texture: Arc) -> Self { - Self(texture) + &self.0.0 } } impl From for Texture { fn from(texture: wgpu::Texture) -> Self { - Self(Arc::new(texture)) - } - } - - impl From for Arc { - fn from(texture: Texture) -> Self { - texture.0 + Self(Arc::new(TextureInner(texture))) } } diff --git a/node-graph/libraries/rendering/Cargo.toml b/node-graph/libraries/rendering/Cargo.toml index 13facc359c..7da33a4eb0 100644 --- a/node-graph/libraries/rendering/Cargo.toml +++ b/node-graph/libraries/rendering/Cargo.toml @@ -8,12 +8,13 @@ license = "MIT OR Apache-2.0" [features] default = ["serde"] -serde = ["dep:serde", "core-types/serde", "vector-types/serde", "graphic-types/serde"] +serde = ["dep:serde", "core-types/serde", "vector-types/serde", "graphic-types/serde", "brush-types/serde"] [dependencies] # Local dependencies dyn-any = { workspace = true } core-types = { workspace = true } +brush-types = { workspace = true } graphene-hash = { workspace = true } graphene-resource = { workspace = true } text-nodes = { workspace = true } diff --git a/node-graph/libraries/rendering/src/convert_usvg_path.rs b/node-graph/libraries/rendering/src/convert_usvg_path.rs index 2f07db846b..c4b722b9ed 100644 --- a/node-graph/libraries/rendering/src/convert_usvg_path.rs +++ b/node-graph/libraries/rendering/src/convert_usvg_path.rs @@ -1,47 +1,35 @@ -use glam::DVec2; -use vector_types::subpath::{ManipulatorGroup, Subpath}; -use vector_types::vector::PointId; +use kurbo::{BezPath, Point}; -pub fn convert_usvg_path(path: &usvg::Path) -> Vec> { - let mut subpaths = Vec::new(); - let mut manipulators_list = Vec::new(); +pub fn convert_usvg_path(path: &usvg::Path) -> BezPath { + let mut bezpath = BezPath::new(); let mut points = path.data().points().iter(); - let to_vec = |p: &usvg::tiny_skia_path::Point| DVec2::new(p.x as f64, p.y as f64); + let to_point = |p: &usvg::tiny_skia_path::Point| Point::new(p.x as f64, p.y as f64); for verb in path.data().verbs() { match verb { usvg::tiny_skia_path::PathVerb::Move => { - subpaths.push(Subpath::new(std::mem::take(&mut manipulators_list), false)); - let Some(start) = points.next().map(to_vec) else { continue }; - manipulators_list.push(ManipulatorGroup::new(start, Some(start), Some(start))); + let Some(start) = points.next().map(to_point) else { continue }; + bezpath.move_to(start); } usvg::tiny_skia_path::PathVerb::Line => { - let Some(end) = points.next().map(to_vec) else { continue }; - manipulators_list.push(ManipulatorGroup::new(end, Some(end), Some(end))); + let Some(end) = points.next().map(to_point) else { continue }; + bezpath.line_to(end); } usvg::tiny_skia_path::PathVerb::Quad => { - let Some(handle) = points.next().map(to_vec) else { continue }; - let Some(end) = points.next().map(to_vec) else { continue }; - if let Some(last) = manipulators_list.last_mut() { - last.out_handle = Some(last.anchor + (2. / 3.) * (handle - last.anchor)); - } - manipulators_list.push(ManipulatorGroup::new(end, Some(end + (2. / 3.) * (handle - end)), Some(end))); + let Some(handle) = points.next().map(to_point) else { continue }; + let Some(end) = points.next().map(to_point) else { continue }; + bezpath.quad_to(handle, end); } usvg::tiny_skia_path::PathVerb::Cubic => { - let Some(first_handle) = points.next().map(to_vec) else { continue }; - let Some(second_handle) = points.next().map(to_vec) else { continue }; - let Some(end) = points.next().map(to_vec) else { continue }; - if let Some(last) = manipulators_list.last_mut() { - last.out_handle = Some(first_handle); - } - manipulators_list.push(ManipulatorGroup::new(end, Some(second_handle), Some(end))); - } - usvg::tiny_skia_path::PathVerb::Close => { - subpaths.push(Subpath::new(std::mem::take(&mut manipulators_list), true)); + let Some(first_handle) = points.next().map(to_point) else { continue }; + let Some(second_handle) = points.next().map(to_point) else { continue }; + let Some(end) = points.next().map(to_point) else { continue }; + bezpath.curve_to(first_handle, second_handle, end); } + usvg::tiny_skia_path::PathVerb::Close => bezpath.close_path(), } } - subpaths.push(Subpath::new(manipulators_list, false)); - subpaths + + bezpath } diff --git a/node-graph/libraries/rendering/src/render_ext.rs b/node-graph/libraries/rendering/src/render_ext.rs index 74da9ddcb3..be65f804ee 100644 --- a/node-graph/libraries/rendering/src/render_ext.rs +++ b/node-graph/libraries/rendering/src/render_ext.rs @@ -1,4 +1,7 @@ -use crate::renderer::{RenderParams, format_transform_matrix, gradient_placement, transform_is_invertible}; +use crate::renderer::{ + ClearGuardPlacement, ItemRef, RenderParams, composite_paint_colors, faded_paint_color, format_transform_matrix, gradient_placement, gradient_settings_from_item, spread_adjusted_samples, + transform_is_invertible, +}; use crate::{Render, RenderSvgSegmentList, SvgRender}; use core_types::Color; use core_types::attribute::Transform; @@ -7,12 +10,12 @@ use core_types::list::List; use core_types::uuid::generate_uuid; use glam::{DAffine2, DVec2}; use graphic_types::Graphic; -use graphic_types::vector_types::gradient::GradientType; -use graphic_types::vector_types::markers::{GradientType as GradientTypeAttr, SpreadMethod}; +use graphic_types::vector_types::gradient::GradientForm; +use graphic_types::vector_types::markers::{GradientForm as GradientFormAttr, GradientSpread as GradientSpreadAttr}; use graphic_types::vector_types::vector::style::{PaintOrder, Stroke, StrokeAlign, StrokeCap, StrokeJoin}; use std::fmt::Write; -use vector_types::GradientStops; -use vector_types::gradient::GradientSpreadMethod; +use vector_types::Gradient; +use vector_types::gradient::GradientSpread; #[derive(Copy, Clone, PartialEq)] pub enum PaintTarget { @@ -76,17 +79,106 @@ impl RenderExt for List { _element_transform: DAffine2, _stroke_transform: DAffine2, _bounds: DAffine2, - _render_params: &RenderParams, + render_params: &RenderParams, target: PaintTarget, ) -> Self::Output { render_color_paint(self, target) } } -impl RenderExt for List { - type Output = u64; +/// Adds one gradient item's def into `svg_defs` and returns the gradient ID, or `None` when the item is absent. +/// `for_mask` keeps the fill opacity at full, as [`ItemRef::paint_opacity`] explains. +fn render_gradient_paint(item: Option>, svg_defs: &mut String, item_transform: DAffine2, element_transform: DAffine2, for_mask: bool) -> Option { + let mut stop = String::new(); - /// Adds the gradient def through mutating the first argument, returning the gradient ID. + let item = item?; + let stops = item.element()?; + let gradient_form: GradientForm = item.attribute_cloned_or_default(ATTR_GRADIENT_FORM); + let local_gradient_transform: DAffine2 = item.attribute_cloned_or_default(ATTR_TRANSFORM); + let settings = gradient_settings_from_item(item); + + let (mut samples, _) = spread_adjusted_samples(stops, settings, gradient_form, ClearGuardPlacement::SvgStopOrder); + + let paint_opacity = item.paint_opacity(for_mask); + if paint_opacity < 1. { + for (_, color, _) in &mut samples { + *color = color.with_alpha(color.a() * paint_opacity); + } + } + + for (position, color, original_midpoint) in samples { + stop.push_str("") + } + + // A gradient with no stops paints as solid black, matching `Gradient::evaluate` (a stopless def would otherwise render as no paint per the SVG spec) + if stop.is_empty() { + stop.push_str(r##""); + } + + // Need to cancel out the element's transform as it is already applied to the path itself. + let element_transform_inverse = if transform_is_invertible(element_transform) { + element_transform.inverse() + } else { + DAffine2::IDENTITY + }; + + let document_transform = item_transform * local_gradient_transform; + + let placement = gradient_placement(document_transform, gradient_form); + let gradient_transform = format_transform_matrix(element_transform_inverse * placement); + let gradient_transform = if gradient_transform.is_empty() { + String::new() + } else { + format!(r#" gradientTransform="{gradient_transform}""#) + }; + + let gradient_spread = if matches!(settings.spread, GradientSpread::Pad | GradientSpread::Clear) { + String::new() + } else { + format!(r#" spreadMethod="{}""#, settings.spread.svg_name()) + }; + + let gradient_id = generate_uuid(); + + match gradient_form { + GradientForm::Linear => { + let _ = write!( + svg_defs, + r#"{}"#, + gradient_id, stop + ); + } + GradientForm::Radial => { + let _ = write!( + svg_defs, + r#"{}"#, + gradient_id, stop + ); + } + } + + Some(gradient_id) +} + +impl RenderExt for List { + type Output = Option; + + /// Adds the gradient def through mutating the first argument, returning the gradient ID, or `None` when the list is empty. fn render( &self, svg_defs: &mut String, @@ -94,7 +186,7 @@ impl RenderExt for List { element_transform: DAffine2, _stroke_transform: DAffine2, _bounds: DAffine2, - _render_params: &RenderParams, + render_params: &RenderParams, _target: PaintTarget, ) -> Self::Output { render_gradient_paint(self, svg_defs, item_transform, element_transform) @@ -103,14 +195,14 @@ impl RenderExt for List { /// Adds the gradient def through mutating `svg_defs`, returning the gradient /// ID, over any gradient lane source. -pub fn render_gradient_paint>(source: &S, svg_defs: &mut String, item_transform: DAffine2, element_transform: DAffine2) -> u64 { +pub fn render_gradient_paint>(source: &S, svg_defs: &mut String, item_transform: DAffine2, element_transform: DAffine2) -> u64 { let mut stop = String::new(); { let Some(stops) = source.element(0) else { return 0 }; - let gradient_type: GradientType = source.attr::(0); + let gradient_type: GradientForm = source.attr::(0); let local_gradient_transform: DAffine2 = source.attr::(0); - let spread_method: GradientSpreadMethod = source.attr::(0); + let spread_method: GradientSpread = source.attr::(0); for (position, color, original_midpoint) in stops.interpolated_samples() { stop.push_str(" { + GradientForm::Linear => { let _ = write!( svg_defs, r#"{}"#, gradient_id, stop ); } - GradientType::Radial => { + GradientForm::Radial => { let _ = write!( svg_defs, r#"{}"#, @@ -176,7 +268,7 @@ pub fn render_gradient_paint.render` with `PaintTarget::Stroke`. + /// Provide the shape-related SVG attributes for the stroke. The paint-related attributes for the stroke are generated from `Graphic::render` with `PaintTarget::Stroke`. fn render( &self, _svg_defs: &mut String, @@ -202,7 +294,6 @@ impl RenderExt for Stroke { let stroke_join = (self.join != StrokeJoin::Miter).then_some(self.join); let stroke_join_miter_limit = (self.join_miter_limit != 4.).then_some(self.join_miter_limit); let stroke_align = (self.align != StrokeAlign::Center).then_some(self.align); - let paint_order = (self.paint_order != PaintOrder::StrokeAbove || render_params.override_paint_order).then_some(PaintOrder::StrokeBelow); // Render the needed stroke attributes let mut attributes = String::new(); @@ -227,7 +318,7 @@ impl RenderExt for Stroke { if let Some(stroke_join_miter_limit) = stroke_join_miter_limit { let _ = write!(&mut attributes, r#" stroke-miterlimit="{stroke_join_miter_limit}""#); } - if paint_order.is_some() { + if render_params.stroke_below { let _ = write!(&mut attributes, r#" style="paint-order: stroke;" "#); } attributes @@ -247,7 +338,6 @@ impl RenderExt for List> { render_params: &RenderParams, target: PaintTarget, ) -> Self::Output { - let fill_graphic = self.element(0); let paint_attr = target.paint_attr(); match fill_graphic { @@ -256,7 +346,7 @@ impl RenderExt for List> { let gradient_id = render_gradient_paint(&core_types::lane::LeafLane::new(self, 0, gradient), svg_defs, item_transform, element_transform); format!(r##" {paint_attr}="url(#{gradient_id})""##) } - Some(Graphic::Vector(_)) | Some(Graphic::RasterCPU(_)) | Some(Graphic::RasterGPU(_)) | Some(Graphic::Graphic(_)) | Some(Graphic::Text(_)) | Some(Graphic::Group(_)) => { + Some(Graphic::Vector(_)) | Some(Graphic::RasterCPU(_)) | Some(Graphic::RasterGPU(_)) | Some(Graphic::GraphicList(_)) | Some(Graphic::Text(_)) | Some(Graphic::Group(_)) => { let bounds = if target == PaintTarget::Stroke { // To prevent a wraparound artefact occurring when the tile boundary and the stroke region are perfectly aligned, the local coordinate is expanded slightly. let inverse = |len: f64| if len > 0. { 1. / len } else { 0. }; @@ -271,14 +361,13 @@ impl RenderExt for List> { .map(|id| format!(r##" {paint_attr}="url(#{id})""##)) .unwrap_or_else(|| format!(r#" {paint_attr}="none""#)) } - None => format!(r#" {paint_attr}="none""#), } } } -/// Emits an SVG `` paint server into `svg_defs` that renders the given graphic list as the paint content, and returns the pattern ID. +/// Emits an SVG `` paint server into `svg_defs` that renders the given graphic as the paint content, and returns the pattern ID. /// Currently, this function is only used for clipping-based filling and stroking, not considering tiling yet. -fn render_svg_pattern(svg_defs: &mut String, fill_graphic_list: &List, stroke_transform: DAffine2, bounds: DAffine2, render_params: &RenderParams) -> Option { +fn render_svg_pattern(svg_defs: &mut String, paint: &Graphic, stroke_transform: DAffine2, bounds: DAffine2, render_params: &RenderParams) -> Option { let min = bounds.transform_point2(DVec2::ZERO); let max = bounds.transform_point2(DVec2::ONE); let size = max - min; @@ -288,7 +377,7 @@ fn render_svg_pattern(svg_defs: &mut String, fill_graphic_list: &List, // Render the pattern content recursively let mut content = SvgRender::new(); - fill_graphic_list.render_svg(&mut content, &render_params.for_pattern()); + paint.render_svg(&mut content, &render_params.for_pattern()); // Unwrap the inner def element write!(svg_defs, "{}", content.svg_defs).unwrap(); diff --git a/node-graph/libraries/rendering/src/renderer.rs b/node-graph/libraries/rendering/src/renderer.rs index 7a04057534..d85d2cdafe 100644 --- a/node-graph/libraries/rendering/src/renderer.rs +++ b/node-graph/libraries/rendering/src/renderer.rs @@ -26,9 +26,9 @@ use graphene_resource::Resource; use graphic_types::graphic::{PaintColumns, PaintOverlay, PaintReach, has_paint, is_paint_present, paint_graphics, set_paint_attribute, vector_can_reduce_to_clip_path}; use graphic_types::markers::{EditorMergedLayers, Fill, Stroke}; use graphic_types::raster_types::{BitmapMut, CPU, GPU, Image, Raster, Texture}; -use graphic_types::vector_types::gradient::{GradientStops, GradientType}; -use graphic_types::vector_types::markers::{GradientType as GradientTypeAttr, SpreadMethod}; -use graphic_types::vector_types::subpath::Subpath; +use graphic_types::vector_types::gradient::{Gradient, GradientForm}; +use graphic_types::vector_types::markers::{GradientForm as GradientFormAttr, GradientSpread as GradientSpreadAttr}; +use graphic_types::vector_types::vector::algorithms::shapes::rectangle_bezpath; use graphic_types::vector_types::vector::click_target::{ClickTarget, FreePoint}; use graphic_types::vector_types::vector::style::{PaintOrder, RenderMode, StrokeAlign, StrokeCap, StrokeJoin}; use graphic_types::{ATTR_FILL, Artboard, Graphic, Vector}; @@ -44,10 +44,134 @@ use std::hash::Hash; use std::ops::Deref; use std::sync::{Arc, LazyLock}; use text_nodes::markers::{Font, TextAlign}; -use vector_types::gradient::GradientSpreadMethod; +use vector_types::gradient::GradientSpread; use vector_types::markers::EditorClickTarget; use vello::*; +/// A borrowed view of one item of ranked content: one index of a `List`'s attributes, or a lone `Item` reading its own envelope. +/// Lets the per-item render logic serve both the list impls and the `Graphic` leaf variants without cloning. +pub(crate) enum ItemRef<'a, T> { + ListItem(&'a List, usize), + Item(&'a Item), +} + +impl Copy for ItemRef<'_, T> {} +impl Clone for ItemRef<'_, T> { + fn clone(&self) -> Self { + *self + } +} + +impl<'a, T> ItemRef<'a, T> { + pub(crate) fn element(self) -> Option<&'a T> { + match self { + ItemRef::ListItem(list, index) => list.element(index), + ItemRef::Item(item) => Some(item.element()), + } + } + + pub(crate) fn attribute(self, key: &str) -> Option<&'a A> { + match self { + ItemRef::ListItem(list, index) => list.attribute(key, index), + ItemRef::Item(item) => item.attribute(key), + } + } + + pub(crate) fn attribute_cloned_or(self, key: &str, fallback: A) -> A { + match self { + ItemRef::ListItem(list, index) => list.attribute_cloned_or(key, index, fallback), + ItemRef::Item(item) => item.attribute_cloned_or(key, fallback), + } + } + + pub(crate) fn attribute_cloned_or_default(self, key: &str) -> A { + match self { + ItemRef::ListItem(list, index) => list.attribute_cloned_or_default(key, index), + ItemRef::Item(item) => item.attribute_cloned_or_default(key), + } + } + + /// The alpha multiplier this item's opacity attributes apply when it serves as a paint. + /// Fill opacity fades a paint just as opacity does, but a masker drops it so it cannot reach the content clipped to it. + pub(crate) fn paint_opacity(self, for_mask: bool) -> f32 { + let opacity_fill = if for_mask { 1. } else { self.attribute_cloned_or::(ATTR_OPACITY_FILL, 1.) }; + + (self.attribute_cloned_or::(ATTR_OPACITY, 1.) * opacity_fill) as f32 + } + + pub(crate) fn clone_item_attributes(self) -> core_types::list::ItemAttributeValues { + match self { + ItemRef::ListItem(list, index) => list.clone_item_attributes(index), + ItemRef::Item(item) => item.attributes().clone(), + } + } + + /// The last layer ID of the item's `editor:layer_path` tag, if any. + fn layer(self) -> Option { + self.attribute::(ATTR_EDITOR_LAYER_PATH).and_then(|path| path.0.iter_element_values().next_back().copied()) + } +} + +/// The color one paint item contributes, faded by its opacity attributes. +pub(crate) fn faded_paint_color(item: ItemRef<'_, Color>, for_mask: bool) -> Option { + let color = item.element()?; + + Some(color.with_alpha(color.a() * item.paint_opacity(for_mask))) +} + +/// Composites one paint color over the stack beneath it, mixing by the blend mode and then source-over in straight alpha. +fn composite_paint_over(over: Color, under: Color, blend_mode: BlendMode) -> Color { + let (over_alpha, under_alpha) = (over.a(), under.a()); + + // These modes only move the backdrop's alpha, leaving its color alone + match blend_mode { + BlendMode::Erase => return under.with_alpha((under_alpha - over_alpha).clamp(0., 1.)), + BlendMode::Restore => return under.with_alpha((under_alpha + over_alpha).clamp(0., 1.)), + BlendMode::MultiplyAlpha => return under.with_alpha(under_alpha * over_alpha), + _ => {} + } + + let result_alpha = over_alpha + under_alpha * (1. - over_alpha); + if result_alpha <= 0. { + return Color::TRANSPARENT; + } + + // The blend formulas read their backdrop premultiplied + let premultiplied_under = Color::from_rgbaf32_unchecked(under.r() * under_alpha, under.g() * under_alpha, under.b() * under_alpha, under_alpha); + let mixed = apply_blend_mode(over, premultiplied_under, blend_mode); + + // The mode only mixes where the backdrop has coverage, so its alpha interpolates each source channel from the raw color to the mixed color + let source_channel = |over_channel: f32, mixed_channel: f32| over_channel * (1. - under_alpha) + mixed_channel * under_alpha; + + let channel = + |mixed_channel: f32, over_channel: f32, under_channel: f32| (source_channel(over_channel, mixed_channel) * over_alpha + under_channel * under_alpha * (1. - over_alpha)) / result_alpha; + + Color::from_rgbaf32_unchecked( + channel(mixed.r(), over.r(), under.r()), + channel(mixed.g(), over.g(), under.g()), + channel(mixed.b(), over.b(), under.b()), + result_alpha, + ) +} + +/// Flattens a rank-1 color paint into the single color the fast path emits, stacking the items in paint order. +pub(crate) fn composite_paint_colors(list: &List, for_mask: bool) -> Option { + let mut composited = None; + + for index in 0..list.len() { + let item = ItemRef::ListItem(list, index); + let Some(faded) = faded_paint_color(item, for_mask) else { continue }; + + composited = Some(match composited { + // The lowest paint has nothing beneath it, so its blend mode has nothing to act on + None => faded, + Some(under) => composite_paint_over(faded, under, item.attribute_cloned_or_default(ATTR_BLEND_MODE)), + }); + } + + composited +} + #[derive(Clone, Copy, Debug, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] enum MaskType { @@ -230,28 +354,45 @@ pub struct RenderParams { /// Are we generating a mask for alignment? Used to prevent unnecessary transforms in masks pub alignment_parent_transform: Option, pub aligned_strokes: bool, - pub override_paint_order: bool, + /// Paint the stroke below the fill within the same SVG path element + pub stroke_below: bool, /// Are we rendering for a pattern content pub inside_pattern: bool, pub artboard_background: Option, /// Viewport zoom level (document-space scale). Used to compute constant viewport-pixel stroke widths in Outline mode. pub viewport_zoom: f64, + /// The nearest ancestor's appearance, cascading to items that lack their own. + pub inherited_appearance: Option, } impl RenderParams { pub fn for_clipper(&self) -> Self { - Self { for_mask: true, ..*self } + Self { for_mask: true, ..self.clone() } } pub fn for_alignment(&self, transform: DAffine2) -> Self { Self { alignment_parent_transform: Some(transform), - ..*self + ..self.clone() } } pub fn for_pattern(&self) -> Self { - Self { inside_pattern: true, ..*self } + // A paint subtree supplies its own styling, so the painted element's appearance must not cascade into it + Self { + inside_pattern: true, + inherited_appearance: None, + ..self.clone() + } + } + + /// Params for rendering a child item, cascading this item's appearance to descendants lacking their own. + /// Callers only build these when the item carries a declared appearance, so an item without one clones nothing. + pub fn for_child_item(&self, item_appearance: &Appearance) -> Self { + Self { + inherited_appearance: Some(item_appearance.clone()), + ..self.clone() + } } pub fn to_canvas(&self) -> bool { @@ -340,11 +481,9 @@ fn get_outline_styles(render_params: &RenderParams) -> (kurbo::Stroke, peniko::C } fn draw_raster_outline(scene: &mut Scene, outline_transform: &DAffine2, render_params: &RenderParams) { - use graphic_types::vector_types::vector::PointId; - let (outline_stroke, outline_color_peniko) = get_outline_styles(render_params); - let mut outline_path = Subpath::::new_rectangle(DVec2::ZERO, DVec2::ONE).to_bezpath(); + let mut outline_path = rectangle_path(DVec2::ZERO, DVec2::ONE); outline_path.apply_affine(Affine::new(outline_transform.to_cols_array())); scene.stroke(&outline_stroke, Affine::IDENTITY, outline_color_peniko, None, &outline_path); @@ -355,7 +494,7 @@ fn draw_raster_outline(scene: &mut Scene, outline_transform: &DAffine2, render_p fn emit_svg_fill_path( render: &mut SvgRender, d: String, - fill_graphic_list: Option<&List>, + fill_paint: Option<&Graphic>, item_transform: DAffine2, element_transform: DAffine2, applied_stroke_transform: DAffine2, @@ -369,13 +508,21 @@ fn emit_svg_fill_path( attributes.push(ATTR_TRANSFORM, matrix); } let defs = &mut attributes.0.svg_defs; - let fill_attribute = fill_graphic_list - .map(|list| list.render(defs, item_transform, element_transform, applied_stroke_transform, bounds_matrix, render_params, PaintTarget::Fill)) + let fill_attribute = fill_paint + .map(|paint| paint.render(defs, item_transform, element_transform, applied_stroke_transform, bounds_matrix, render_params, PaintTarget::Fill)) .unwrap_or_else(|| r#" fill="none""#.to_string()); attributes.push_val(fill_attribute); }); } +/// The whole-ramp settings a gradient item carries beside its element, defaulting each absent one. +pub(crate) fn gradient_settings_from_item(item: ItemRef<'_, Gradient>) -> GradientSettings { + match item { + ItemRef::ListItem(list, index) => GradientSettings::from_list_row_attributes(list, index), + ItemRef::Item(item) => GradientSettings::from_item_attributes(item), + } +} + /// Whether the affine transform inverts to a finite matrix (a zero, subnormal, or NaN determinant does not). pub(crate) fn transform_is_invertible(transform: DAffine2) -> bool { transform.matrix2.determinant().recip().is_finite() @@ -385,10 +532,10 @@ pub(crate) fn transform_is_invertible(transform: DAffine2) -> bool { /// non-uniform transform makes an ellipse), while linear is reduced to the equivalent non-sheared gradient line (the /// axis projected onto the band normal) so the iso-color bands keep following a sheared transform, which Vello can /// represent since it stores only two endpoints. -pub(crate) fn gradient_placement(transform: DAffine2, gradient_type: GradientType) -> DAffine2 { - match gradient_type { - GradientType::Radial => transform, - GradientType::Linear => { +pub(crate) fn gradient_placement(transform: DAffine2, gradient_form: GradientForm) -> DAffine2 { + match gradient_form { + GradientForm::Radial => transform, + GradientForm::Linear => { let axis = transform.matrix2.x_axis; let band_normal = transform.matrix2.y_axis.perp(); let line = if band_normal.length_squared() > 0. { axis.project_onto(band_normal) } else { axis }; @@ -400,32 +547,145 @@ pub(crate) fn gradient_placement(transform: DAffine2, gradient_type: GradientTyp } } -fn create_peniko_gradient_brush>(gradient_list: &S, multiplied_transform: &DAffine2) -> Option<(peniko::Brush, DAffine2)> { +fn create_peniko_gradient_brush>(gradient_list: &S, multiplied_transform: &DAffine2) -> Option<(peniko::Brush, DAffine2)> { let stops = gradient_list.element(0)?; - let gradient_type: GradientType = gradient_list.attr::(0); + let gradient_type: GradientForm = gradient_list.attr::(0); let gradient_transform: DAffine2 = gradient_list.attr::(0); - let spread_method: GradientSpreadMethod = gradient_list.attr::(0); + let spread_method: GradientSpread = gradient_list.attr::(0); +/// Where a renderer needs the transparent guard stops that emulate the `Clear` spread, which neither SVG nor Vello supports natively. +#[derive(Copy, Clone, PartialEq)] +pub(crate) enum ClearGuardPlacement { + /// Guards share the range ends' exact offsets, resolved against the visible colors by stop order alone. + SvgStopOrder, + /// Guards own the outermost ramp texel at each cleared end, since Vello's pad extension samples those texels for + /// everything beyond the ends and its ramp bake would tie-break a shared-offset guard away. The visible range + /// compresses inward by one texel per cleared end, costing about 0.4% of the ramp's color resolution. + VelloRampTexels, +} + +/// The gradient's renderable samples plus the gradient-space span `(start, end)` the renderer's 0 to 1 offset range must cover, normally the unit interval with the samples unchanged. +/// +/// The `Clear` spread brackets the samples with transparent guard stops placed per `guards`: the pad extension then +/// paints transparency outward while hard stops cut the paint off exactly at the unit range's boundaries. A radial +/// gradient's span still starts at zero, since its sampling distance never goes below the center. +pub(crate) fn spread_adjusted_samples(gradient: &Gradient, settings: GradientSettings, gradient_form: GradientForm, guards: ClearGuardPlacement) -> (GradientSamples, (f64, f64)) { + let samples = gradient.interpolated_samples(settings); + if settings.spread != GradientSpread::Clear { + return (samples, (0., 1.)); + } + + // The remapped offsets where the visible range's ends land, with the guards owning whatever lies outside them + let texel = 1. / (VELLO_GRADIENT_RAMP_TEXELS - 1.); + let (start_offset, end_offset) = match (guards, gradient_form) { + (ClearGuardPlacement::SvgStopOrder, _) => (0., 1.), + (ClearGuardPlacement::VelloRampTexels, GradientForm::Linear) => (texel, 1. - texel), + (ClearGuardPlacement::VelloRampTexels, GradientForm::Radial) => (0., 1. - texel), + }; + let remap = |position: f64| (1. - position) * start_offset + position * end_offset; + + // The geometric span grows to compensate for the compression, keeping the visible range at the unit interval + let scale = 1. / (end_offset - start_offset); + let span = (-start_offset * scale, (1. - start_offset) * scale); + + // A stopless gradient paints solid black, matching `Gradient::evaluate` + let first_color = samples.first().map_or(Color::BLACK, |&(_, color, _)| color); + let last_color = samples.last().map_or(Color::BLACK, |&(_, color, _)| color); + let needs_start_anchor = samples.first().is_none_or(|&(position, ..)| position > 0.); + let needs_end_anchor = samples.last().is_none_or(|&(position, ..)| position < 1.); + + let mut adjusted = Vec::with_capacity(samples.len() + 4); + + // Lead with the transparent guard (linear only, a radial's center is already the sampling minimum), then anchor the visible range's start color + if gradient_form == GradientForm::Linear { + adjusted.push((0., Color::TRANSPARENT, None)); + } + if needs_start_anchor { + adjusted.push((remap(0.), first_color, None)); + } + + adjusted.extend(samples.into_iter().map(|(position, color, midpoint)| (remap(position), color, midpoint))); + + // Anchor the visible range's end color, then cut to the trailing transparent guard + if needs_end_anchor { + adjusted.push((remap(1.), last_color, None)); + } + adjusted.push((1., Color::TRANSPARENT, None)); + + (adjusted, span) +} + +/// Converts a gradient's renderer samples to peniko color stops, duplicating an off-zero first stop at position 0 since Vello ignores the first stop's position and always treats it as 0. +fn peniko_color_stops(samples: &[(f64, Color, Option)]) -> peniko::ColorStops { let mut peniko_stops = peniko::ColorStops::new(); - for (position, color, _) in stops.interpolated_samples() { + + for &(position, color, _) in samples { + let color = peniko::color::DynamicColor::from_alpha_color(SRGBA8::from(color).to_peniko_color()); + + if peniko_stops.is_empty() && position > 0. { + peniko_stops.push(peniko::ColorStop { offset: 0., color }); + } + + peniko_stops.push(peniko::ColorStop { offset: position as f32, color }); + } + + // A gradient with no stops paints as solid black, matching `Gradient::evaluate` + if peniko_stops.is_empty() { peniko_stops.push(peniko::ColorStop { - offset: position as f32, - color: peniko::color::DynamicColor::from_alpha_color(SRGBA8::from(color).to_peniko_color()), + offset: 0., + color: peniko::color::DynamicColor::from_alpha_color(SRGBA8::from(Color::BLACK).to_peniko_color()), }); } + peniko_stops +} + +/// The peniko extend mode for a spread; `Clear` rides pad, with the transparent guard stops from `spread_adjusted_samples` doing the clearing. +fn peniko_extend(gradient_spread: GradientSpread) -> peniko::Extend { + match gradient_spread { + GradientSpread::Pad | GradientSpread::Clear => peniko::Extend::Pad, + GradientSpread::Reflect => peniko::Extend::Reflect, + GradientSpread::Repeat => peniko::Extend::Repeat, + } +} + +/// The Vello brush for one gradient item, paired with its placement transform. +/// `for_mask` keeps the fill opacity at full, as [`ItemRef::paint_opacity`] explains. +fn create_peniko_gradient_brush(gradient_item: ItemRef<'_, Gradient>, multiplied_transform: &DAffine2, for_mask: bool) -> Option<(peniko::Brush, DAffine2)> { + let stops = gradient_item.element()?; + + let gradient_form: GradientForm = gradient_item.attribute_cloned_or_default(ATTR_GRADIENT_FORM); + let gradient_transform: DAffine2 = gradient_item.attribute_cloned_or_default(ATTR_TRANSFORM); + let settings = gradient_settings_from_item(gradient_item); + + let (mut samples, span) = spread_adjusted_samples(stops, settings, gradient_form, ClearGuardPlacement::VelloRampTexels); + + let paint_opacity = gradient_item.paint_opacity(for_mask); + if paint_opacity < 1. { + // A stopless ramp gets its black stop downstream, too late to be faded, so it needs one here instead + if samples.is_empty() { + samples.push((0., Color::BLACK, None)); + } + + for (_, color, _) in &mut samples { + *color = color.with_alpha(color.a() * paint_opacity); + } + } + + let peniko_stops = peniko_color_stops(&samples); + // The unit gradient is placed by the desheared frame so a non-uniform transform produces the intended ellipse - let (start, end, gradient_to_device) = (DVec2::ZERO, DVec2::X, gradient_placement(multiplied_transform * gradient_transform, gradient_type)); + let (start, end, gradient_to_device) = (DVec2::X * span.0, DVec2::X * span.1, gradient_placement(multiplied_transform * gradient_transform, gradient_form)); let brush = peniko::Brush::Gradient(peniko::Gradient { - kind: match gradient_type { - GradientType::Linear => peniko::LinearGradientPosition { + kind: match gradient_form { + GradientForm::Linear => peniko::LinearGradientPosition { start: to_point(start), end: to_point(end), } .into(), - GradientType::Radial => peniko::RadialGradientPosition { + GradientForm::Radial => peniko::RadialGradientPosition { start_center: to_point(start), start_radius: 0., end_center: to_point(start), @@ -433,13 +693,10 @@ fn create_peniko_gradient_brush>(gradient } .into(), }, - extend: match spread_method { - GradientSpreadMethod::Pad => peniko::Extend::Pad, - GradientSpreadMethod::Reflect => peniko::Extend::Reflect, - GradientSpreadMethod::Repeat => peniko::Extend::Repeat, - }, + extend: peniko_extend(settings.spread), stops: peniko_stops, - interpolation_alpha_space: peniko::InterpolationAlphaSpace::Premultiplied, + // Straight alpha, keeping parity with the SVG renderer's stop interpolation + interpolation_alpha_space: peniko::InterpolationAlphaSpace::Unpremultiplied, ..Default::default() }); @@ -458,12 +715,12 @@ pub struct RenderMetadata { /// Source-geometry outlines for hover/selection overlays, separate from `click_targets` so /// nodes with an `editor:click_target` override still outline the precise geometry. pub outlines: HashMap>>, - /// Per-layer text frame from row 0's `editor:text_frame` attribute. + /// Per-layer text frame from item 0's `editor:text_frame` attribute. /// The Text tool composes this with `transform_to_viewport(layer)` to position its drag cage. pub text_frames: HashMap, pub clip_targets: HashSet, pub vector_data: HashMap>, - /// Per-layer `ATTR_FILL` row attribute, exposed so message handlers can read it. + /// Per-layer `ATTR_APPEARANCE` item attribute, exposed so message handlers can read it. #[cfg_attr(feature = "serde", serde(skip))] pub fill_attributes: HashMap>>>, /// Per-layer `ATTR_STROKE` row attribute, exposed so message handlers can read it. @@ -492,8 +749,7 @@ impl RenderMetadata { text_frames, clip_targets, vector_data, - fill_attributes, - stroke_attributes, + appearance_attributes, backgrounds, } = self; upstream_footprints.extend(other.upstream_footprints.iter()); @@ -504,8 +760,7 @@ impl RenderMetadata { text_frames.extend(other.text_frames.iter()); clip_targets.extend(other.clip_targets.iter()); vector_data.extend(other.vector_data.iter().map(|(id, data)| (*id, data.clone()))); - fill_attributes.extend(other.fill_attributes.iter().map(|(id, data)| (*id, data.clone()))); - stroke_attributes.extend(other.stroke_attributes.iter().map(|(id, data)| (*id, data.clone()))); + appearance_attributes.extend(other.appearance_attributes.iter().map(|(id, data)| (*id, data.clone()))); // TODO: Find a better non O(n^2) way to merge backgrounds for background in &other.backgrounds { @@ -529,18 +784,19 @@ pub trait Render: BoundingBox + RenderComplexity { fn render_to_vello(&self, scene: &mut Scene, transform: DAffine2, context: &mut RenderContext, _render_params: &RenderParams); /// The upstream click targets for each layer are collected during the render so that they do not have to be calculated for each click detection. - fn add_upstream_click_targets(&self, _click_targets: &mut Vec) {} + /// `inherited_appearance` is the nearest ancestor's appearance, cascading to items that lack their own, mirroring the render cascade. + fn add_upstream_click_targets(&self, _click_targets: &mut Vec, _inherited_appearance: Option<&Appearance>) {} /// Like `add_upstream_click_targets` but for visual outlines. `List` overrides this to ignore `editor:click_target` so outlines reflect the actual geometry. - fn add_upstream_outline_targets(&self, outlines: &mut Vec) { - self.add_upstream_click_targets(outlines); + fn add_upstream_outline_targets(&self, outlines: &mut Vec, inherited_appearance: Option<&Appearance>) { + self.add_upstream_click_targets(outlines, inherited_appearance); } // TODO: Store all click targets in a vec which contains the AABB, click target, and path // fn add_click_targets(&self, click_targets: &mut Vec<([DVec2; 2], ClickTarget, Vec)>, current_path: Option) {} /// Recursively iterate over data in the render (including nested layer stacks upstream of a vector node, in the case of a boolean operation) to collect the footprints, click targets, and vector modify. - fn collect_metadata(&self, _metadata: &mut RenderMetadata, _footprint: Footprint, _element_id: Option) {} + fn collect_metadata(&self, _metadata: &mut RenderMetadata, _footprint: Footprint, _element_id: Option, _inherited_appearance: Option<&Appearance>) {} fn contains_artboard(&self) -> bool { false @@ -552,7 +808,7 @@ pub trait Render: BoundingBox + RenderComplexity { impl Render for Graphic<'_> { fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { match self { - Graphic::Graphic(list) => list.render_svg(render, render_params), + Graphic::GraphicList(list) => list.render_svg(render, render_params), Graphic::Vector(vector) => render_vector_svg(&Single(vector), render, render_params), Graphic::RasterCPU(raster) => render_raster_cpu_svg(&Single(raster), render, render_params), Graphic::RasterGPU(_) => (), @@ -565,7 +821,7 @@ impl Render for Graphic<'_> { fn render_to_vello(&self, scene: &mut Scene, transform: DAffine2, context: &mut RenderContext, render_params: &RenderParams) { match self { - Graphic::Graphic(list) => list.render_to_vello(scene, transform, context, render_params), + Graphic::GraphicList(list) => list.render_to_vello(scene, transform, context, render_params), Graphic::Vector(vector) => render_vector_vello(&Single(vector), scene, transform, context, render_params), Graphic::RasterCPU(raster) => render_raster_cpu_vello(&Single(raster), scene, transform, render_params), Graphic::RasterGPU(raster) => render_raster_gpu_vello(&Single(raster), scene, transform, context, render_params), @@ -590,14 +846,14 @@ impl Render for Graphic<'_> { fn contains_artboard(&self) -> bool { match self { - Graphic::Graphic(list) => list.contains_artboard(), + Graphic::GraphicList(list) => list.contains_artboard(), _ => false, } } fn new_ids_from_hash(&mut self, reference: Option) { match self { - Graphic::Graphic(list) => list.new_ids_from_hash(reference), + Graphic::GraphicList(list) => list.new_ids_from_hash(reference), Graphic::Vector(vector) => vector.vector_new_ids_from_hash(reference.map(|id| id.0).unwrap_or_default()), _ => (), } @@ -607,7 +863,7 @@ impl Render for Graphic<'_> { fn render_element_svg<'a>(element: &'a Graphic, reach: PaintReach<'a>, render: &mut SvgRender, render_params: &RenderParams) { match element { Graphic::Vector(vector) if reach.applies() => render_vector_svg(&PaintOverlay::new(&Single(vector), reach.paint), render, render_params), - Graphic::Graphic(inner) => render_graphic_svg_with(inner, reach.nested(), render, render_params), + Graphic::GraphicList(inner) => render_graphic_svg_with(inner, reach.nested(), render, render_params), Graphic::Group(group) => render_group_svg(group, reach, render, render_params), _ => element.render_svg(render, render_params), } @@ -616,7 +872,7 @@ fn render_element_svg<'a>(element: &'a Graphic, reach: PaintReach<'a>, render: & fn render_element_vello<'a>(element: &'a Graphic, reach: PaintReach<'a>, scene: &mut Scene, transform: DAffine2, context: &mut RenderContext, render_params: &RenderParams) { match element { Graphic::Vector(vector) if reach.applies() => render_vector_vello(&PaintOverlay::new(&Single(vector), reach.paint), scene, transform, context, render_params), - Graphic::Graphic(inner) => render_graphic_vello_with(inner, reach.nested(), scene, transform, context, render_params), + Graphic::GraphicList(inner) => render_graphic_vello_with(inner, reach.nested(), scene, transform, context, render_params), Graphic::Group(group) => render_group_vello(group, reach, scene, transform, context, render_params), _ => element.render_to_vello(scene, transform, context, render_params), } @@ -647,7 +903,7 @@ fn collect_element_metadata<'a>( metadata.upstream_footprints.insert(element_id, footprint); match element { Graphic::Group(group) => collect_group_row_metadata(group, metadata, element_id), - Graphic::Graphic(_) => {} + Graphic::GraphicList(_) => {} // A leaf's layer identity and transform ride its containing lane. Graphic::Vector(_) => { metadata.first_element_source_id.insert(element_id, lane_source); @@ -660,7 +916,7 @@ fn collect_element_metadata<'a>( } match element { - Graphic::Graphic(list) => collect_graphic_metadata_with(list, reach.nested(), metadata, footprint, element_id), + Graphic::GraphicList(list) => collect_graphic_metadata_with(list, reach.nested(), metadata, footprint, element_id), Graphic::Vector(vector) if reach.applies() => collect_vector_metadata(&PaintOverlay::new(&Single(vector), reach.paint), metadata, footprint, element_id), Graphic::Vector(vector) => collect_vector_metadata(&Single(vector), metadata, footprint, element_id), Graphic::RasterCPU(raster) => collect_raster_metadata(&Single(raster), metadata, footprint, element_id), @@ -694,7 +950,7 @@ fn collect_group_row_metadata(group: &Group, metadata: &mut RenderMetadata, elem .or_else(|| lane_zero_transform::>(item)) .or_else(|| lane_zero_transform::>(item)) .or_else(|| lane_zero_transform::(item)) - .or_else(|| lane_zero_transform::(item)) + .or_else(|| lane_zero_transform::(item)) .or_else(|| lane_zero_transform::(item)); if let Some(transform) = transform { metadata.local_transforms.insert(element_id, transform); @@ -703,7 +959,7 @@ fn collect_group_row_metadata(group: &Group, metadata: &mut RenderMetadata, elem fn add_element_upstream_click_targets<'a>(element: &'a Graphic, reach: PaintReach<'a>, click_targets: &mut Vec) { match element { - Graphic::Graphic(list) => add_graphic_upstream_click_targets_with(list, reach.nested(), click_targets), + Graphic::GraphicList(list) => add_graphic_upstream_click_targets_with(list, reach.nested(), click_targets), Graphic::Vector(vector) if reach.applies() => add_vector_upstream_click_targets(&PaintOverlay::new(&Single(vector), reach.paint), click_targets), Graphic::Vector(vector) => add_vector_upstream_click_targets(&Single(vector), click_targets), Graphic::RasterCPU(_) | Graphic::RasterGPU(_) => add_raster_upstream_click_targets(click_targets), @@ -715,7 +971,7 @@ fn add_element_upstream_click_targets<'a>(element: &'a Graphic, reach: PaintReac fn add_element_upstream_outline_targets<'a>(element: &'a Graphic, reach: PaintReach<'a>, outlines: &mut Vec) { match element { - Graphic::Graphic(list) => add_graphic_upstream_outline_targets_with(list, reach.nested(), outlines), + Graphic::GraphicList(list) => add_graphic_upstream_outline_targets_with(list, reach.nested(), outlines), Graphic::Vector(vector) if reach.applies() => add_vector_upstream_outline_targets(&PaintOverlay::new(&Single(vector), reach.paint), outlines), Graphic::Vector(vector) => add_vector_upstream_outline_targets(&Single(vector), outlines), Graphic::RasterCPU(_) | Graphic::RasterGPU(_) => add_raster_upstream_click_targets(outlines), @@ -741,7 +997,7 @@ fn render_group_svg<'a>(group: &'a Group, reach: PaintReach<'a>, render: &mut Sv } else if item.typed_lanes::>().is_some() { } else if let Some(run) = RunView::::new(item) { render_color_svg(&run, render, render_params) - } else if let Some(run) = RunView::::new(item) { + } else if let Some(run) = RunView::::new(item) { render_gradient_svg(&run, render, render_params) } else if let Some(run) = RunView::::new(item) { render_text_svg(&run, render, render_params) @@ -763,7 +1019,7 @@ fn render_group_vello<'a>(group: &'a Group, reach: PaintReach<'a>, scene: &mut S render_raster_gpu_vello(&run, scene, transform, context, render_params) } else if let Some(run) = RunView::::new(item) { render_color_vello(&run, scene, render_params) - } else if let Some(run) = RunView::::new(item) { + } else if let Some(run) = RunView::::new(item) { render_gradient_vello(&run, scene, transform, render_params) } else if let Some(run) = RunView::::new(item) { render_text_vello(&run, scene, transform, render_params) @@ -786,7 +1042,7 @@ fn collect_group_metadata<'a>(group: &'a Group, reach: PaintReach<'a>, metadata: collect_raster_metadata(&run, metadata, footprint, element_id) } else if let Some(run) = RunView::>::new(item) { collect_raster_metadata(&run, metadata, footprint, element_id) - } else if item.typed_lanes::().is_some() || item.typed_lanes::().is_some() { + } else if item.typed_lanes::().is_some() || item.typed_lanes::().is_some() { } else if let Some(run) = RunView::::new(item) { collect_text_metadata(&run, metadata, footprint, element_id) } @@ -930,7 +1186,7 @@ fn collect_artboard_metadata<'a, S: LaneSource>>(source: let element_id = layer_path.last().copied(); if let Some(element_id) = element_id { - let subpath = Subpath::new_rectangle(DVec2::ZERO, dimensions); + let subpath = rectangle_bezpath(DVec2::ZERO, dimensions); metadata.click_targets.insert(element_id, vec![ClickTarget::new_with_subpath(subpath, 0.).into()]); metadata.upstream_footprints.insert(element_id, footprint); metadata.local_transforms.insert(element_id, DAffine2::from_translation(location)); @@ -950,7 +1206,7 @@ fn collect_artboard_metadata<'a, S: LaneSource>>(source: fn add_artboard_upstream_click_targets<'a, S: LaneSource>>(source: &S, click_targets: &mut Vec) { for index in 0..source.lane_count() { let dimensions: DVec2 = source.attr::(index); - let subpath_rectangle = Subpath::new_rectangle(DVec2::ZERO, dimensions); + let subpath_rectangle = rectangle_bezpath(DVec2::ZERO, dimensions); click_targets.push(ClickTarget::new_with_subpath(subpath_rectangle, 0.)); } } @@ -1368,6 +1624,313 @@ fn render_vector_svg>(source: &S, render: &mut S render_params, ); } + }; + }; + + let use_face_fill = element.use_face_fill(); + let do_fill = |scene: &mut Scene, context: &mut RenderContext| { + if use_face_fill { + for mut face_path in element.construct_faces() { + face_path.apply_affine(Affine::new(applied_stroke_transform.to_cols_array())); + let mut kurbo_path = kurbo::BezPath::new(); + for element in face_path { + kurbo_path.push(element); + } + do_fill_path(scene, context, &kurbo_path, peniko::Fill::NonZero); + } + } else { + do_fill_path(scene, context, &path, peniko::Fill::NonZero); + } + }; + + let do_stroke = |scene: &mut Scene, width_scale: f64, context: &mut RenderContext| { + let Some(paint) = stroke_paint else { return }; + let Some(stroke) = stroke else { return }; + + let cap = match stroke.cap { + StrokeCap::Butt => Cap::Butt, + StrokeCap::Round => Cap::Round, + StrokeCap::Square => Cap::Square, + }; + let join = match stroke.join { + StrokeJoin::Miter => Join::Miter, + StrokeJoin::Bevel => Join::Bevel, + StrokeJoin::Round => Join::Round, + }; + let dash_pattern = stroke.dash_lengths.iter().map(|l| l.max(0.)).collect(); + let stroke = kurbo::Stroke { + width: stroke.weight * width_scale, + miter_limit: stroke.join_miter_limit, + join, + start_cap: cap, + end_cap: cap, + dash_pattern, + dash_offset: stroke.dash_offset, + }; + + if stroke.width <= 0. { + return; + }; + + let solid_stroke = |scene: &mut Scene, color: Option| { + let Some(color) = color else { return }; + + let brush = peniko::Brush::Solid(SRGBA8::from(color).to_peniko_color()); + + scene.stroke(&stroke, kurbo::Affine::new(element_transform.to_cols_array()), &brush, None, &path); + }; + let gradient_stroke = |scene: &mut Scene, gradient_item: ItemRef<'_, Gradient>| { + let Some((brush, gradient_to_device)) = create_peniko_gradient_brush(gradient_item, &multiplied_transform, render_params.for_mask) else { + return; + }; + let inverse_element_transform = if transform_is_invertible(element_transform) { + element_transform.inverse() + } else { + Default::default() + }; + let brush_transform = kurbo::Affine::new((inverse_element_transform * gradient_to_device).to_cols_array()); + + scene.stroke(&stroke, kurbo::Affine::new(element_transform.to_cols_array()), &brush, Some(brush_transform), &path); + }; + + match paint { + Graphic::None(_) | Graphic::NoneList(_) => (), + Graphic::Color(item) => solid_stroke(scene, faded_paint_color(ItemRef::Item(item), render_params.for_mask)), + Graphic::ColorList(list) => solid_stroke(scene, composite_paint_colors(list, render_params.for_mask)), + Graphic::Gradient(item) => gradient_stroke(scene, ItemRef::Item(item)), + // Stacked gradients cannot be composited into one brush, so they fall through to the clipped texture path + Graphic::GradientList(list) if list.len() <= 1 => gradient_stroke(scene, ItemRef::ListItem(list, 0)), + // Any other graphic content paints as a texture clipped to the stroked region + Graphic::GradientList(_) + | Graphic::GraphicList(_) + | Graphic::Vector(_) + | Graphic::RasterCPU(_) + | Graphic::RasterGPU(_) + | Graphic::Text(_) + | Graphic::VectorList(_) + | Graphic::RasterCPUList(_) + | Graphic::RasterGPUList(_) + | Graphic::GraphicList(_) + | Graphic::TextList(_) + | Graphic::StrokeList(_) => { + let stroked = peniko::kurbo::stroke(path.iter(), &stroke, &StrokeOpts::default(), 0.01); + + scene.push_clip_layer(peniko::Fill::NonZero, kurbo::Affine::new(element_transform.to_cols_array()), &stroked); + paint.render_to_vello(scene, multiplied_transform, context, paint_render_params); + scene.pop_layer(); + } + }; + }; + + // Render the path + match render_params.render_mode { + RenderMode::Outline => { + let (outline_stroke, outline_color_peniko) = get_outline_styles(render_params); + + scene.stroke(&outline_stroke, kurbo::Affine::new(element_transform.to_cols_array()), outline_color_peniko, None, &path); + } + _ => { + if use_layer { + let cloned_element = element.clone(); + + // The mask must draw at full alpha so `SrcOut` fully zeroes the path interior. + // The outer opacity/blend layer (above) handles the user-set opacity. + let mut mask_item = Item::new_from_element(cloned_element).with_attribute(ATTR_TRANSFORM, item_transform); + let black_fill = Graphic::ColorList(List::new_from_element(Color::BLACK)); + mask_item.set_attribute(ATTR_APPEARANCE, Appearance::new_single(Coverage::new_fill(), black_fill)); + let vector_list = List::new_from_item(mask_item); + + let bounds = element.bounding_box_with_transform(multiplied_transform).unwrap_or(layer_bounds); + // This branch is gated on `can_draw_aligned_stroke`, which already requires every subpath is closed + let inflation = stroke.map_or(0., |stroke| stroke.max_aabb_inflation(true)); + let (largest_scale, _) = singular_values(applied_stroke_transform); + let quad = Quad::from_box(bounds).inflate(inflation * largest_scale); + let bounds = quad.bounding_box(); + let rect = kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); + + let compose = if stroke.is_some_and(|x| x.align == StrokeAlign::Outside) { + peniko::Compose::SrcOut + } else { + peniko::Compose::SrcIn + }; + + if wants_stroke_below { + scene.push_layer(peniko::Fill::NonZero, peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect); + vector_list.render_to_vello(scene, parent_transform, context, &render_params.for_alignment(applied_stroke_transform)); + scene.push_layer(peniko::Fill::NonZero, peniko::BlendMode::new(peniko::Mix::Normal, compose), 1., kurbo::Affine::IDENTITY, &rect); + + do_stroke(scene, 2., context); + + scene.pop_layer(); + scene.pop_layer(); + + do_fill(scene, context); + } else { + // Fill first (unclipped), then stroke (clipped) above + do_fill(scene, context); + + scene.push_layer(peniko::Fill::NonZero, peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect); + vector_list.render_to_vello(scene, parent_transform, context, &render_params.for_alignment(applied_stroke_transform)); + scene.push_layer(peniko::Fill::NonZero, peniko::BlendMode::new(peniko::Mix::Normal, compose), 1., kurbo::Affine::IDENTITY, &rect); + + do_stroke(scene, 2., context); + + scene.pop_layer(); + scene.pop_layer(); + } + } else { + // Non-aligned strokes or open paths: default order behavior + enum Op { + Fill, + Stroke, + } + + let order = match wants_stroke_below { + true => [Op::Stroke, Op::Fill], + false => [Op::Fill, Op::Stroke], // Default + }; + + for operation in &order { + match operation { + Op::Fill => do_fill(scene, context), + Op::Stroke => do_stroke(scene, 1., context), + } + } + } + } + } + + if clip_layers { + scene.pop_layer(); + scene.pop_layer(); + } + + // If we pushed a layer for opacity or a blend mode, we need to pop it + if layer { + scene.pop_layer(); + } +} + +/// The full metadata pass over a run of vector items. +/// Aggregates all items' targets per element_id so multi-item lists (e.g. the "Text to Vector Glyphs" node) produce hit areas for every glyph. +/// Targets are baked relative to the first item carrying each element_id, since that is the transform recorded as its `local_transforms` entry. +fn collect_vector_items_metadata<'a>( + items: impl Iterator>, + metadata: &mut RenderMetadata, + footprint: Footprint, + caller_element_id: Option, + inherited_appearance: Option<&Appearance>, +) { + let mut reference_transforms: HashMap = HashMap::new(); + + let mut accumulated_click_targets: HashMap>> = HashMap::new(); + let mut accumulated_outlines: HashMap>> = HashMap::new(); + + for item in items { + let Some(source) = item.element() else { continue }; + let transform: DAffine2 = item.attribute_cloned_or_default(ATTR_TRANSFORM); + // The item's own appearance wins over one cascading down from an ancestor + let appearance = Appearance::cascade(item.attribute::(ATTR_APPEARANCE), inherited_appearance); + + if let Some(element_id) = caller_element_id.or(item.layer()) { + let reference_transform = *reference_transforms.entry(element_id).or_insert(transform); + let reference_inverse = if transform_is_invertible(reference_transform) { + reference_transform.inverse() + } else { + DAffine2::IDENTITY + }; + + // Use click-target override if the item provides one (e.g. 'Text' node's per-glyph bboxes) + let click_target_vector = item.attribute::(ATTR_EDITOR_CLICK_TARGET).unwrap_or(source); + + let item_relative_transform = reference_inverse * transform; + + let mut click_targets_unwrapped = Vec::new(); + extend_targets_from_vector(&mut click_targets_unwrapped, appearance, click_target_vector, item_relative_transform); + accumulated_click_targets.entry(element_id).or_default().extend(click_targets_unwrapped.into_iter().map(Arc::new)); + + // Outlines always use source geometry so the visual outline reflects actual letterforms + let mut outlines_unwrapped = Vec::new(); + extend_targets_from_vector(&mut outlines_unwrapped, appearance, source, item_relative_transform); + accumulated_outlines.entry(element_id).or_default().extend(outlines_unwrapped.into_iter().map(Arc::new)); + + // Source geometry (not the click-target override) so editing tools work on letterforms. + // Recorded together with `vector_data` from the same (first) item so stroke geometry stays consistent with the paint. + // Only item 0 is recorded since editing tools can only target a single item currently. + // If that item has no paint attribute, none is recorded. + if let std::collections::hash_map::Entry::Vacant(e) = metadata.vector_data.entry(element_id) { + e.insert(Arc::new(source.clone())); + + if let Some(appearance) = appearance { + metadata.appearance_attributes.insert(element_id, Arc::new(appearance.clone())); + } + } + + // Surface `editor:text_frame` for the Text tool's drag cage + if let Some(&frame) = item.attribute::(ATTR_EDITOR_TEXT_FRAME) { + metadata.text_frames.entry(element_id).or_insert(frame); + } + } + + // If this item carries a snapshot of upstream graphic content (e.g. it was produced by Boolean Operation, + // Combine Paths, Morph, or any other destructive merge), recurse into that snapshot so the editor can + // surface the original child layers' click targets. + let upstream_nested_layers = item.attribute_cloned_or_default::>(ATTR_EDITOR_MERGED_LAYERS); + if !upstream_nested_layers.is_empty() { + let mut upstream_footprint = footprint; + upstream_footprint.transform *= transform; + // Snapshot layers carry their own styling, so the merged result's appearance must not cascade into them + upstream_nested_layers.collect_metadata(metadata, upstream_footprint, None, None); + } + } + + // Overwrite with the full accumulated set (not just item 0's contribution) + for (element_id, targets) in accumulated_click_targets { + metadata.click_targets.insert(element_id, targets); + } + for (element_id, targets) in accumulated_outlines { + metadata.outlines.insert(element_id, targets); + } + + // Recovering element_id from `editor:layer_path` means `Graphic::collect_metadata` skipped this transform metadata. + // It lands after the snapshot recursion above so each element keeps the pair its targets were baked against. + if caller_element_id.is_none() { + for (element_id, reference_transform) in reference_transforms { + metadata.upstream_footprints.insert(element_id, footprint); + metadata.local_transforms.insert(element_id, reference_transform); + } + } +} + +/// Collects one vector item's click target into the caller's list, baked through the item's transform. +fn add_vector_item_click_targets(item: ItemRef<'_, Vector>, click_targets: &mut Vec, inherited_appearance: Option<&Appearance>) { + let Some(source) = item.element() else { return }; + let transform: DAffine2 = item.attribute_cloned_or_default(ATTR_TRANSFORM); + let appearance = Appearance::cascade(item.attribute::(ATTR_APPEARANCE), inherited_appearance); + + // Use click-target override geometry if the item provides one (e.g. 'Text' node's per-glyph bounding boxes) + let vector = item.attribute::(ATTR_EDITOR_CLICK_TARGET).unwrap_or(source); + + extend_targets_from_vector(click_targets, appearance, vector, transform); +} + +/// Like [`add_vector_item_click_targets`] but on source geometry only, ignoring `editor:click_target`, so outlines reflect actual letterforms. +fn add_vector_item_outline_targets(item: ItemRef<'_, Vector>, outlines: &mut Vec, inherited_appearance: Option<&Appearance>) { + let Some(source) = item.element() else { return }; + let transform: DAffine2 = item.attribute_cloned_or_default(ATTR_TRANSFORM); + let appearance = Appearance::cascade(item.attribute::(ATTR_APPEARANCE), inherited_appearance); + + extend_targets_from_vector(outlines, appearance, source, transform); +} + +impl Render for List { + fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { + let mut clip_mask_state: Option<(u64, MaskType)> = None; + + for index in 0..self.len() { + // A clip-flagged item is masked by its nearest preceding unflagged sibling, which a consecutive run shares + let next_clips = index + 1 < self.len() && self.attribute_cloned_or_default::(ATTR_CLIPPING_MASK, index + 1); + render_vector_item_svg(ItemRef::ListItem(self, index), next_clips, &mut clip_mask_state, render, render_params); } render.leaf_tag("path", |attributes| { @@ -1580,7 +2143,7 @@ fn render_vector_vello>(source: &S, scene: &mut let brush_transform = kurbo::Affine::new((inverse_element_transform * gradient_to_device).to_cols_array()); scene.fill(fill_rule, kurbo::Affine::new(element_transform.to_cols_array()), &brush, Some(brush_transform), path); } - Graphic::Vector(_) | Graphic::RasterCPU(_) | Graphic::RasterGPU(_) | Graphic::Graphic(_) | Graphic::Text(_) | Graphic::Group(_) => { + Graphic::Vector(_) | Graphic::RasterCPU(_) | Graphic::RasterGPU(_) | Graphic::GraphicList(_) | Graphic::Text(_) | Graphic::Group(_) => { scene.push_clip_layer(fill_rule, kurbo::Affine::new(element_transform.to_cols_array()), path); paint.render_to_vello(scene, multiplied_transform, context, render_params); scene.pop_layer(); @@ -1661,7 +2224,7 @@ fn render_vector_vello>(source: &S, scene: &mut scene.stroke(&stroke, kurbo::Affine::new(element_transform.to_cols_array()), &brush, Some(brush_transform), &path); } - Graphic::Vector(_) | Graphic::RasterCPU(_) | Graphic::RasterGPU(_) | Graphic::Graphic(_) | Graphic::Text(_) | Graphic::Group(_) => { + Graphic::Vector(_) | Graphic::RasterCPU(_) | Graphic::RasterGPU(_) | Graphic::GraphicList(_) | Graphic::Text(_) | Graphic::Group(_) => { let stroked = peniko::kurbo::stroke(path.iter(), &stroke, &StrokeOpts::default(), 0.01); scene.push_clip_layer(peniko::Fill::NonZero, kurbo::Affine::new(element_transform.to_cols_array()), &stroked); @@ -1889,18 +2452,19 @@ impl Render for List { } } -/// Build one `CompoundPath` (non-zero fill rule, so holes like the inside of an "O" work +/// Build one multi-contour `Path` (non-zero fill rule, so holes like the inside of an "O" work /// correctly) plus one `FreePoint` per disconnected anchor, apply the transform, and append. fn extend_targets_from_vector>(targets: &mut Vec, source: &S, index: usize, geometry: &Vector, transform: DAffine2) { let filled = has_paint::(source, index); - let mut subpaths: Vec> = geometry.stroke_bezier_paths().collect(); - let all_subpaths_closed = subpaths.iter().all(|subpath| subpath.closed()); + let mut bezpaths: Vec = geometry.stroke_bezpath_iter().filter(|bezpath| !bezpath.elements().is_empty()).collect(); + let all_contours_closed = bezpaths.iter().all(|bezpath| matches!(bezpath.elements().last(), Some(PathEl::ClosePath))); // Inside/Outside-aligned strokes reach `weight` from the centerline rather than `weight / 2` per side, // so they need double the click inflation. Alignment is only honored by the renderer for fully-closed paths. - let stroke_width = geometry.stroke.as_ref().map_or(0., |stroke| { - if stroke.align.is_not_centered() && all_subpaths_closed { + let stroke_width = appearance.and_then(|appearance| appearance.first_coverage_of(Cover::Stroke)).map_or(0., |coverage| { + let stroke = coverage.stroke_params(); + if stroke.align.is_not_centered() && all_contours_closed { stroke.weight * 2. } else { stroke.weight @@ -1908,13 +2472,20 @@ fn extend_targets_from_vector>(targets: &mut Vec }); if filled { - for subpath in &mut subpaths { - subpath.set_closed(true); + for bezpath in &mut bezpaths { + if !matches!(bezpath.elements().last(), Some(PathEl::ClosePath)) { + bezpath.close_path(); + } } } - if !subpaths.is_empty() { - let mut click_target = ClickTarget::new_with_compound_path(subpaths, stroke_width); + if !bezpaths.is_empty() { + let mut combined_path = BezPath::new(); + for bezpath in bezpaths { + combined_path.extend(bezpath); + } + + let mut click_target = ClickTarget::new_with_path(combined_path, stroke_width); click_target.apply_transform(transform); targets.push(click_target); } @@ -2085,7 +2656,7 @@ fn render_raster_cpu_vello> + BoundingBox>(s fn collect_raster_metadata(source: &S, metadata: &mut RenderMetadata, footprint: Footprint, element_id: Option) { let Some(element_id) = element_id else { return }; - let subpath = Subpath::new_rectangle(DVec2::ZERO, DVec2::ONE); + let subpath = rectangle_bezpath(DVec2::ZERO, DVec2::ONE); metadata.click_targets.insert(element_id, vec![ClickTarget::new_with_subpath(subpath, 0.).into()]); metadata.upstream_footprints.insert(element_id, footprint); @@ -2102,7 +2673,7 @@ fn collect_raster_metadata(source: &S, metadata: &mut RenderMetad } fn add_raster_upstream_click_targets(click_targets: &mut Vec) { - let subpath = Subpath::new_rectangle(DVec2::ZERO, DVec2::ONE); + let subpath = rectangle_bezpath(DVec2::ZERO, DVec2::ONE); click_targets.push(ClickTarget::new_with_subpath(subpath, 0.)); } @@ -2196,10 +2767,53 @@ impl Render for List> { fn collect_metadata(&self, metadata: &mut RenderMetadata, footprint: Footprint, element_id: Option) { collect_raster_metadata(self, metadata, footprint, element_id) } +} fn add_upstream_click_targets(&self, click_targets: &mut Vec) { add_raster_upstream_click_targets(click_targets) } + + let transform_attribute: DAffine2 = item.attribute_cloned_or_default(ATTR_TRANSFORM); + + if let RenderMode::Outline = render_params.render_mode { + let outline_transform = transform * transform_attribute; + draw_raster_outline(scene, &outline_transform, render_params); + + if layer { + scene.pop_layer(); + } + + return; + } + + let width = raster.data().width(); + let height = raster.data().height(); + + let resource_override_index = context.resource_overrides.len(); + // Stable across frames so vello reuses the atlas slot; high bit avoids Blob::new counter ids. + let blob_id = (resource_override_index as u64) << 40 | (width as u64) << 20 | height as u64 | 1 << 63; + let blob = peniko::Blob::from_raw_parts(LAZY_ARC_VEC_ZERO_U8.deref().clone(), blob_id); + let image = peniko::ImageBrush::new(peniko::ImageData { + data: blob, + format: peniko::ImageFormat::Rgba8, + width, + height, + alpha_type: peniko::ImageAlphaType::Alpha, + }) + .with_extend(peniko::Extend::Pad); + let image_transform = transform * transform_attribute * DAffine2::from_scale(1. / DVec2::new(width as f64, height as f64)); + scene.draw_image(&image, kurbo::Affine::new(image_transform.to_cols_array())); + context.resource_overrides.push((image, raster.texture.clone())); + + if layer { + scene.pop_layer() + } +} + +impl Render for List { + fn render_svg(&self, _render: &mut SvgRender, _render_params: &RenderParams) {} + + fn render_to_vello(&self, _scene: &mut Scene, _transform: DAffine2, _context: &mut RenderContext, _render_params: &RenderParams) {} } // Since colors and gradients are technically infinitely big, we have to implement @@ -2282,7 +2896,7 @@ impl Render for List { } } -fn render_gradient_svg>(source: &S, render: &mut SvgRender, render_params: &RenderParams) { +fn render_gradient_svg>(source: &S, render: &mut SvgRender, render_params: &RenderParams) { // For thumbnails the gradient fills a finite rect at the footprint's document space bounds, with a 1-unit margin to cover the `as u32` truncation of `Footprint::resolution`. // The viewBox crops the overshoot. Canvas rendering keeps the polyline path since Chrome rejects rects larger than ~20 million. let thumbnail_rect = if render_params.thumbnail { @@ -2299,8 +2913,8 @@ fn render_gradient_svg>(source: &S, rende let blend_mode: BlendMode = source.attr::(index); let opacity_attr: f64 = source.attr::(index); let opacity_fill_attr: f64 = source.attr::(index); - let spread_method: GradientSpreadMethod = source.attr::(index); - let gradient_type: GradientType = source.attr::(index); + let spread_method: GradientSpread = source.attr::(index); + let gradient_type: GradientForm = source.attr::(index); let tag = if thumbnail_rect.is_some() { "rect" } else { "polyline" }; render.leaf_tag(tag, |attributes| { if let Some((min, size)) = thumbnail_rect { @@ -2338,7 +2952,7 @@ fn render_gradient_svg>(source: &S, rende }; let gradient_id = generate_uuid(); - let spread_method_attribute = if spread_method == GradientSpreadMethod::Pad { + let spread_method_attribute = if spread_method == GradientSpread::Pad { String::new() } else { format!(r#" spreadMethod="{}""#, spread_method.svg_name()) @@ -2346,13 +2960,13 @@ fn render_gradient_svg>(source: &S, rende // The unit gradient line is the +X unit vector in local space, before the item's transform is applied match gradient_type { - GradientType::Linear => { + GradientForm::Linear => { let _ = write!( &mut attributes.0.svg_defs, r#"{stop_string}"# ); } - GradientType::Radial => { + GradientForm::Radial => { let _ = write!( &mut attributes.0.svg_defs, r#"{stop_string}"# @@ -2374,7 +2988,7 @@ fn render_gradient_svg>(source: &S, rende } } -fn render_gradient_vello>(source: &S, scene: &mut Scene, parent_transform: DAffine2, render_params: &RenderParams) { +fn render_gradient_vello>(source: &S, scene: &mut Scene, parent_transform: DAffine2, render_params: &RenderParams) { use vello::peniko; if let RenderMode::Outline = render_params.render_mode { @@ -2383,8 +2997,8 @@ fn render_gradient_vello>(source: &S, sce for index in 0..source.lane_count() { let Some(gradient) = source.element(index) else { continue }; - let spread_method: GradientSpreadMethod = source.attr::(index); - let gradient_type: GradientType = source.attr::(index); + let spread_method: GradientSpread = source.attr::(index); + let gradient_type: GradientForm = source.attr::(index); let transform: DAffine2 = source.attr::(index); let blend_mode_attr: BlendMode = source.attr::(index); let opacity_attr: f64 = source.attr::(index); @@ -2403,20 +3017,20 @@ fn render_gradient_vello>(source: &S, sce } let extend = match spread_method { - GradientSpreadMethod::Pad => peniko::Extend::Pad, - GradientSpreadMethod::Reflect => peniko::Extend::Reflect, - GradientSpreadMethod::Repeat => peniko::Extend::Repeat, + GradientSpread::Pad => peniko::Extend::Pad, + GradientSpread::Reflect => peniko::Extend::Reflect, + GradientSpread::Repeat => peniko::Extend::Repeat, }; // The unit gradient line is the +X unit vector in local space, before the item's transform is applied. // For radial, the unit-radius circle at the origin scales out to the line's length once the brush transform applies. let kind = match gradient_type { - GradientType::Linear => peniko::LinearGradientPosition { + GradientForm::Linear => peniko::LinearGradientPosition { start: to_point(DVec2::ZERO), end: to_point(DVec2::X), } .into(), - GradientType::Radial => peniko::RadialGradientPosition { + GradientForm::Radial => peniko::RadialGradientPosition { start_center: to_point(DVec2::ZERO), start_radius: 0., end_center: to_point(DVec2::ZERO), @@ -2458,7 +3072,7 @@ fn render_gradient_vello>(source: &S, sce } } -impl Render for List { +impl Render for List { fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { render_gradient_svg(self, render, render_params) } @@ -2466,6 +3080,240 @@ impl Render for List { fn render_to_vello(&self, scene: &mut Scene, parent_transform: DAffine2, _context: &mut RenderContext, render_params: &RenderParams) { render_gradient_vello(self, scene, parent_transform, render_params) } + + fn collect_metadata(&self, metadata: &mut RenderMetadata, _footprint: Footprint, element_id: Option, _inherited_appearance: Option<&Appearance>) { + collect_gradient_items_metadata((0..self.len()).map(|index| ItemRef::ListItem(self, index)), metadata, element_id); + } + + fn add_upstream_click_targets(&self, click_targets: &mut Vec, _inherited_appearance: Option<&Appearance>) { + for index in 0..self.len() { + add_gradient_item_click_targets(ItemRef::ListItem(self, index), click_targets); + } + } + + fn add_upstream_outline_targets(&self, outlines: &mut Vec, _inherited_appearance: Option<&Appearance>) { + for index in 0..self.len() { + add_gradient_item_outline_targets(ItemRef::ListItem(self, index), outlines); + } + } +} + +/// Emits one item of gradient content as SVG, painting the thumbnail rect or an infinite-background stand-in. +fn render_gradient_item_svg_with_thumbnail_rect(item: ItemRef<'_, Gradient>, thumbnail_rect: Option<(DVec2, DVec2)>, render: &mut SvgRender, render_params: &RenderParams) { + let Some(gradient) = item.element() else { return }; + let transform: DAffine2 = item.attribute_cloned_or_default(ATTR_TRANSFORM); + let blend_mode: BlendMode = item.attribute_cloned_or_default(ATTR_BLEND_MODE); + let opacity_attr: f64 = item.attribute_cloned_or(ATTR_OPACITY, 1.); + let opacity_fill_attr: f64 = item.attribute_cloned_or(ATTR_OPACITY_FILL, 1.); + let gradient_form: GradientForm = item.attribute_cloned_or_default(ATTR_GRADIENT_FORM); + let settings = gradient_settings_from_item(item); + let tag = if thumbnail_rect.is_some() { "rect" } else { "polyline" }; + render.leaf_tag(tag, |attributes| { + if let Some((min, size)) = thumbnail_rect { + attributes.push("x", min.x.to_string()); + attributes.push("y", min.y.to_string()); + attributes.push("width", size.x.to_string()); + attributes.push("height", size.y.to_string()); + } else { + // Stand-in for an infinite background. Chrome's SVG renderer keeps internal coordinates in f32 and loses + // precision past ~2^24 (~16.7 million), causing tile-boundary artifacts that pop in and out during panning. + // 1e7 stays under that limit while still being far larger than any practical document extent. + const MAX: f64 = 1e7; + attributes.push("points", format!("{MAX},{MAX} -{MAX},{MAX} -{MAX},-{MAX} {MAX},-{MAX}")); + } + + let (samples, _) = spread_adjusted_samples(gradient, settings, gradient_form, ClearGuardPlacement::SvgStopOrder); + + let mut stop_string = String::new(); + for (position, color, original_midpoint) in samples { + let _ = write!(stop_string, r##""); + } + + // render_thumbnail already added the footprint transform + let gradient_transform = if render_params.thumbnail { transform } else { render_params.footprint.transform * transform }; + let gradient_transform_matrix = format_transform_matrix(gradient_transform); + let gradient_transform_attribute = if gradient_transform_matrix.is_empty() { + String::new() + } else { + format!(r#" gradientTransform="{gradient_transform_matrix}""#) + }; + + let gradient_id = generate_uuid(); + let gradient_spread_attribute = if matches!(settings.spread, GradientSpread::Pad | GradientSpread::Clear) { + String::new() + } else { + format!(r#" spreadMethod="{}""#, settings.spread.svg_name()) + }; + + // The unit gradient line is the +X unit vector in local space, before the item's transform is applied + match gradient_form { + GradientForm::Linear => { + let _ = write!( + &mut attributes.0.svg_defs, + r#"{stop_string}"# + ); + } + GradientForm::Radial => { + let _ = write!( + &mut attributes.0.svg_defs, + r#"{stop_string}"# + ); + } + } + + attributes.push("fill", format!("url('#{gradient_id}')")); + + let opacity = (opacity_attr * if render_params.for_mask { 1. } else { opacity_fill_attr }) as f32; + if opacity < 1. { + attributes.push("opacity", opacity.to_string()); + } + + if blend_mode != BlendMode::default() { + attributes.push("style", blend_mode.render()); + } + }); +} + +/// Draws one item of gradient content into the Vello scene under the viewport-replaced infinite transform. +fn render_gradient_item_to_vello(item: ItemRef<'_, Gradient>, scene: &mut Scene, parent_transform: DAffine2, render_params: &RenderParams) { + use vello::peniko; + + if let RenderMode::Outline = render_params.render_mode { + return; + } + + { + let Some(gradient) = item.element() else { return }; + let gradient_form: GradientForm = item.attribute_cloned_or_default(ATTR_GRADIENT_FORM); + let transform: DAffine2 = item.attribute_cloned_or_default(ATTR_TRANSFORM); + let blend_mode_attr: BlendMode = item.attribute_cloned_or_default(ATTR_BLEND_MODE); + let opacity_attr: f64 = item.attribute_cloned_or(ATTR_OPACITY, 1.); + let opacity_fill_attr: f64 = item.attribute_cloned_or(ATTR_OPACITY_FILL, 1.); + let gradient_transform = parent_transform * transform; + + let blend_mode = blend_mode_attr.to_peniko(); + let opacity = (opacity_attr * if render_params.for_mask { 1. } else { opacity_fill_attr }) as f32; + + let settings = gradient_settings_from_item(item); + let (samples, span) = spread_adjusted_samples(gradient, settings, gradient_form, ClearGuardPlacement::VelloRampTexels); + + let stops = peniko_color_stops(&samples); + + let extend = peniko_extend(settings.spread); + + // The unit gradient line is the +X unit vector in local space, before the item's transform is applied. + // For radial, the unit-radius circle at the origin scales out to the line's length once the brush transform applies. + let kind = match gradient_form { + GradientForm::Linear => peniko::LinearGradientPosition { + start: to_point(DVec2::X * span.0), + end: to_point(DVec2::X * span.1), + } + .into(), + GradientForm::Radial => peniko::RadialGradientPosition { + start_center: to_point(DVec2::ZERO), + start_radius: 0., + end_center: to_point(DVec2::ZERO), + end_radius: span.1 as f32, + } + .into(), + }; + + let fill = peniko::Brush::Gradient(peniko::Gradient { + kind, + stops, + extend, + interpolation_alpha_space: peniko::InterpolationAlphaSpace::Unpremultiplied, + ..Default::default() + }); + let brush_transform = kurbo::Affine::new(gradient_placement(gradient_transform, gradient_form).to_cols_array()); + let rect = kurbo::Rect::from_origin_size(kurbo::Point::ZERO, kurbo::Size::new(1., 1.)); + + let mut layer = false; + if opacity < 1. || blend_mode_attr != BlendMode::default() { + let blending = peniko::BlendMode::new(blend_mode, peniko::Compose::SrcOver); + // See implementation in `List` for more detail + scene.push_layer(peniko::Fill::NonZero, blending, opacity, kurbo::Affine::scale(f64::INFINITY), &rect); + layer = true; + } + + // Encode shape and brush manually instead of Scene.fill(), which would multiply brush_transform by the path transform + scene.encoding_mut().encode_transform(vello_encoding::Transform::from_kurbo(&kurbo::Affine::scale(f64::INFINITY))); + scene.encoding_mut().encode_fill_style(peniko::Fill::NonZero); + scene.encoding_mut().encode_shape(&rect, true); + + scene.encoding_mut().encode_transform(vello_encoding::Transform::from_kurbo(&brush_transform)); + scene.encoding_mut().swap_last_path_tags(); + scene.encoding_mut().encode_brush(&fill, 1.); + + if layer { + scene.pop_layer(); + } + } +} + +/// The metadata pass over a run of gradient items: each contributes its control geometry as targets under the +/// run's `element_id`, baked relative to the first item's transform (recorded as its `local_transforms` entry). +fn collect_gradient_items_metadata<'a>(items: impl Iterator>, metadata: &mut RenderMetadata, element_id: Option) { + let Some(element_id) = element_id else { return }; + + let mut item_zero_inverse = None; + let mut outline_targets = Vec::new(); + let mut click_targets = Vec::new(); + for item in items { + let gradient_form: GradientForm = item.attribute_cloned_or_default(ATTR_GRADIENT_FORM); + let item_transform: DAffine2 = item.attribute_cloned_or_default(ATTR_TRANSFORM); + + // The first item's transform is the reference all targets bake against + let item_zero_inverse = *item_zero_inverse.get_or_insert_with(|| if transform_is_invertible(item_transform) { item_transform.inverse() } else { DAffine2::IDENTITY }); + + let mut target = ClickTarget::new_with_path(gradient_control_outline(gradient_form), 0.); + target.apply_transform(item_zero_inverse * item_transform); + let target = Arc::new(target); + + if gradient_control_interior_is_clickable(gradient_form) { + click_targets.push(target.clone()); + } + outline_targets.push(target); + } + + if outline_targets.is_empty() { + return; + } + + metadata.outlines.insert(element_id, outline_targets); + if !click_targets.is_empty() { + metadata.click_targets.insert(element_id, click_targets); + } +} + +/// Collects one gradient item's control geometry as a click target when its interior is draggable. +fn add_gradient_item_click_targets(item: ItemRef<'_, Gradient>, click_targets: &mut Vec) { + let gradient_form: GradientForm = item.attribute_cloned_or_default(ATTR_GRADIENT_FORM); + if !gradient_control_interior_is_clickable(gradient_form) { + return; + } + + let transform: DAffine2 = item.attribute_cloned_or_default(ATTR_TRANSFORM); + let mut target = ClickTarget::new_with_path(gradient_control_outline(gradient_form), 0.); + target.apply_transform(transform); + click_targets.push(target); +} + +/// Collects one gradient item's control geometry as an outline target. +fn add_gradient_item_outline_targets(item: ItemRef<'_, Gradient>, outlines: &mut Vec) { + let gradient_form: GradientForm = item.attribute_cloned_or_default(ATTR_GRADIENT_FORM); + let transform: DAffine2 = item.attribute_cloned_or_default(ATTR_TRANSFORM); + + let mut target = ClickTarget::new_with_path(gradient_control_outline(gradient_form), 0.); + target.apply_transform(transform); + outlines.push(target); } /// Builds a `kurbo::BezPath` from a glyph outline, baking in the glyph origin (`ox`, `oy`) and faux-italic shear (`tilt_tan`). @@ -2599,7 +3447,20 @@ pub fn text_list_bounding_box>(source: &S, outer } } -/// Like `List::thumbnail_bounding_box`, but lays out `Graphic::Text` items, which the `BoundingBox` trait reports as `None`. +/// Folds one laid-out text item's corner points into the running bounds. +fn accumulate_text_item_bounds(item: ItemRef<'_, String>, outer_transform: DAffine2, bounds: &mut Option<[DVec2; 2]>) { + let Some((size, transform)) = text_item_size_and_transform(item) else { return }; + let full_transform = outer_transform * transform; + for corner in [DVec2::ZERO, DVec2::new(size.x, 0.), DVec2::new(0., size.y), size] { + let point = full_transform.transform_point2(corner); + *bounds = Some(match *bounds { + Some([min, max]) => [min.min(point), max.max(point)], + None => [point, point], + }); + } +} + +/// Like `List::thumbnail_bounding_box`, but lays out `Graphic::TextList` items, which the `BoundingBox` trait reports as `None`. /// Used for layer thumbnails so text layers (whose content is a `List` wrapping the text) frame their content. pub fn graphic_list_bounding_box<'e, S: LaneSource>>(source: &S, transform: DAffine2) -> RenderBoundingBox { let mut combined: Option<[DVec2; 2]> = None; @@ -2610,7 +3471,7 @@ pub fn graphic_list_bounding_box<'e, S: LaneSource>>(sourc let Some(graphic) = source.element(index) else { continue }; let bounds = match graphic { Graphic::Text(text) => text_list_bounding_box(&Single(text), item_transform), - Graphic::Graphic(sub_list) => graphic_list_bounding_box(sub_list, item_transform), + Graphic::GraphicList(sub_list) => graphic_list_bounding_box(sub_list, item_transform), other => other.thumbnail_bounding_box(item_transform, true), }; match bounds { @@ -2809,7 +3670,7 @@ fn collect_text_metadata>(source: &S, metadata: } let Some((size, item_transform)) = text_item_size_and_transform(source, index) else { continue }; - let subpath = Subpath::new_rectangle(DVec2::ZERO, size); + let subpath = rectangle_bezpath(DVec2::ZERO, size); let mut target = ClickTarget::new_with_subpath(subpath, 0.); target.apply_transform(item_zero_inverse * item_transform); accumulated_click_targets.entry(element_id).or_default().push(Arc::new(target)); @@ -2825,7 +3686,7 @@ fn collect_text_metadata>(source: &S, metadata: fn add_text_upstream_click_targets>(source: &S, click_targets: &mut Vec) { for index in 0..source.lane_count() { let Some((size, transform)) = text_item_size_and_transform(source, index) else { continue }; - let subpath = Subpath::new_rectangle(DVec2::ZERO, size); + let subpath = rectangle_bezpath(DVec2::ZERO, size); let mut target = ClickTarget::new_with_subpath(subpath, 0.); target.apply_transform(transform); click_targets.push(target); @@ -2926,7 +3787,7 @@ impl Render for RunView<'_, Color> { } } -impl Render for RunView<'_, GradientStops> { +impl Render for RunView<'_, Gradient> { fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { render_gradient_svg(self, render, render_params) } @@ -3037,7 +3898,7 @@ mod group_walk_tests { use graphic_types::vector_types::vector::PointId; fn unit_square_at(corner: DVec2) -> Vector { - Vector::from_subpath(Subpath::::new_rectangle(corner, corner + DVec2::ONE)) + Vector::from_bezpath(rectangle_bezpath(corner, corner + DVec2::ONE)) } fn color_paint() -> List> { @@ -3083,7 +3944,7 @@ mod group_walk_tests { let params = RenderParams::default(); let native = rendered_svg(|render| Graphic::Group(group.clone()).render_svg(render, ¶ms)); - let legacy = rendered_svg(|render| Graphic::Graphic(graphic_types::graphic::group_to_legacy_list(&group)).render_svg(render, ¶ms)); + let legacy = rendered_svg(|render| Graphic::GraphicList(graphic_types::graphic::group_to_legacy_list(&group)).render_svg(render, ¶ms)); assert!(native.0.contains(r##"fill="#"##), "the lane's fill paint must reach the vector interior: {}", native.0); assert_eq!(native, legacy); diff --git a/node-graph/libraries/vector-types/Cargo.toml b/node-graph/libraries/vector-types/Cargo.toml index c3c376d6e5..0e8784b584 100644 --- a/node-graph/libraries/vector-types/Cargo.toml +++ b/node-graph/libraries/vector-types/Cargo.toml @@ -20,6 +20,7 @@ node-macro = { workspace = true } # Workspace dependencies bitflags = { workspace = true } bytemuck = { workspace = true } +color = { workspace = true } num-traits = { workspace = true } glam = { workspace = true } kurbo = { workspace = true } @@ -36,3 +37,7 @@ serde = { workspace = true, optional = true } tsify = { workspace = true, optional = true } wasm-bindgen = { workspace = true, optional = true } fixedbitset = "0.5.7" + +[dev-dependencies] +# Workspace dependencies +serde_json = { workspace = true } diff --git a/node-graph/libraries/vector-types/src/gradient.rs b/node-graph/libraries/vector-types/src/gradient.rs index 00dc7ea9d6..9ba8099e34 100644 --- a/node-graph/libraries/vector-types/src/gradient.rs +++ b/node-graph/libraries/vector-types/src/gradient.rs @@ -1,5 +1,6 @@ use core_types::Color; use core_types::color::SRGBA8; +use core_types::list::{ATTR_GRADIENT_CYCLIC, ATTR_GRADIENT_HUE_DIRECTION, ATTR_GRADIENT_INTERPOLATION, ATTR_GRADIENT_SPACE, ATTR_GRADIENT_SPREAD, ATTR_MIDPOINT, ATTR_POSITION, Item, List}; use core_types::render_complexity::RenderComplexity; use dyn_any::DynAny; use glam::{DAffine2, DVec2}; @@ -8,139 +9,340 @@ use glam::{DAffine2, DVec2}; #[derive(Default, PartialEq, Eq, Clone, Copy, Debug, Hash, graphene_hash::CacheHash, DynAny, node_macro::ChoiceType)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[widget(Radio)] -pub enum GradientType { +pub enum GradientForm { + /// Transitions the colors along a straight line. #[default] Linear, + /// Transitions the colors outward from a center point. Radial, } -// TODO: Someday we could switch this to a Box[T] to avoid over-allocation -/// A list of colors (linear, unassociated alpha) associated with positions (in the range 0 to 1) along a gradient. -/// -/// Not exposed via Tsify; use [`GradientStopsUI`] at the JS boundary. -#[derive(Debug, Clone, PartialEq, graphene_hash::CacheHash, DynAny)] -#[cfg_attr(feature = "serde", derive(serde::Serialize))] -pub struct GradientStops { - /// The position of this stop, a factor from 0-1 along the length of the full gradient. - pub position: Vec, - /// The midpoint to the right of this stop, a factor from 0-1 along the distance to the next stop. The final stop's midpoint is ignored. - pub midpoint: Vec, - /// The color at this stop. - pub color: Vec, -} +/// A gradient's stops: a list of colors (linear, unassociated alpha) whose optional `position` and `midpoint` +/// attributes place each stop along the 0 to 1 range. Stops lacking the `position` attribute distribute evenly, +/// and stops lacking the `midpoint` attribute interpolate linearly (`0.5`). +#[derive(Default, Debug, Clone, PartialEq, graphene_hash::CacheHash, DynAny)] +pub struct Gradient(pub List); -/// JS-boundary version of [`GradientStops`] where stop colors are [`SRGBA8`] byte triples instead of linear-light [`Color`]. -#[cfg_attr(feature = "wasm", derive(tsify::Tsify), tsify(from_wasm_abi))] -#[derive(Debug, Clone, PartialEq, Default, DynAny)] +/// A gradient's per-stop parallel arrays, generic over color format: `GradientStops` nests inside the +/// [`GradientRamp`] exchange struct, while `GradientStops` is the JS-boundary shape used by the color picker UI. +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[derive(Debug, Clone, PartialEq, Default, graphene_hash::CacheHash)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct GradientStopsUI { - pub position: Vec, - pub midpoint: Vec, - pub color: Vec, +pub struct GradientStops { + pub color: Vec, + #[cfg_attr(feature = "serde", serde(default, skip_serializing_if = "Option::is_none"))] + #[cfg_attr(feature = "wasm", tsify(optional))] + pub position: Option>, + #[cfg_attr(feature = "serde", serde(default, skip_serializing_if = "Option::is_none"))] + #[cfg_attr(feature = "wasm", tsify(optional))] + pub midpoint: Option>, } -impl From<&GradientStops> for GradientStopsUI { - fn from(s: &GradientStops) -> Self { +unsafe impl dyn_any::StaticType for GradientStops { + type Static = GradientStops; +} + +impl From<&Gradient> for GradientStops { + fn from(gradient: &Gradient) -> Self { Self { - position: s.position.clone(), - midpoint: s.midpoint.clone(), - color: s.color.iter().map(|c| SRGBA8::from(*c)).collect(), + position: gradient.position_attribute(), + midpoint: gradient.midpoint_attribute(), + color: gradient.0.iter_element_values().copied().collect(), } } } -impl From<&GradientStopsUI> for GradientStops { - fn from(s: &GradientStopsUI) -> Self { +impl From<&Gradient> for GradientStops { + fn from(gradient: &Gradient) -> Self { Self { - position: s.position.clone(), - midpoint: s.midpoint.clone(), - color: s.color.iter().map(|c| Color::from(*c)).collect(), + position: gradient.position_attribute(), + midpoint: gradient.midpoint_attribute(), + color: gradient.0.iter_element_values().map(|&color| SRGBA8::from(color)).collect(), } } } -impl GradientStopsUI { - /// CSS `linear-gradient(...)` string. Stops are emitted as `#rrggbbaa` hex (already gamma-encoded bytes). - pub fn to_css_linear_gradient(&self) -> String { - if self.position.len() <= 1 { - let hex = self.color.first().map(|c| c.to_rgba_hex()).unwrap_or_else(|| "000000ff".to_string()); - return format!("linear-gradient(to right, #{hex} 0%, #{hex} 100%)"); +// The document path: faithful (no elision) so serialization stays a bijection under round-trip checks +impl From> for Gradient { + fn from(stops: GradientStops) -> Self { + let mut gradient = Gradient::from(stops.color); + if let Some(position) = &stops.position { + gradient.set_positions(position); } - // Sample via the midpoint-aware subdivision used for SVG/Vello stops so browser interpolation matches - let stops: GradientStops = self.into(); - let pieces = stops - .interpolated_samples() - .into_iter() - .map(|(position, color, _)| { - let percent = ((position * 100.) * 1e2).round() / 1e2; - let hex = SRGBA8::from(color).to_rgba_hex(); - format!("#{hex} {percent}%") - }) - .collect::>() - .join(", "); - format!("linear-gradient(to right, {pieces})") + if let Some(midpoint) = &stops.midpoint { + gradient.set_midpoints(midpoint); + } + gradient } } -// TODO: Eventually remove this migration document upgrade code -impl<'de> serde::Deserialize<'de> for GradientStops { - fn deserialize>(deserializer: D) -> Result { - #[derive(serde::Deserialize)] - struct NewFormat { - position: Vec, - midpoint: Vec, - color: Vec, +// Color picker round-trip: faithful, since eliding default-restating attributes needs the cyclic flag that only the ramp conversion holds +impl From<&GradientStops> for Gradient { + fn from(stops: &GradientStops) -> Self { + let mut gradient = Gradient::from(stops.color.iter().map(|&color| Color::from(color)).collect::>()); + if let Some(position) = &stops.position { + gradient.set_positions(position); } - - #[derive(serde::Deserialize)] - #[cfg_attr(feature = "serde", serde(untagged))] - enum GradientStopsFormat { - New(NewFormat), - Old(Vec<(f64, Color)>), + if let Some(midpoint) = &stops.midpoint { + gradient.set_midpoints(midpoint); } - - Ok(match GradientStopsFormat::deserialize(deserializer)? { - GradientStopsFormat::New(new) => Self { - position: new.position, - midpoint: new.midpoint, - color: new.color, - }, - GradientStopsFormat::Old(stops) => { - let count = stops.len(); - Self { - position: stops.iter().map(|(p, _)| *p).collect(), - midpoint: vec![0.5; count], - color: stops.into_iter().map(|(_, c)| c).collect(), - } - } - }) + gradient } } -impl Default for GradientStops { - fn default() -> Self { +impl GradientStops { + /// CSS `background-image` value drawing the stops as an SVG data URI, keeping straight-alpha interpolation. + pub fn to_svg_background_image(&self, settings: GradientSettings) -> String { + Gradient::from(self).to_svg_background_image(settings) + } +} + +/// The serialized exchange form of a gradient: its stops, with whole-ramp settings as sibling fields serialized +/// only when non-default. The space is the exception: it always serializes, so its absence marks a ramp +/// from before the field existed, which deserializes as the gamma those documents rendered with. +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[derive(Default, Debug, Clone, PartialEq, graphene_hash::CacheHash)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct GradientRamp { + pub stops: GradientStops, + #[cfg_attr(feature = "serde", serde(default, skip_serializing_if = "GradientSpread::is_default"))] + #[cfg_attr(feature = "wasm", tsify(optional))] + pub gradient_spread: GradientSpread, + // TODO: Elide the default again (removing `legacy_gamma`) when switching to the new document format and Ctrl-C node serialization format + #[cfg_attr(feature = "serde", serde(default = "GradientSpace::legacy_gamma"))] + pub gradient_space: GradientSpace, + #[cfg_attr(feature = "serde", serde(default, skip_serializing_if = "std::ops::Not::not"))] + #[cfg_attr(feature = "wasm", tsify(optional))] + pub gradient_cyclic: bool, + #[cfg_attr(feature = "serde", serde(default, skip_serializing_if = "GradientHueDirection::is_default"))] + #[cfg_attr(feature = "wasm", tsify(optional))] + pub gradient_hue_direction: GradientHueDirection, + #[cfg_attr(feature = "serde", serde(default, skip_serializing_if = "GradientInterpolation::is_default"))] + #[cfg_attr(feature = "wasm", tsify(optional))] + pub gradient_interpolation: GradientInterpolation, +} + +unsafe impl dyn_any::StaticType for GradientRamp { + type Static = GradientRamp; +} + +impl From> for GradientRamp { + fn from(stops: GradientStops) -> Self { Self { - position: vec![0., 1.], - midpoint: vec![0.5, 0.5], - color: vec![Color::BLACK, Color::WHITE], + stops, + gradient_spread: Default::default(), + gradient_space: Default::default(), + gradient_cyclic: Default::default(), + gradient_hue_direction: Default::default(), + gradient_interpolation: Default::default(), } } } -impl RenderComplexity for GradientStops { +impl From<&Gradient> for GradientRamp { + fn from(gradient: &Gradient) -> Self { + Self { + stops: gradient.into(), + gradient_spread: Default::default(), + gradient_space: Default::default(), + gradient_cyclic: Default::default(), + gradient_hue_direction: Default::default(), + gradient_interpolation: Default::default(), + } + } +} + +impl From for GradientRamp { + fn from(gradient: Gradient) -> Self { + Self::from(&gradient) + } +} + +impl From for Gradient { + fn from(ramp: GradientRamp) -> Self { + Gradient::from(ramp.stops) + } +} + +impl From<&GradientRamp> for Gradient { + fn from(ramp: &GradientRamp) -> Self { + Gradient::from(ramp.stops.clone()) + } +} + +// The runtime wire form: whole-ramp settings ride as the gradient item's attributes in its containing list, +// where the Fill kernel, chain setter nodes, and renderers read and write them +impl From for Item { + fn from(ramp: GradientRamp) -> Self { + let mut item = Item::new_from_element(Gradient::from(ramp.stops)); + if !ramp.gradient_spread.is_default() { + item.set_attribute(ATTR_GRADIENT_SPREAD, ramp.gradient_spread); + } + if !ramp.gradient_space.is_default() { + item.set_attribute(ATTR_GRADIENT_SPACE, ramp.gradient_space); + } + if ramp.gradient_cyclic { + item.set_attribute(ATTR_GRADIENT_CYCLIC, ramp.gradient_cyclic); + } + if !ramp.gradient_hue_direction.is_default() { + item.set_attribute(ATTR_GRADIENT_HUE_DIRECTION, ramp.gradient_hue_direction); + } + if !ramp.gradient_interpolation.is_default() { + item.set_attribute(ATTR_GRADIENT_INTERPOLATION, ramp.gradient_interpolation); + } + item + } +} + +impl From<&Item> for GradientRamp { + fn from(item: &Item) -> Self { + Self { + stops: item.element().into(), + gradient_spread: item.attribute_cloned_or_default(ATTR_GRADIENT_SPREAD), + gradient_space: item.attribute_cloned_or_default(ATTR_GRADIENT_SPACE), + gradient_cyclic: item.attribute_cloned_or_default(ATTR_GRADIENT_CYCLIC), + gradient_hue_direction: item.attribute_cloned_or_default(ATTR_GRADIENT_HUE_DIRECTION), + gradient_interpolation: item.attribute_cloned_or_default(ATTR_GRADIENT_INTERPOLATION), + } + } +} + +impl From<&GradientRamp> for GradientStops { + fn from(ramp: &GradientRamp) -> Self { + Self { + position: ramp.stops.position.clone(), + midpoint: ramp.stops.midpoint.clone(), + color: ramp.stops.color.iter().map(|&color| SRGBA8::from(color)).collect(), + } + } +} + +impl From<&GradientStops> for GradientRamp { + fn from(stops: &GradientStops) -> Self { + Self::from(Gradient::from(stops)) + } +} + +impl From<&GradientRamp> for GradientRamp { + fn from(ramp: &GradientRamp) -> Self { + Self { + stops: ramp.into(), + gradient_spread: ramp.gradient_spread, + gradient_space: ramp.gradient_space, + gradient_cyclic: ramp.gradient_cyclic, + gradient_hue_direction: ramp.gradient_hue_direction, + gradient_interpolation: ramp.gradient_interpolation, + } + } +} + +impl From<&Gradient> for GradientRamp { + fn from(gradient: &Gradient) -> Self { + Self { + stops: gradient.into(), + gradient_spread: Default::default(), + gradient_space: Default::default(), + gradient_cyclic: Default::default(), + gradient_hue_direction: Default::default(), + gradient_interpolation: Default::default(), + } + } +} + +// Color picker round-trip: the picker sends every position explicitly, so elide the ones restating the even distribution the cyclic flag selects +impl From<&GradientRamp> for GradientRamp { + fn from(ramp: &GradientRamp) -> Self { + let mut gradient = Gradient::from(&ramp.stops); + gradient.elide_default_attributes(ramp.gradient_cyclic); + + Self { + gradient_spread: ramp.gradient_spread, + gradient_space: ramp.gradient_space, + gradient_cyclic: ramp.gradient_cyclic, + gradient_hue_direction: ramp.gradient_hue_direction, + gradient_interpolation: ramp.gradient_interpolation, + ..Self::from(gradient) + } + } +} + +impl GradientRamp { + /// Overwrites the whole-ramp settings fields as one bundle. This writes the cyclic flag without holding the stops in place + /// (unlike [`GradientRamp::with_cyclic`]), so they must already be authored under `settings.cyclic`. + pub fn with_settings(mut self, settings: GradientSettings) -> Self { + let GradientSettings { + spread, + cyclic, + space, + hue_direction, + interpolation, + } = settings; + + self.gradient_spread = spread; + self.gradient_cyclic = cyclic; + self.gradient_space = space; + self.gradient_hue_direction = hue_direction; + self.gradient_interpolation = interpolation; + + self + } +} + +impl GradientRamp { + pub fn black_to_white() -> Self { + Self::from(Gradient::black_to_white()) + } + + /// Sets the cyclic flag, holding the stops at the positions they already occupy. + /// The ramp owns this rather than leaving it to the runtime type's elision because `cyclic` determines different default elided positions. + pub fn with_cyclic(mut self, gradient_cyclic: bool) -> Self { + if self.gradient_cyclic == gradient_cyclic { + return self; + } + + let mut gradient = Gradient::from(self.stops); + gradient.hold_positions_across_cyclic_change(self.gradient_cyclic, gradient_cyclic); + + self.stops = (&gradient).into(); + self.gradient_cyclic = gradient_cyclic; + self + } +} + +impl From> for Gradient { + fn from(colors: List) -> Self { + Self(colors) + } +} + +impl From> for Gradient { + fn from(colors: Vec) -> Self { + Self(colors.into_iter().map(Item::new_from_element).collect()) + } +} + +impl RenderComplexity for Gradient { fn render_complexity(&self) -> usize { 1 } } +/// Controls accuracy vs. number of samples tradeoff. 2/255 means the linear approximation will +/// deviate by no more than 2 gradations of 8-bit color from the theoretically perfect curve. +const SAMPLE_THRESHOLD: f64 = 2. / 255.; + +/// The effective midpoint domain shared by sampling and rendering: NaN reads as the linear default, and extremes are bounded to `0.01..=0.99` so curves stay finite and cheap to subdivide. +fn sanitized_midpoint(midpoint: f64) -> f64 { + if midpoint.is_nan() { 0.5 } else { midpoint.clamp(0.01, 0.99) } +} + /// Apply the midpoint curve to a normalized parameter `t` (0 to 1) given a `midpoint` (0 to 1, where 0.5 is linear). fn apply_midpoint(t: f64, midpoint: f64) -> f64 { + let midpoint = sanitized_midpoint(midpoint); if (midpoint - 0.5).abs() < 1e-6 { return t; } - let midpoint = midpoint.clamp(f64::EPSILON, 1. - f64::EPSILON); - if midpoint < 0.5 { let q = -1. / (1. - midpoint).log2(); 1. - (1. - t).powf(q) @@ -150,6 +352,544 @@ fn apply_midpoint(t: f64, midpoint: f64) -> f64 { } } +/// Calls a color-space-generic function with the `color` crate space matching a [`GradientSpace`] variant. +macro_rules! with_space { + ($gradient_space:expr, $function:ident $(, $argument:expr)* $(,)?) => { + match $gradient_space { + GradientSpace::OkLab => $function::($($argument),*), + GradientSpace::OkLCh => $function::($($argument),*), + GradientSpace::Lab => $function::($($argument),*), + GradientSpace::LCh => $function::($($argument),*), + GradientSpace::Hsl => $function::($($argument),*), + GradientSpace::Hsv => $function::($($argument),*), + GradientSpace::RgbLinear => $function::($($argument),*), + GradientSpace::RgbGamma => $function::($($argument),*), + } + }; +} + +/// Interpolates between two adjacent stops' colors at `t` across their interval, in the gradient's chosen color space. +pub fn interpolate_stop_colors(color_a: Color, color_b: Color, t: f32, gradient_space: GradientSpace, gradient_hue_direction: GradientHueDirection) -> Color { + match gradient_space { + GradientSpace::OkLab => lerp_in_space::(color_a, color_b, t, gradient_hue_direction), + GradientSpace::OkLCh => lerp_in_space::(color_a, color_b, t, gradient_hue_direction), + GradientSpace::Lab => lerp_in_space::(color_a, color_b, t, gradient_hue_direction), + GradientSpace::LCh => lerp_in_space::(color_a, color_b, t, gradient_hue_direction), + GradientSpace::Hsl => lerp_in_space::(color_a, color_b, t, gradient_hue_direction), + GradientSpace::Hsv => lerp_in_space::(color_a, color_b, t, gradient_hue_direction), + GradientSpace::RgbLinear => color_a.lerp(&color_b, t), + GradientSpace::RgbGamma => color_a.lerp_gamma_srgb(&color_b, t), + } +} + +/// Mix two colors in the color space `CS`, with alpha interpolating linearly like the sRGB spaces. +/// Polar spaces arc through hue per the direction, with an achromatic endpoint's powerless hue adopting the other's per CSS. +/// The mix can land slightly outside the sRGB gamut; it stays unclamped here and clips at render encoding. +fn lerp_in_space(color_a: Color, color_b: Color, t: f32, gradient_hue_direction: GradientHueDirection) -> Color { + let mut a = CS::from_linear_srgb([color_a.r(), color_a.g(), color_a.b()]); + let mut b = CS::from_linear_srgb([color_b.r(), color_b.g(), color_b.b()]); + + if let Some(hue_index) = space_hue_index::() { + let achromatic = achromatic_chroma_threshold::(); + if a[1] < achromatic && b[1] >= achromatic { + a[hue_index] = b[hue_index]; + } + if b[1] < achromatic && a[1] >= achromatic { + b[hue_index] = a[hue_index]; + } + + // The fixup applies to hues that the conversions already place in the 0 to 360 range + b[hue_index] = a[hue_index] + hue_delta((b[hue_index] - a[hue_index]) as f64, gradient_hue_direction) as f32; + } + + let mixed = [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t]; + + let [red, green, blue] = CS::to_linear_srgb(mixed); + Color::from_rgbaf32_unchecked(red, green, blue, color_a.a() + (color_b.a() - color_a.a()) * t) +} + +/// The classic HSV cylinder as `[hue in degrees, saturation 0-100, value 0-100]`, implemented locally +/// since CSS Color 4 (and therefore the `color` crate) offers only its HWB reparameterization, which +/// mixes along different paths through shades and tones. +#[derive(Clone, Copy, Debug)] +struct Hsv; + +impl color::ColorSpace for Hsv { + const LAYOUT: color::ColorSpaceLayout = color::ColorSpaceLayout::HueFirst; + + const WHITE_COMPONENTS: [f32; 3] = [0., 0., 100.]; + + fn to_linear_srgb([hue, saturation, value]: [f32; 3]) -> [f32; 3] { + let (saturation, value) = (saturation / 100., value / 100.); + let channel = |n: f32| { + let k = (n + hue / 60.).rem_euclid(6.); + value - value * saturation * k.min(4. - k).clamp(0., 1.) + }; + color::Srgb::to_linear_srgb([channel(5.), channel(3.), channel(1.)]) + } + + fn from_linear_srgb(src: [f32; 3]) -> [f32; 3] { + let [red, green, blue] = color::Srgb::from_linear_srgb(src); + let max = red.max(green).max(blue); + let delta = max - red.min(green).min(blue); + + let hue = if delta <= 0. { + 0. + } else if max == red { + 60. * ((green - blue) / delta).rem_euclid(6.) + } else if max == green { + 60. * ((blue - red) / delta + 2.) + } else { + 60. * ((red - green) / delta + 4.) + }; + let saturation = if max <= 0. { 0. } else { delta / max }; + + [hue, saturation * 100., max * 100.] + } + + fn clip([hue, saturation, value]: [f32; 3]) -> [f32; 3] { + [hue, saturation.clamp(0., 100.), value.clamp(0., 100.)] + } +} + +/// The largest difference between two colors across their gamma sRGB channels, the 8-bit-adjacent measure that rendered output quantizes to. +fn max_gamma_channel_deviation(a: Color, b: Color) -> f64 { + let (a, b) = (a.to_gamma_srgb_channels(), b.to_gamma_srgb_channels()); + (0..4).fold(0_f64, |max, i| max.max((a[i] - b[i]).abs() as f64)) +} + +/// A color's channels in the color space `CS`, alongside its straight alpha. +fn space_channels(color: Color) -> [f64; 4] { + let [x, y, z] = CS::from_linear_srgb([color.r(), color.g(), color.b()]); + [x as f64, y as f64, z as f64, color.a() as f64] +} + +/// The inverse of [`space_channels`], leaving an out-of-gamut result unclamped so it clips at render encoding. +fn color_from_space_channels(channels: [f64; 4]) -> Color { + let [red, green, blue] = CS::to_linear_srgb([channels[0] as f32, channels[1] as f32, channels[2] as f32]); + Color::from_rgbaf32_unchecked(red, green, blue, channels[3] as f32) +} + +/// The channel carrying hue in a polar space, or `None` for a rectangular one. +fn space_hue_index() -> Option { + match CS::LAYOUT { + color::ColorSpaceLayout::HueFirst => Some(0), + color::ColorSpaceLayout::HueThird => Some(2), + _ => None, + } +} + +/// The chroma (or saturation, channel 1 in both polar layouts) below which a color counts as achromatic and +/// its hue as powerless, scaled to the space's lightness range so conversion noise stays below the threshold. +fn achromatic_chroma_threshold() -> f32 { + 1e-4 * CS::WHITE_COMPONENTS.iter().fold(0_f32, |max, &component| max.max(component)) +} + +/// The CSS Color 4 hue fixup: the signed arc between two hues taking the route the direction asks for. +fn hue_delta(delta: f64, gradient_hue_direction: GradientHueDirection) -> f64 { + match gradient_hue_direction { + GradientHueDirection::Shorter => { + if delta > 180. { + delta - 360. + } else if delta < -180. { + delta + 360. + } else { + delta + } + } + GradientHueDirection::Longer => { + if 0. < delta && delta < 180. { + delta - 360. + } else if -180. < delta && delta <= 0. { + delta + 360. + } else { + delta + } + } + GradientHueDirection::Increasing => { + if delta < 0. { + delta + 360. + } else { + delta + } + } + GradientHueDirection::Decreasing => { + if delta > 0. { + delta - 360. + } else { + delta + } + } + } +} + +/// Every knot's color in the space `CS`. An achromatic knot borrows its nearest chromatic neighbor's powerless hue, +/// then the whole-hue run accumulates its per-step fixup so the spline sees one continuous sequence rather than values that wrap at 360. +fn knot_channels(knots: &[GradientStop], gradient_hue_direction: GradientHueDirection) -> Vec<[f64; 4]> { + let mut channels: Vec<[f64; 4]> = knots.iter().map(|knot| space_channels::(knot.color)).collect(); + + let Some(hue_index) = space_hue_index::() else { return channels }; + + let achromatic = achromatic_chroma_threshold::() as f64; + let chromatic: Vec = (0..channels.len()).filter(|&index| channels[index][1] >= achromatic).collect(); + if chromatic.is_empty() { + return channels; + } + + for index in 0..channels.len() { + if channels[index][1] < achromatic + && let Some(&nearest) = chromatic.iter().min_by_key(|&&other| other.abs_diff(index)) + { + channels[index][hue_index] = channels[nearest][hue_index]; + } + } + + for index in 1..channels.len() { + let previous = channels[index - 1][hue_index]; + let delta = hue_delta(channels[index][hue_index].rem_euclid(360.) - previous.rem_euclid(360.), gradient_hue_direction); + channels[index][hue_index] = previous + delta; + } + + channels +} + +/// A Piecewise Cubic Hermite Interpolating Polynomial (PCHIP) spline, preserving its samples' monotonicity: +/// it passes through every sample and joins the pieces with matching slopes, while the Fritsch-Carlson +/// limiter keeps each piece bounded by its own two samples, so the curve rises and falls only where its +/// samples do instead of overshooting past them. +/// +/// Construction is O(n) and evaluation is O(log n) in the sample count. +struct MonotonicSpline { + position: Vec, + value: Vec, + tangent: Vec, +} + +impl MonotonicSpline { + fn new(position: Vec, value: Vec) -> Self { + let count = position.len(); + if count < 2 { + let tangent = vec![0.; count]; + return Self { position, value, tangent }; + } + + let secant: Vec = (0..count - 1) + .map(|index| { + let run = position[index + 1] - position[index]; + if run.abs() < f64::EPSILON { 0. } else { (value[index + 1] - value[index]) / run } + }) + .collect(); + + // A sign change or a flat run between neighboring secants pins that tangent to zero, + // which is what stops the curve from bulging past a local extreme + let mut tangent = Vec::with_capacity(count); + tangent.push(secant[0]); + for index in 1..count - 1 { + let (before, after) = (secant[index - 1], secant[index]); + tangent.push(if before * after <= 0. { 0. } else { (before + after) / 2. }); + } + tangent.push(secant[count - 2]); + + // Fritsch-Carlson: pull any tangent pair back inside the radius-3 circle around their shared secant + for index in 0..count - 1 { + if secant[index].abs() < f64::EPSILON { + tangent[index] = 0.; + tangent[index + 1] = 0.; + continue; + } + + let (alpha, beta) = (tangent[index] / secant[index], tangent[index + 1] / secant[index]); + let magnitude = alpha * alpha + beta * beta; + if magnitude > 9. { + let scale = 3. / magnitude.sqrt(); + tangent[index] = scale * alpha * secant[index]; + tangent[index + 1] = scale * beta * secant[index]; + } + } + + Self { position, value, tangent } + } + + fn evaluate(&self, at: f64) -> f64 { + let count = self.position.len(); + if count == 0 { + return 0.; + } + if count == 1 || at <= self.position[0] { + return self.value[0]; + } + if at >= self.position[count - 1] { + return self.value[count - 1]; + } + + let index = self.position.partition_point(|&position| position <= at).clamp(1, count - 1) - 1; + let run = self.position[index + 1] - self.position[index]; + if run.abs() < f64::EPSILON { + return self.value[index + 1]; + } + + let t = (at - self.position[index]) / run; + let (t2, t3) = (t * t, t * t * t); + + (2. * t3 - 3. * t2 + 1.) * self.value[index] + (t3 - 2. * t2 + t) * run * self.tangent[index] + (-2. * t3 + 3. * t2) * self.value[index + 1] + (t3 - t2) * run * self.tangent[index + 1] + } +} + +/// The Smooth path: a monoticity-preserving spline per color channel through every stop, traversed by a second such spline that +/// maps ramp position to spline parameter. Fitting the stop and midpoint constraints into one global warp is what keeps the +/// traversal rate continuous across stops, where independent per-interval curves (what Linear uses) would kink at each one. +struct SmoothPath { + space: GradientSpace, + hue_index: Option, + channel: [MonotonicSpline; 4], + warp: MonotonicSpline, +} + +impl SmoothPath { + fn new(stops: &[GradientStop], settings: GradientSettings) -> Self { + // A cyclic ramp gains two wrapped copies of each end, enough that the tangent estimate on either side of the + // 1|0 boundary sees the same neighborhood and the seam joins smoothly. Stops at both 0 and 1 leave a zero-length + // wrapped interval: that seam is a hard jump, and its copies would land on the real end stops, so it gets none. + let count = stops.len(); + let wrapped_interval = count >= 2 && stops[0].position + 1. - stops[count - 1].position > f64::EPSILON; + let mut knots: Vec = Vec::with_capacity(count + 4); + if settings.cyclic && wrapped_interval { + knots.push(GradientStop { + position: stops[count - 2].position - 1., + ..stops[count - 2] + }); + knots.push(GradientStop { + position: stops[count - 1].position - 1., + ..stops[count - 1] + }); + knots.extend_from_slice(stops); + knots.push(GradientStop { + position: stops[0].position + 1., + ..stops[0] + }); + knots.push(GradientStop { + position: stops[1].position + 1., + ..stops[1] + }); + } else { + knots.extend_from_slice(stops); + } + + let channels = with_space!(settings.space, knot_channels, &knots, settings.hue_direction); + let parameter: Vec = (0..knots.len()).map(|index| index as f64).collect(); + let channel = std::array::from_fn(|component| MonotonicSpline::new(parameter.clone(), channels.iter().map(|values| values[component]).collect())); + + // Each stop pins its own knot parameter and each midpoint the half-parameter between two, + // so one monotonic curve satisfies every midpoint constraint at once + let mut warp_position = Vec::with_capacity(knots.len() * 2); + let mut warp_value = Vec::with_capacity(knots.len() * 2); + for (index, knot) in knots.iter().enumerate() { + warp_position.push(knot.position); + warp_value.push(index as f64); + + if let Some(next) = knots.get(index + 1) { + let midpoint = knot.position + sanitized_midpoint(knot.midpoint) * (next.position - knot.position); + if midpoint > knot.position && midpoint < next.position { + warp_position.push(midpoint); + warp_value.push(index as f64 + 0.5); + } + } + } + + Self { + space: settings.space, + hue_index: with_space!(settings.space, space_hue_index), + channel, + warp: MonotonicSpline::new(warp_position, warp_value), + } + } + + fn evaluate(&self, t: f64) -> Color { + let parameter = self.warp.evaluate(t); + let mut channels: [f64; 4] = std::array::from_fn(|component| self.channel[component].evaluate(parameter)); + if let Some(hue_index) = self.hue_index { + channels[hue_index] = channels[hue_index].rem_euclid(360.); + } + + with_space!(self.space, color_from_space_channels, channels) + } +} + +/// Stepped holds each stop's color the whole way to the next stop, so the ramp jumps at stops and midpoints are ignored. +fn stepped_color(stops: &[GradientStop], t: f64, gradient_cyclic: bool) -> Color { + let (Some(first), Some(last)) = (stops.first(), stops.last()) else { return Color::BLACK }; + + // Before the first stop a cyclic ramp is still inside the wrapped interval, which the last stop's color holds + if t < first.position { + return if gradient_cyclic { last.color } else { first.color }; + } + if t >= last.position { + return last.color; + } + + stops.windows(2).find(|pair| t < pair[1].position).map_or(last.color, |pair| pair[0].color) +} + +/// Linear traces the chord from each stop to the next, turning a corner at every stop, with the midpoint biasing the timing across each interval independently. +fn linear_color(stops: &[GradientStop], t: f64, settings: GradientSettings) -> Color { + let (Some(first), Some(last)) = (stops.first(), stops.last()) else { return Color::BLACK }; + + if settings.cyclic && (t < first.position || t > last.position) { + let wrap_length = first.position + 1. - last.position; + if wrap_length <= f64::EPSILON { + return first.color; + } + + let local = if t >= last.position { t - last.position } else { t + 1. - last.position }; + let adjusted_t = apply_midpoint(local / wrap_length, last.midpoint); + return interpolate_stop_colors(last.color, first.color, adjusted_t as f32, settings.space, settings.hue_direction); + } + + if t <= first.position { + return first.color; + } + if t >= last.position { + return last.color; + } + + for pair in stops.windows(2) { + let (a, b) = (&pair[0], &pair[1]); + if t >= a.position && t <= b.position { + let normalized_t = (t - a.position) / (b.position - a.position); + let adjusted_t = apply_midpoint(normalized_t, a.midpoint); + return interpolate_stop_colors(a.color, b.color, adjusted_t as f32, settings.space, settings.hue_direction); + } + } + + Color::BLACK +} + +/// Stepped's bake is exact rather than approximated: each interval emits its color at both ends, +/// leaving the renderer's own interpolation nothing to traverse so the jump lands squarely on the next stop. +fn stepped_samples(stops: &[GradientStop], gradient_cyclic: bool) -> Vec<(f64, Color, Option)> { + let count = stops.len(); + let (first, last) = (&stops[0], &stops[count - 1]); + let mut result = Vec::with_capacity(count * 2 + 2); + + // The wrapped interval holds the last stop's color from the 1|0 boundary through to the first stop + if gradient_cyclic && first.position > 0. { + result.push((0., last.color, None)); + result.push((first.position, last.color, None)); + } + + for pair in stops.windows(2) { + result.push((pair[0].position, pair[0].color, Some(0.5))); + result.push((pair[1].position, pair[0].color, None)); + } + result.push((last.position, last.color, Some(0.5))); + + if gradient_cyclic && last.position < 1. { + result.push((1., last.color, None)); + } + + result +} + +/// Smooth's bake: anchor every stop, then subdivide between anchors until the renderer's gamma segments track the spline. +fn smooth_samples(stops: &[GradientStop], settings: GradientSettings) -> Vec<(f64, Color, Option)> { + fn subdivide(path: &SmoothPath, left: f64, right: f64, color_left: Color, color_right: Color, result: &mut Vec<(f64, Color, Option)>, depth: u32) { + const MAX_DEPTH: u32 = 20; + if depth >= MAX_DEPTH { + return; + } + + // Probe the quarter points as well as the center, since a space with a steep toe peaks its deviation off-center + let deviates = [0.25, 0.5, 0.75].into_iter().any(|fraction| { + let probe = path.evaluate(left + (right - left) * fraction); + max_gamma_channel_deviation(probe, color_left.lerp_gamma_srgb(&color_right, fraction as f32)) > SAMPLE_THRESHOLD + }); + if !deviates { + return; + } + + let mid = (left + right) / 2.; + let color_mid = path.evaluate(mid); + subdivide(path, left, mid, color_left, color_mid, result, depth + 1); + result.push((mid, color_mid, None)); + subdivide(path, mid, right, color_mid, color_right, result, depth + 1); + } + + let path = SmoothPath::new(stops, settings); + let count = stops.len(); + + // A cyclic ramp's baked list runs boundary to boundary so downstream renderers stay unaware of the cycle + let mut anchors: Vec<(f64, Option)> = Vec::with_capacity(count + 2); + if settings.cyclic && stops[0].position > 0. { + anchors.push((0., None)); + } + anchors.extend(stops.iter().map(|stop| (stop.position, Some(sanitized_midpoint(stop.midpoint))))); + let synthetic_end = settings.cyclic && stops[count - 1].position < 1.; + if synthetic_end { + anchors.push((1., None)); + } + + // A synthetic end anchor copies the start's color so the seam closes exactly rather than relying on the + // two wrapped views of the spline agreeing to the last bit; a real stop at 1 keeps its own color + let seam_color = synthetic_end.then(|| path.evaluate(anchors[0].0)); + let anchor_color = |position: f64| match seam_color { + Some(color) if position >= 1. => color, + _ => path.evaluate(position), + }; + + let mut result: Vec<(f64, Color, Option)> = Vec::new(); + for (index, &(position, midpoint)) in anchors.iter().enumerate() { + let color = anchor_color(position); + result.push((position, color, midpoint)); + + if let Some(&(next, _)) = anchors.get(index + 1) { + subdivide(&path, position, next, color, anchor_color(next), &mut result, 0); + } + } + + result +} + +/// Clips a baked sample list to the unit range, replacing everything beyond an end with one sample interpolated at that boundary. +/// Renderers only accept offsets from 0 to 1, and the bake is dense enough that interpolating between neighbors in gamma reproduces the ramp's curve there. +fn clip_samples_to_unit_range(samples: &[(f64, Color, Option)]) -> Vec<(f64, Color, Option)> { + fn sample_at(samples: &[(f64, Color, Option)], boundary: f64) -> Color { + let index = samples.partition_point(|&(position, ..)| position < boundary); + + // A sample sitting on the boundary already answers it, so only a straddling pair needs interpolating + if let Some(&(position, color, _)) = samples.get(index) + && position == boundary + { + return color; + } + + match (index.checked_sub(1).map(|before| samples[before]), samples.get(index).copied()) { + (Some((left, left_color, _)), Some((right, right_color, _))) => { + let span = right - left; + let fraction = if span > 0. { (boundary - left) / span } else { 0. }; + left_color.lerp_gamma_srgb(&right_color, fraction as f32) + } + (Some((_, color, _)), None) | (None, Some((_, color, _))) => color, + (None, None) => Color::BLACK, + } + } + + let leads_in = samples.first().is_some_and(|&(position, ..)| position < 0.); + let trails_out = samples.last().is_some_and(|&(position, ..)| position > 1.); + if !leads_in && !trails_out { + return samples.to_vec(); + } + + let mut result: Vec<(f64, Color, Option)> = samples.iter().copied().filter(|&(position, ..)| (0. ..=1.).contains(&position)).collect(); + if leads_in && result.first().is_none_or(|&(position, ..)| position > 0.) { + result.insert(0, (0., sample_at(samples, 0.), None)); + } + if trails_out && result.last().is_none_or(|&(position, ..)| position < 1.) { + result.push((1., sample_at(samples, 1.), None)); + } + + result +} + #[derive(Debug, Clone, Copy)] pub struct GradientStop { pub position: f64, @@ -158,36 +898,33 @@ pub struct GradientStop { } pub struct GradientStopsIter<'a> { - stops: &'a GradientStops, + stops: &'a Gradient, index: usize, } -impl<'a> Iterator for GradientStopsIter<'a> { +impl Iterator for GradientStopsIter<'_> { type Item = GradientStop; fn next(&mut self) -> Option { - if self.index >= self.stops.position.len() { - return None; - } - + // Elided positions fall back to the non-cyclic even distribution; cyclic-aware callers should read `position(index, gradient_cyclic)` instead let stop = GradientStop { - position: self.stops.position[self.index], - midpoint: self.stops.midpoint[self.index], - color: self.stops.color[self.index], + position: self.stops.position(self.index, false), + midpoint: self.stops.midpoint(self.index), + color: self.stops.color(self.index)?, }; self.index += 1; Some(stop) } fn size_hint(&self) -> (usize, Option) { - let remaining = self.stops.position.len() - self.index; + let remaining = self.stops.len().saturating_sub(self.index); (remaining, Some(remaining)) } } impl ExactSizeIterator for GradientStopsIter<'_> {} -impl<'a> IntoIterator for &'a GradientStops { +impl<'a> IntoIterator for &'a Gradient { type Item = GradientStop; type IntoIter = GradientStopsIter<'a>; @@ -196,201 +933,543 @@ impl<'a> IntoIterator for &'a GradientStops { } } -impl IntoIterator for GradientStops { +impl IntoIterator for Gradient { type Item = GradientStop; type IntoIter = std::vec::IntoIter; fn into_iter(self) -> Self::IntoIter { - self.position - .into_iter() - .zip(self.midpoint) - .zip(self.color) - .map(|((position, midpoint), color)| GradientStop { position, midpoint, color }) - .collect::>() - .into_iter() + self.iter().collect::>().into_iter() } } -impl GradientStops { - pub fn new(stops: impl IntoIterator) -> Self { - let mut position = Vec::new(); - let mut midpoint = Vec::new(); - let mut color = Vec::new(); +/// The fallback position of the gradient stop at `index` when no `position` attribute exists, where all `count` stops are spaced evenly from 0 to 1. +fn even_position(index: usize, count: usize, gradient_cyclic: bool) -> f64 { + if count <= 1 { + return 0.; + } + // A cyclic gradient reserves the same span for the wrapped interval as for each interval between stops + let denominator = if gradient_cyclic { count } else { count - 1 }; + index as f64 / denominator as f64 +} - for stop in stops { - position.push(stop.position); - midpoint.push(stop.midpoint); - color.push(stop.color); +impl Gradient { + pub fn new(stops: impl IntoIterator) -> Self { + let stops: Vec = stops.into_iter().collect(); + let mut list: List = stops.iter().map(|stop| Item::new_from_element(stop.color)).collect(); + + for (index, stop) in stops.iter().enumerate() { + list.set_attribute(ATTR_POSITION, index, stop.position); + list.set_attribute(ATTR_MIDPOINT, index, stop.midpoint); } - Self { position, midpoint, color } + Self(list) + } + + pub fn black_to_white() -> Self { + Self::from(vec![Color::BLACK, Color::WHITE]) + } + + pub fn as_color_list(&self) -> &List { + &self.0 + } + + pub fn into_color_list(self) -> List { + self.0 } pub fn len(&self) -> usize { - self.position.len() + self.0.len() } pub fn is_empty(&self) -> bool { - self.position.is_empty() + self.0.is_empty() } pub fn iter(&self) -> GradientStopsIter<'_> { self.into_iter() } + /// The color of the stop at the given index, if in bounds. + pub fn color(&self, index: usize) -> Option { + self.0.element(index).copied() + } + + /// The effective position of the stop at the given index: its `position` attribute value, or its share of an even distribution when the attribute is absent. + pub fn position(&self, index: usize, gradient_cyclic: bool) -> f64 { + self.0 + .attribute::(ATTR_POSITION, index) + .copied() + .unwrap_or_else(|| even_position(index, self.len(), gradient_cyclic)) + } + + /// The effective midpoint of the stop at the given index: its `midpoint` attribute value, or the linear interpolation default of `0.5` when the attribute is absent. + pub fn midpoint(&self, index: usize) -> f64 { + self.0.attribute::(ATTR_MIDPOINT, index).copied().unwrap_or(0.5) + } + + /// The effective positions of all stops. + pub fn positions(&self, gradient_cyclic: bool) -> Vec { + (0..self.len()).map(|index| self.position(index, gradient_cyclic)).collect() + } + + /// The effective midpoints of all stops. + pub fn midpoints(&self) -> Vec { + (0..self.len()).map(|index| self.midpoint(index)).collect() + } + + /// Whether the `position` attribute is explicitly present rather than falling back to the even distribution. + pub fn has_position_attribute(&self) -> bool { + self.0.iter_attribute_values::(ATTR_POSITION).is_some() + } + + /// Whether the `midpoint` attribute is explicitly present rather than falling back to the linear interpolation default. + pub fn has_midpoint_attribute(&self) -> bool { + self.0.iter_attribute_values::(ATTR_MIDPOINT).is_some() + } + + /// The `position` attribute's values when present, or `None` when the stops fall back to the even distribution. + fn position_attribute(&self) -> Option> { + self.0.iter_attribute_values::(ATTR_POSITION).map(|values| values.copied().collect()) + } + + /// The `midpoint` attribute's values when present, or `None` when the stops fall back to the linear interpolation default. + fn midpoint_attribute(&self) -> Option> { + self.0.iter_attribute_values::(ATTR_MIDPOINT).map(|values| values.copied().collect()) + } + + /// The `position` attribute when present and meaningfully different from the even distribution, which is the form worth persisting in the graph. + pub fn nondefault_positions(&self, gradient_cyclic: bool) -> Option> { + let positions = self.position_attribute()?; + let count = self.len(); + positions + .iter() + .enumerate() + .any(|(index, &position)| !position.is_finite() || (position - even_position(index, count, gradient_cyclic)).abs() > 1e-6) + .then_some(positions) + } + + /// The `midpoint` attribute when present and meaningfully different from the linear interpolation default of `0.5`. + pub fn nondefault_midpoints(&self) -> Option> { + let midpoints = self.midpoint_attribute()?; + midpoints.iter().any(|&midpoint| (midpoint - 0.5).abs() > 1e-6).then_some(midpoints) + } + + /// Removes the `position`/`midpoint` attributes when they merely restate the defaults, restoring the canonical absence-as-default form. + pub fn elide_default_attributes(&mut self, gradient_cyclic: bool) { + if self.has_position_attribute() && self.nondefault_positions(gradient_cyclic).is_none() { + self.0.remove_attribute(ATTR_POSITION); + } + if self.has_midpoint_attribute() && self.nondefault_midpoints().is_none() { + self.0.remove_attribute(ATTR_MIDPOINT); + } + } + + /// Pins the stops to the positions they currently occupy under `from_cyclic`, then re-elides against `to_cyclic`, + /// so flipping the flag leaves them where they are instead of snapping to the other mode's even distribution. + pub fn hold_positions_across_cyclic_change(&mut self, from_cyclic: bool, to_cyclic: bool) { + if from_cyclic == to_cyclic { + return; + } + + self.materialize_default_positions(from_cyclic); + self.elide_default_attributes(to_cyclic); + } + + /// Writes the whole `position` attribute from the effective values, since the even-distribution default is index-dependent and can't be produced by cell-wise padding. + fn materialize_default_positions(&mut self, gradient_cyclic: bool) { + if self.has_position_attribute() { + return; + } + + let count = self.len(); + for index in 0..count { + self.0.set_attribute(ATTR_POSITION, index, even_position(index, count, gradient_cyclic)); + } + } + + /// Replaces the color of the stop at `index`, if it exists. + pub fn set_color(&mut self, index: usize, color: Color) { + if let Some(element) = self.0.element_mut(index) { + *element = color; + } + } + + /// Sets the position of the stop at `index`, if it exists, materializing the whole `position` attribute so the other stops keep their effective placements. + pub fn set_position(&mut self, index: usize, position: f64, gradient_cyclic: bool) { + if index >= self.len() { + return; + } + self.materialize_default_positions(gradient_cyclic); + self.0.set_attribute(ATTR_POSITION, index, position); + } + + /// Sets the midpoint of the stop at `index`, if it exists. + pub fn set_midpoint(&mut self, index: usize, midpoint: f64) { + if index >= self.len() { + return; + } + self.0.set_attribute(ATTR_MIDPOINT, index, midpoint); + } + + /// Replaces the `position` attribute with the given values, padding with the final value if fewer than the stop count and ignoring any extras. + /// An empty list removes the attribute, restoring even distribution. + pub fn set_positions(&mut self, positions: &[f64]) { + let Some(&last) = positions.last() else { + self.0.remove_attribute(ATTR_POSITION); + return; + }; + + for index in 0..self.len() { + self.0.set_attribute(ATTR_POSITION, index, positions.get(index).copied().unwrap_or(last)); + } + } + + /// Replaces the `midpoint` attribute with the given values, padding with the final value if fewer than the stop count and ignoring any extras. + /// An empty list removes the attribute, restoring the linear interpolation default of `0.5` for every stop. + pub fn set_midpoints(&mut self, midpoints: &[f64]) { + let Some(&last) = midpoints.last() else { + self.0.remove_attribute(ATTR_MIDPOINT); + return; + }; + + for index in 0..self.len() { + self.0.set_attribute(ATTR_MIDPOINT, index, midpoints.get(index).copied().unwrap_or(last)); + } + } + + /// Rebuilds the stop list from the given stop indices, preserving every attribute. + fn reordered(&self, indices: impl IntoIterator) -> List { + let mut list = List::new(); + for index in indices { + if let Some(item) = self.0.clone_item(index) { + list.push(item); + } + } + list + } + /// Remove a stop at the given index. pub fn remove(&mut self, index: usize) { - self.position.remove(index); - self.midpoint.remove(index); - self.color.remove(index); + self.0 = self.reordered((0..self.len()).filter(|&i| i != index)); } /// Remove and return the last stop's color, or `None` if empty. pub fn pop(&mut self) -> Option { - self.position.pop(); - self.midpoint.pop(); - self.color.pop() + let color = self.color(self.len().checked_sub(1)?); + self.0 = self.reordered(0..self.len() - 1); + color } /// Move the stop at `index` to a new position, re-sorting the stops by position. Returns the new index of the moved stop. - pub fn move_stop(&mut self, index: usize, position: f64) -> usize { - if index >= self.position.len() { + pub fn move_stop(&mut self, index: usize, position: f64, gradient_cyclic: bool) -> usize { + if index >= self.len() { return index; } - self.position[index] = position; - self.sort_returning_new_index(index) + self.set_position(index, position, gradient_cyclic); + self.sort_returning_new_index(index, gradient_cyclic) } /// Insert a new stop at the given position, sampling the gradient at that position to determine the new stop's color. - /// The new stop's midpoint is inherited from the interval it splits (or `0.5` if inserting at the very start). + /// The new stop's midpoint is inherited from the interval it splits (or `0.5` if inserting at the very start of a non-cyclic gradient). /// Returns the index where the new stop was inserted. - pub fn insert_stop(&mut self, position: f64) -> usize { - let color = self.evaluate(position); - let index = self.position.iter().position(|p| *p > position).unwrap_or(self.position.len()); - let midpoint = index.checked_sub(1).and_then(|i| self.midpoint.get(i).copied()).unwrap_or(0.5); - self.position.insert(index, position); - self.midpoint.insert(index, midpoint); - self.color.insert(index, color); - index + pub fn insert_stop(&mut self, position: f64, settings: GradientSettings) -> usize { + let gradient_cyclic = settings.cyclic; + // The sampled position is inside the ramp, where the spread must act as Pad (Repeat would wrap an exact 1 onto the first stop) + let color = self.evaluate( + position, + GradientSettings { + spread: Default::default(), + ..settings + }, + ); + let index = (0..self.len()).position(|i| self.position(i, gradient_cyclic) > position).unwrap_or(self.len()); + + // Inserting before the first stop of a cyclic gradient splits the wrapped interval, so its handle is inherited + let midpoint = if index > 0 { + self.midpoint(index - 1) + } else if gradient_cyclic && !self.is_empty() { + self.midpoint(self.len() - 1) + } else { + 0.5 + }; + + self.insert_stop_values(position, midpoint, color, gradient_cyclic) } /// Insert a copy of the stop at `source_index` (same color and midpoint) at `position`, keeping the stops sorted by position. /// Returns the index where the copy was inserted, or `None` if `source_index` is out of range. - pub fn duplicate_stop(&mut self, source_index: usize, position: f64) -> Option { - let color = *self.color.get(source_index)?; - let midpoint = *self.midpoint.get(source_index)?; - let index = self.position.iter().position(|p| *p > position).unwrap_or(self.position.len()); - self.position.insert(index, position); - self.midpoint.insert(index, midpoint); - self.color.insert(index, color); - Some(index) + pub fn duplicate_stop(&mut self, source_index: usize, position: f64, gradient_cyclic: bool) -> Option { + let color = self.color(source_index)?; + let midpoint = self.midpoint(source_index); + Some(self.insert_stop_values(position, midpoint, color, gradient_cyclic)) + } + + /// Splices a new stop into the sorted position, materializing explicit positions (an arbitrary insertion breaks even distribution) + /// while giving the new stop a midpoint cell only if the attribute already exists. + fn insert_stop_values(&mut self, position: f64, midpoint: f64, color: Color, gradient_cyclic: bool) -> usize { + self.materialize_default_positions(gradient_cyclic); + let index = (0..self.len()).position(|i| self.position(i, gradient_cyclic) > position).unwrap_or(self.len()); + + let mut item = Item::new_from_element(color).with_attribute(ATTR_POSITION, position); + if self.has_midpoint_attribute() { + item = item.with_attribute(ATTR_MIDPOINT, midpoint); + } + + let mut list = self.reordered(0..index); + list.push(item); + for i in index..self.len() { + if let Some(existing) = self.0.clone_item(i) { + list.push(existing); + } + } + + self.0 = list; + index } /// Reset the midpoint for the interval starting at `index` to its default `0.5`. pub fn reset_midpoint(&mut self, index: usize) { - if let Some(midpoint) = self.midpoint.get_mut(index) { - *midpoint = 0.5; + if self.has_midpoint_attribute() && index < self.len() { + self.0.set_attribute(ATTR_MIDPOINT, index, 0.5); } } /// Sort the stops in place by position; returns the new index of the stop that was at `previous_index` before sorting. - fn sort_returning_new_index(&mut self, previous_index: usize) -> usize { - let len = self.position.len(); - let mut indices: Vec = (0..len).collect(); - indices.sort_by(|&a, &b| self.position[a].total_cmp(&self.position[b])); + fn sort_returning_new_index(&mut self, previous_index: usize, gradient_cyclic: bool) -> usize { + // An absent position attribute is an even distribution, which is already sorted + if !self.has_position_attribute() { + return previous_index; + } + + let mut indices: Vec = (0..self.len()).collect(); + indices.sort_by(|&a, &b| self.position(a, gradient_cyclic).total_cmp(&self.position(b, gradient_cyclic))); let new_index = indices.iter().position(|&i| i == previous_index).unwrap_or(previous_index); - self.position = indices.iter().map(|&i| self.position[i]).collect(); - self.midpoint = indices.iter().map(|&i| self.midpoint[i]).collect(); - self.color = indices.iter().map(|&i| self.color[i]).collect(); + self.0 = self.reordered(indices); new_index } - pub fn evaluate(&self, t: f64) -> Color { - if self.position.is_empty() { - return Color::BLACK; - } + /// Gradient stops as evaluation and rendering should see them, sorted ascending: a NaN drops its stop since it has no + /// defined placement, and an infinity lands on the nearest end. A cyclic ramp folds positions into the 0 to 1 range, the + /// whole of its circle, while a non-cyclic ramp keeps finite ones so a shifted ramp samples through stops that slid out. + fn normalized_stops(&self, gradient_cyclic: bool) -> Vec { + let mut stops: Vec = (0..self.len()) + .filter_map(|index| { + let position = self.position(index, gradient_cyclic); + if position.is_nan() { + return None; + } + let position = if gradient_cyclic || position.is_infinite() { position.clamp(0., 1.) } else { position }; - if t <= self.position[0] { - return self.color[0]; - } - let last = self.position.len() - 1; - if t >= self.position[last] { - return self.color[last]; - } + let midpoint = self.midpoint(index); + let color = self.color(index)?; - for i in 0..self.position.len() - 1 { - let (t1, c1) = (self.position[i], self.color[i]); - let (t2, c2) = (self.position[i + 1], self.color[i + 1]); - if t >= t1 && t <= t2 { - let normalized_t = (t - t1) / (t2 - t1); - let adjusted_t = apply_midpoint(normalized_t, self.midpoint[i]); - return c1.lerp(&c2, adjusted_t as f32); + Some(GradientStop { position, midpoint, color }) + }) + .collect(); + + stops.sort_by(|a, b| a.position.total_cmp(&b.position)); + stops + } + + /// Samples the gradient's color at `t`. Given a `t` outside the 0 to 1 range, the spread determines how the gradient extends. + /// + /// Each call rebuilds the sampling state, so loops over many `t` values should hold a [`Gradient::evaluator`] instead. + pub fn evaluate(&self, t: f64, settings: GradientSettings) -> Color { + self.evaluator(settings).evaluate(t) + } + + /// Prepares the gradient for repeated sampling: the stop normalization and any Smooth spline construction, together + /// O(n log n) in the stop count, happen once here rather than on every [`GradientEvaluator::evaluate`] call. + pub fn evaluator(&self, settings: GradientSettings) -> GradientEvaluator { + let stops = self.normalized_stops(settings.cyclic); + // A spline through fewer than two stops has nothing to curve between, leaving those ramps to linear evaluation + let smooth_path = (settings.interpolation == GradientInterpolation::Smooth && stops.len() >= 2).then(|| SmoothPath::new(&stops, settings)); + GradientEvaluator { stops, settings, smooth_path } + } + + pub fn sort(&mut self, gradient_cyclic: bool) { + self.sort_returning_new_index(0, gradient_cyclic); + } + + pub fn reversed(&self, gradient_cyclic: bool) -> Self { + let count = self.len(); + let mut list = self.mirrored_rows(gradient_cyclic); + + // Row reversal already reversed the position cells' order, each also flips across the range + if self.has_position_attribute() + && let Some(positions) = list.iter_attribute_values_mut::(ATTR_POSITION) + { + for position in positions { + *position = 1. - *position; + } + } else if gradient_cyclic && !self.has_position_attribute() { + // The cyclic even distribution starts at 0 rather than being symmetric across the range, so its flip must materialize + for index in 0..count { + list.set_attribute(ATTR_POSITION, index, 1. - even_position(count - 1 - index, count, true)); } } - Color::BLACK + Self(list) } - pub fn sort(&mut self) { - let mut indices: Vec = (0..self.position.len()).collect(); - indices.sort_unstable_by(|&a, &b| self.position[a].total_cmp(&self.position[b])); - self.position = indices.iter().map(|&i| self.position[i]).collect(); - self.midpoint = indices.iter().map(|&i| self.midpoint[i]).collect(); - self.color = indices.iter().map(|&i| self.color[i]).collect(); + /// Reverses the rows for a mirrored ramp, leaving positions to the caller since each mirroring has its own axis. Midpoints + /// govern the interval to their stop's right, so each shifts by one stop as well as flipping. The wrap handle flips in place. + fn mirrored_rows(&self, gradient_cyclic: bool) -> List { + let count = self.len(); + let mut list = self.reordered((0..count).rev()); + + if self.has_midpoint_attribute() { + let midpoints: Vec = (0..count) + .map(|i| { + if i + 1 < count { + 1. - self.midpoint(count - 2 - i) + } else if gradient_cyclic { + 1. - self.midpoint(count - 1) + } else { + 0.5 + } + }) + .collect(); + for (index, midpoint) in midpoints.into_iter().enumerate() { + list.set_attribute(ATTR_MIDPOINT, index, midpoint); + } + } + + list } - pub fn reversed(&self) -> Self { - let position: Vec = self.position.iter().rev().map(|&p| 1. - p).collect(); + /// Shifts every stop along the ramp by `fraction` of its whole length, each midpoint riding along. A cyclic ramp rotates, + /// wrapping past 1 back to 0 and re-sorting. A non-cyclic one translates, its positions leaving the range to sample through. + pub fn shift_positions(&mut self, fraction: f64, gradient_cyclic: bool) { + if !fraction.is_finite() { + return; + } - let count = self.midpoint.len(); - let midpoint = (0..count).map(|i| if i < count - 1 { 1. - self.midpoint[count - 2 - i] } else { 0.5 }).collect::>(); + // Only a rotation comes back around every whole turn, while a translation keeps going + let shift = if gradient_cyclic { fraction.rem_euclid(1.) } else { fraction }; + if shift == 0. { + return; + } - let color: Vec = self.color.iter().rev().cloned().collect(); + self.materialize_default_positions(gradient_cyclic); - Self { position, midpoint, color } + if let Some(positions) = self.0.iter_attribute_values_mut::(ATTR_POSITION) { + for position in positions { + // A non-finite position has no placement to shift, and wrapping one would land it on NaN + if !position.is_finite() { + continue; + } + + *position = if gradient_cyclic { + // Wrapping into the range first lands stops at 0 and 1, the same circle point, + // on an identical value rather than rounding apart into an unstable order + (position.rem_euclid(1.) + shift).rem_euclid(1.) + } else { + *position + shift + }; + } + } + + // Rotation carries stops across the seam and reorders the list, but translation leaves the order alone + if gradient_cyclic { + self.sort(gradient_cyclic); + } + + self.elide_default_attributes(gradient_cyclic); + } + + /// Multiplies every stop's distance from `pivot` by `factor`, a negative one mirroring the ramp across it. A cyclic ramp wraps + /// the results back around the circle its positions live on. A non-cyclic ramp lets them leave the range and samples through. + pub fn stretch_positions(&mut self, factor: f64, pivot: f64, gradient_cyclic: bool) { + if !factor.is_finite() || !pivot.is_finite() || factor == 1. { + return; + } + + self.materialize_default_positions(gradient_cyclic); + + if let Some(positions) = self.0.iter_attribute_values_mut::(ATTR_POSITION) { + for position in positions { + if !position.is_finite() { + continue; + } + + let stretched = pivot + (*position - pivot) * factor; + *position = if gradient_cyclic { stretched.rem_euclid(1.) } else { stretched }; + } + } + + // A mirrored ramp comes out in descending order, which the row reversal undoes + if factor < 0. { + self.0 = self.mirrored_rows(gradient_cyclic); + } + + // Wrapping can carry stops across the seam and reorder them + if gradient_cyclic { + self.sort(gradient_cyclic); + } + + self.elide_default_attributes(gradient_cyclic); } pub fn map_colors Color>(&self, f: F) -> Self { - Self { - position: self.position.clone(), - midpoint: self.midpoint.clone(), - color: self.color.iter().map(f).collect(), - } + let mut mapped = self.clone(); + mapped.0.iter_element_values_mut().for_each(|color| *color = f(color)); + mapped } - /// Build a CSS `linear-gradient(...)` string suitable for use as a `background-image`. Samples the midpoint curves so the rendered gradient matches Graphite's interpolation rather than browser defaults. - pub fn to_css_linear_gradient(&self) -> String { - if self.position.len() <= 1 { - let hex = self.color.first().map(|c| SRGBA8::from(*c).to_rgba_hex()).unwrap_or_else(|| "000000ff".to_string()); - return format!("linear-gradient(to right, #{hex} 0%, #{hex} 100%)"); - } - let pieces = self - .interpolated_samples() - .into_iter() - .map(|(position, color, _)| { - let percent = ((position * 100.) * 1e2).round() / 1e2; - format!("#{} {percent}%", SRGBA8::from(color).to_rgba_hex()) - }) - .collect::>() - .join(", "); - format!("linear-gradient(to right, {pieces})") + /// The gradient's [`Gradient::interpolated_samples`], falling back to one black sample when it has no stops, since a + /// stopless SVG gradient paints nothing where [`Gradient::evaluate`] gives black. + pub fn interpolated_samples_or_black(&self, settings: GradientSettings) -> Vec<(f64, Color, Option)> { + let samples = self.interpolated_samples(settings); + if samples.is_empty() { vec![(0., Color::BLACK, None)] } else { samples } } - /// Produce a set of linearly-interpolated color samples that approximate the gradient's midpoint curves. + /// Build a CSS `background-image` value embedding the gradient as an SVG data URI, sampling the midpoint curves, color + /// space, and spline. SVG interpolates its stops with straight alpha, matching the canvas renderers, where a CSS + /// `linear-gradient` interpolates premultiplied and would hide the pull a transparent stop's RGB exerts on the render. + pub fn to_svg_background_image(&self, settings: GradientSettings) -> String { + use std::fmt::Write; + + let mut stops = String::new(); + for (position, color, _) in self.interpolated_samples_or_black(settings) { + let srgba = SRGBA8::from(color); + let _ = write!(stops, ""); + } + + // A sizeless SVG stretches to fill the CSS background area; the encoding covers the URI-hostile characters + let svg = format!("{stops}"); + let encoded = svg.replace('%', "%25").replace('#', "%23").replace('<', "%3C").replace('>', "%3E"); + format!("url(\"data:image/svg+xml,{encoded}\")") + } + + /// Produce a set of linearly-interpolated color samples that approximate the gradient's true curve. /// /// Each sample is `(position, color, original_midpoint)` where `original_midpoint` is `Some(f64)` with the corresponding - /// midpoint for actual gradient stops, and `None` for interpolated samples added to approximate midpoint curves. + /// midpoint for actual gradient stops, and `None` for synthesized curve approximation samples. /// - /// Interpolation is performed in sRGB gamma space (then lifted back to linear-light for output) because the downstream SVG/CSS - /// renderer interpolates between adjacent `` colors in gamma space; doing the subdivision math in the same space ensures - /// the chosen samples actually match the curve the browser will draw. - pub fn interpolated_samples(&self) -> Vec<(f64, Color, Option)> { - /// Controls accuracy vs. number of samples tradeoff. - /// 2/255 means the linear approximation will deviate by no more than 2 gradations of 8-bit color from the theoretically perfect curve with this midpoint bias. - const THRESHOLD: f64 = 2. / 255.; - + /// The downstream SVG/CSS and Vello renderers interpolate between adjacent emitted stops in gamma sRGB space, so the + /// subdivision emits enough samples that the gamma-drawn segments match the ramp's true curve: the midpoint bias, the + /// color space when it is not gamma itself, and the spline path when the ramp interpolates smoothly. Stepped is exact + /// without any subdivision, since a pair of samples per interval reproduces its jumps. + pub fn interpolated_samples(&self, settings: GradientSettings) -> Vec<(f64, Color, Option)> { #[allow(clippy::too_many_arguments)] - fn subdivide(left: f64, right: f64, midpoint: f64, pos_a: f64, pos_b: f64, color_a_gamma: [f32; 4], color_b_gamma: [f32; 4], result: &mut Vec<(f64, Color, Option)>, depth: u32) { + fn subdivide( + left: f64, + right: f64, + midpoint: f64, + pos_a: f64, + pos_b: f64, + color_a: Color, + color_b: Color, + gradient_space: GradientSpace, + gradient_hue_direction: GradientHueDirection, + result: &mut Vec<(f64, Color, Option)>, + depth: u32, + ) { const MAX_DEPTH: u32 = 20; if depth >= MAX_DEPTH { return; @@ -403,53 +1482,133 @@ impl GradientStops { let y_right = apply_midpoint(right, midpoint); let y_linear = (y_left + y_right) / 2.; - if (y_actual - y_linear).abs() > THRESHOLD { - subdivide(left, mid, midpoint, pos_a, pos_b, color_a_gamma, color_b_gamma, result, depth + 1); + // A sample is needed wherever the renderer's gamma segment between the flanking samples would stray + // from the ramp's true curve: from the midpoint bias, or from a non-gamma space's own curvature. + // The space check probes the quarter points as well as the center, since spaces with a steep toe + // (like CIE Lab near black) peak their deviation off-center + let midpoint_deviates = (y_actual - y_linear).abs() > SAMPLE_THRESHOLD; + let space_deviates = gradient_space != GradientSpace::RgbGamma && { + let color_left = interpolate_stop_colors(color_a, color_b, y_left as f32, gradient_space, gradient_hue_direction); + let color_right = interpolate_stop_colors(color_a, color_b, y_right as f32, gradient_space, gradient_hue_direction); + [0.25, 0.5, 0.75].into_iter().any(|fraction| { + let y_probe = apply_midpoint(left + (right - left) * fraction, midpoint); + let color_target = interpolate_stop_colors(color_a, color_b, y_probe as f32, gradient_space, gradient_hue_direction); + max_gamma_channel_deviation(color_target, color_left.lerp_gamma_srgb(&color_right, fraction as f32)) > SAMPLE_THRESHOLD + }) + }; + + if midpoint_deviates || space_deviates { + subdivide(left, mid, midpoint, pos_a, pos_b, color_a, color_b, gradient_space, gradient_hue_direction, result, depth + 1); let global_pos = pos_a + mid * (pos_b - pos_a); - let t = y_actual as f32; - let r = color_a_gamma[0] + (color_b_gamma[0] - color_a_gamma[0]) * t; - let g = color_a_gamma[1] + (color_b_gamma[1] - color_a_gamma[1]) * t; - let b = color_a_gamma[2] + (color_b_gamma[2] - color_a_gamma[2]) * t; - let a = color_a_gamma[3] + (color_b_gamma[3] - color_a_gamma[3]) * t; - let color = Color::from_gamma_srgb_channels(r, g, b, a); + let color = interpolate_stop_colors(color_a, color_b, y_actual as f32, gradient_space, gradient_hue_direction); result.push((global_pos, color, None)); - subdivide(mid, right, midpoint, pos_a, pos_b, color_a_gamma, color_b_gamma, result, depth + 1); + subdivide(mid, right, midpoint, pos_a, pos_b, color_a, color_b, gradient_space, gradient_hue_direction, result, depth + 1); } } - if self.position.is_empty() { + fn linear_samples(stops: &[GradientStop], settings: GradientSettings) -> Vec<(f64, Color, Option)> { + let (gradient_space, gradient_hue_direction) = (settings.space, settings.hue_direction); + let count = stops.len(); + let mut result = Vec::new(); + + for i in 0..count - 1 { + let pos_a = stops[i].position; + let pos_b = stops[i + 1].position; + let color_a = stops[i].color; + let color_b = stops[i + 1].color; + let midpoint = sanitized_midpoint(stops[i].midpoint); + let next_midpoint = sanitized_midpoint(stops[i + 1].midpoint); + + // Add the start stop (subsequent intervals share the previous end stop) + if i == 0 { + result.push((pos_a, color_a, Some(midpoint))); + } + + // Only subdivide if the midpoint deviates from linear (0.5) or a non-gamma space may curve away from the drawn gamma segment + if (midpoint - 0.5).abs() >= 1e-6 || gradient_space != GradientSpace::RgbGamma { + subdivide(0., 1., midpoint, pos_a, pos_b, color_a, color_b, gradient_space, gradient_hue_direction, &mut result, 0); + } + + // Add the end stop + result.push((pos_b, color_b, Some(next_midpoint))); + } + + // Bake the wrapped interval into the flat list: the piece from the last stop to the 1|0 boundary, and the piece + // continuing from the boundary to the first stop, so both ends of the emitted list share the boundary-crossing + // color and downstream renderers stay unaware of the cycle + if settings.cyclic { + let (first, last) = (&stops[0], &stops[count - 1]); + let wrap_length = first.position + 1. - last.position; + if wrap_length > f64::EPSILON { + let wrap_midpoint = sanitized_midpoint(last.midpoint); + let boundary_fraction = (1. - last.position) / wrap_length; + let y_boundary = apply_midpoint(boundary_fraction, wrap_midpoint); + let boundary_color = interpolate_stop_colors(last.color, first.color, y_boundary as f32, gradient_space, gradient_hue_direction); + + if last.position < 1. { + let virtual_end = last.position + wrap_length; + subdivide( + 0., + boundary_fraction, + wrap_midpoint, + last.position, + virtual_end, + last.color, + first.color, + gradient_space, + gradient_hue_direction, + &mut result, + 0, + ); + result.push((1., boundary_color, None)); + } + + if first.position > 0. { + let virtual_start = last.position - 1.; + let mut leading = vec![(0., boundary_color, None)]; + subdivide( + boundary_fraction, + 1., + wrap_midpoint, + virtual_start, + first.position, + last.color, + first.color, + gradient_space, + gradient_hue_direction, + &mut leading, + 0, + ); + leading.append(&mut result); + result = leading; + } + } + } + + result + } + + let stops = self.normalized_stops(settings.cyclic); + let count = stops.len(); + if count == 0 { return vec![]; } - if self.position.len() == 1 { - return vec![(self.position[0], self.color[0], Some(self.midpoint[0]))]; + if count == 1 { + let sample = vec![(stops[0].position, stops[0].color, Some(sanitized_midpoint(stops[0].midpoint)))]; + return clip_samples_to_unit_range(&sample); } - let mut result = Vec::new(); + let samples = match settings.interpolation { + GradientInterpolation::Stepped => stepped_samples(&stops, settings.cyclic), + GradientInterpolation::Linear => linear_samples(&stops, settings), + GradientInterpolation::Smooth => smooth_samples(&stops, settings), + }; - for i in 0..self.position.len() - 1 { - let pos_a = self.position[i]; - let pos_b = self.position[i + 1]; - let color_a = self.color[i]; - let color_b = self.color[i + 1]; - let midpoint = self.midpoint[i].clamp(0.01, 0.99); - let next_midpoint = self.midpoint[i + 1].clamp(0.01, 0.99); - - // Add the start stop (subsequent segments share the previous end stop) - if i == 0 { - result.push((pos_a, color_a, Some(midpoint))); - } - - // Only subdivide if midpoint deviates from linear (0.5) - if (midpoint - 0.5).abs() >= 1e-6 { - subdivide(0., 1., midpoint, pos_a, pos_b, color_a.to_gamma_srgb_channels(), color_b.to_gamma_srgb_channels(), &mut result, 0); - } - - // Add the end stop - result.push((pos_b, color_b, Some(next_midpoint))); - } + // A shifted non-cyclic ramp can leave stops outside the range, which the curve still runs through + let mut result = clip_samples_to_unit_range(&samples); // If every midpoint is 0.5 (or within epsilon), turn all midpoints to None if result.iter().all(|(_, _, midpoint)| matches!(midpoint, Some(m) if (m - 0.5).abs() < 1e-6)) { @@ -465,7 +1624,41 @@ impl GradientStops { let color = a.color.lerp(&b.color, time as f32); GradientStop { position, midpoint: 0.5, color } }); - GradientStops::new(stops) + Gradient::new(stops) + } +} + +/// A gradient prepared for repeated sampling by [`Gradient::evaluator`], holding the normalized stops and any +/// prebuilt Smooth spline so each sample pays only the per-evaluation cost. +pub struct GradientEvaluator { + stops: Vec, + settings: GradientSettings, + smooth_path: Option, +} + +impl GradientEvaluator { + /// Samples the gradient's color at `t`. Given a `t` outside the 0 to 1 range, the spread determines how the gradient extends. + pub fn evaluate(&self, t: f64) -> Color { + let t = match self.settings.spread { + GradientSpread::Pad => t.clamp(0., 1.), + GradientSpread::Repeat => t.rem_euclid(1.), + GradientSpread::Reflect => { + let cycle = t.rem_euclid(2.); + if cycle > 1. { 2. - cycle } else { cycle } + } + GradientSpread::Clear => { + if !(0. ..=1.).contains(&t) { + return Color::TRANSPARENT; + } + t + } + }; + + match &self.smooth_path { + Some(path) => path.evaluate(t), + None if self.settings.interpolation == GradientInterpolation::Stepped => stepped_color(&self.stops, t, self.settings.cyclic), + None => linear_color(&self.stops, t, self.settings), + } } } @@ -474,19 +1667,185 @@ impl GradientStops { #[derive(Default, PartialEq, Eq, Clone, Copy, Debug, Hash, graphene_hash::CacheHash, DynAny, node_macro::ChoiceType)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[widget(Radio)] -pub enum GradientSpreadMethod { +pub enum GradientSpread { + /// Extends the end colors outward. #[default] + #[icon("GradientSpreadPad")] Pad, + /// Loops the gradient by mirroring back-and-forth. + #[icon("GradientSpreadReflect")] Reflect, + /// Loops the gradient as copies of itself. + #[icon("GradientSpreadRepeat")] Repeat, + /// Cuts off to transparency beyond the ends. + #[icon("GradientSpreadClear")] + Clear, } -impl GradientSpreadMethod { +impl GradientSpread { pub fn svg_name(&self) -> &'static str { match self { - GradientSpreadMethod::Pad => "pad", - GradientSpreadMethod::Reflect => "reflect", - GradientSpreadMethod::Repeat => "repeat", + GradientSpread::Pad => "pad", + GradientSpread::Reflect => "reflect", + GradientSpread::Repeat => "repeat", + // SVG has no clear mode; renderers emulate it over pad with transparent guard stops + GradientSpread::Clear => "pad", + } + } + + pub fn is_default(&self) -> bool { + *self == Self::default() + } +} + +#[repr(C)] +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, Hash, graphene_hash::CacheHash, DynAny, node_macro::ChoiceType)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[widget(Dropdown)] +pub enum GradientSpace { + /// Interpolates between stops in the OkLab color space, the modern perceptual standard. + #[default] + #[label("Perceptual (OkLab)")] + OkLab, + /// Interpolates between stops in the CIE Lab color space, the traditional perceptual standard. + #[label("Perceptual (Lab)")] + Lab, + /// Interpolates between stops in the polar form of OkLab, arcing through hue instead of fading through gray. + #[label("Perceptual Hue (OkLCh)")] + OkLCh, + /// Interpolates between stops in the polar form of CIE Lab, arcing through hue instead of fading through gray. + #[label("Perceptual Hue (LCh)")] + LCh, + /// Interpolates between stops in linear light, keeping transitions uniformly bright. + #[menu_separator] + #[label("Linear (RGB)")] + RgbLinear, + /// Interpolates between stops in gamma-encoded RGB, matching classic SVG and CSS gradients. + #[label("Classic (RGB)")] + RgbGamma, + /// Interpolates between stops in the hue/saturation/value cylinder, keeping tints at full brightness. + #[label("Classic Hue (HSV)")] + Hsv, + /// Interpolates between stops in the hue/saturation/lightness cylinder. + #[label("Classic Hue (HSL)")] + Hsl, +} + +impl GradientSpace { + pub fn is_default(&self) -> bool { + *self == Self::default() + } + + /// Whether the space is polar (cylindrical), making the hue direction option meaningful. + pub fn is_polar(&self) -> bool { + matches!(self, Self::OkLCh | Self::LCh | Self::Hsl | Self::Hsv) + } + + // TODO: Remove when switching to the new document format and Ctrl-C node serialization format + fn legacy_gamma() -> Self { + Self::RgbGamma + } +} + +#[repr(C)] +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, Hash, graphene_hash::CacheHash, DynAny, node_macro::ChoiceType)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[widget(Dropdown)] +pub enum GradientHueDirection { + /// Interpolates across the shorter arc around the hue wheel. + #[default] + Shorter, + /// Interpolates across the longer arc around the hue wheel. + Longer, + /// Interpolates with the hue angle always increasing. + Increasing, + /// Interpolates with the hue angle always decreasing. + Decreasing, +} + +impl GradientHueDirection { + pub fn is_default(&self) -> bool { + *self == Self::default() + } +} + +#[repr(C)] +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, Hash, graphene_hash::CacheHash, DynAny, node_macro::ChoiceType)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[widget(Dropdown)] +pub enum GradientInterpolation { + /// Holds each stop's color all the way to the next stop, jumping between them instead of transitioning. + Stepped, + /// Transitions straight from each stop to the next, turning a corner at every stop. + #[default] + Linear, + /// Transitions along a curve that flows through the stops without corners. + /// + /// The rate of color change carries smoothly through each stop (C1 continuity) and never overshoots beyond the stop colors, properties of its spline: a Piecewise Cubic Hermite Interpolating Polynomial (PCHIP) with Fritsch-Carlson tangent limiting. + Smooth, +} + +impl GradientInterpolation { + pub fn is_default(&self) -> bool { + *self == Self::default() + } +} + +/// The whole-ramp attributes governing how a gradient plays back, read together off a gradient item so the +/// sampling entry points take one argument instead of a widening list of same-typed positional ones. +#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, Hash)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct GradientSettings { + pub spread: GradientSpread, + pub cyclic: bool, + pub space: GradientSpace, + pub hue_direction: GradientHueDirection, + pub interpolation: GradientInterpolation, +} + +impl GradientSettings { + /// The whole-ramp settings an item carries in its attributes beside a gradient element, defaulting each absent one. + /// Generic over the element type so callers holding an unresolved item can still read them. + pub fn from_item_attributes(item: &Item) -> Self { + Self { + spread: item.attribute_cloned_or_default(ATTR_GRADIENT_SPREAD), + cyclic: item.attribute_cloned_or_default(ATTR_GRADIENT_CYCLIC), + space: item.attribute_cloned_or_default(ATTR_GRADIENT_SPACE), + hue_direction: item.attribute_cloned_or_default(ATTR_GRADIENT_HUE_DIRECTION), + interpolation: item.attribute_cloned_or_default(ATTR_GRADIENT_INTERPOLATION), + } + } + + /// The whole-ramp settings a list carries at `index` beside a gradient element, defaulting each absent one. + pub fn from_list_row_attributes(list: &List, index: usize) -> Self { + Self { + spread: list.attribute_cloned_or_default(ATTR_GRADIENT_SPREAD, index), + cyclic: list.attribute_cloned_or_default(ATTR_GRADIENT_CYCLIC, index), + space: list.attribute_cloned_or_default(ATTR_GRADIENT_SPACE, index), + hue_direction: list.attribute_cloned_or_default(ATTR_GRADIENT_HUE_DIRECTION, index), + interpolation: list.attribute_cloned_or_default(ATTR_GRADIENT_INTERPOLATION, index), + } + } +} + +impl From<&Item> for GradientSettings { + fn from(item: &Item) -> Self { + Self::from_item_attributes(item) + } +} + +impl From<&GradientRamp> for GradientSettings { + fn from(ramp: &GradientRamp) -> Self { + Self { + spread: ramp.gradient_spread, + cyclic: ramp.gradient_cyclic, + space: ramp.gradient_space, + hue_direction: ramp.gradient_hue_direction, + interpolation: ramp.gradient_interpolation, } } } @@ -539,30 +1898,7 @@ pub fn initial_gradient_transform_for_bounding_box(bounds: [DVec2; 2]) -> DAffin } } -// TODO: Eventually remove this migration document upgrade code -pub fn migrate_to_gradient_stops<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result { - use serde::Deserialize; - - #[derive(serde::Deserialize)] - struct LegacyTable { - #[serde(alias = "instances", alias = "instance")] - element: Vec, - } - - #[derive(serde::Deserialize)] - #[cfg_attr(feature = "serde", serde(untagged))] - enum GradientStopsFormat { - Stops(GradientStops), - List(LegacyTable), - } - - Ok(match GradientStopsFormat::deserialize(deserializer)? { - GradientStopsFormat::Stops(stops) => stops, - GradientStopsFormat::List(list) => list.element.into_iter().next().unwrap_or_default(), - }) -} - -impl core_types::bounds::BoundingBox for GradientStops { +impl core_types::bounds::BoundingBox for Gradient { fn bounding_box(&self, _transform: DAffine2, _include_stroke: bool) -> core_types::bounds::RenderBoundingBox { core_types::bounds::RenderBoundingBox::Infinite } @@ -575,3 +1911,1162 @@ impl core_types::bounds::BoundingBox for GradientStops { core_types::bounds::RenderBoundingBox::Rectangle([start.min(end), start.max(end)]) } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn default_is_empty_and_black_to_white_is_the_artist_starting_gradient() { + assert!(Gradient::default().is_empty()); + assert_eq!(Gradient::black_to_white().positions(false), vec![0., 1.]); + assert_eq!(Gradient::default().evaluate(0.5, Default::default()), Color::BLACK); + } + + #[test] + fn absent_attributes_default_to_even_positions_and_linear_midpoints() { + let gradient = Gradient::from(vec![Color::BLACK, Color::WHITE, Color::RED]); + assert_eq!(gradient.positions(false), vec![0., 0.5, 1.]); + assert_eq!(gradient.midpoints(), vec![0.5, 0.5, 0.5]); + } + + #[test] + fn serde_round_trip_preserves_attribute_absence() { + let implicit = GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE])); + let json = serde_json::to_string(&implicit).unwrap(); + assert!(!json.contains("position") && !json.contains("midpoint"), "absent attributes must not serialize: {json}"); + assert_eq!(serde_json::from_str::(&json).unwrap(), implicit); + + let mut explicit = Gradient::from(vec![Color::BLACK, Color::WHITE]); + explicit.set_positions(&[0.2, 0.9]); + explicit.set_midpoints(&[0.3, 0.5]); + let explicit = GradientRamp::from(explicit); + let json = serde_json::to_string(&explicit).unwrap(); + assert_eq!(serde_json::from_str::(&json).unwrap(), explicit); + } + + #[test] + fn gradient_spread_serializes_only_when_not_default() { + let default_spread = GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE])); + let json = serde_json::to_string(&default_spread).unwrap(); + assert!(!json.contains("gradient_spread"), "the default Pad gradient spread must not serialize: {json}"); + assert_eq!(serde_json::from_str::(&json).unwrap(), default_spread); + + let repeating = GradientRamp { + gradient_spread: GradientSpread::Repeat, + ..default_spread.clone() + }; + let json = serde_json::to_string(&repeating).unwrap(); + assert!(json.contains(r#""gradient_spread":"Repeat""#), "a non-default gradient spread must serialize: {json}"); + assert_eq!(serde_json::from_str::(&json).unwrap(), repeating); + } + + #[test] + fn gradient_spread_round_trips_through_the_item_attribute() { + let ramp = GradientRamp { + gradient_spread: GradientSpread::Repeat, + ..GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE])) + }; + + let item = Item::::from(ramp.clone()); + assert_eq!( + item.attribute_cloned_or_default::(ATTR_GRADIENT_SPREAD), + GradientSpread::Repeat, + "the runtime item should carry the gradient spread as its attribute" + ); + assert_eq!(GradientRamp::from(&item), ramp); + + let padded = Item::::from(GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE]))); + assert!( + padded.attribute::(ATTR_GRADIENT_SPREAD).is_none(), + "the default Pad must stay absent rather than materialize" + ); + } + + #[test] + fn gradient_space_always_serializes_and_its_absence_reads_as_legacy_gamma() { + let default_space = GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE])); + let json = serde_json::to_string(&default_space).unwrap(); + assert!( + json.contains(r#""gradient_space":"OkLab""#), + "the space must serialize even at its default, marking the ramp as post-legacy: {json}" + ); + assert_eq!(serde_json::from_str::(&json).unwrap(), default_space); + + let gamma = GradientRamp { + gradient_space: GradientSpace::RgbGamma, + ..default_space.clone() + }; + let json = serde_json::to_string(&gamma).unwrap(); + assert!(json.contains(r#""gradient_space":"RgbGamma""#), "a non-default space must serialize: {json}"); + assert_eq!(serde_json::from_str::(&json).unwrap(), gamma); + + let legacy_json = json.replace(r#","gradient_space":"RgbGamma""#, ""); + assert_eq!( + serde_json::from_str::(&legacy_json).unwrap(), + gamma, + "a ramp saved before the field existed should read as the gamma it rendered with: {legacy_json}" + ); + } + + #[test] + fn gradient_space_round_trips_through_the_item_attribute() { + let ramp = GradientRamp { + gradient_space: GradientSpace::RgbGamma, + ..GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE])) + }; + + let item = Item::::from(ramp.clone()); + assert_eq!( + item.attribute_cloned_or_default::(ATTR_GRADIENT_SPACE), + GradientSpace::RgbGamma, + "the runtime item should carry the space as its attribute" + ); + assert_eq!(GradientRamp::from(&item), ramp); + + let oklab = Item::::from(GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE]))); + assert!( + oklab.attribute::(ATTR_GRADIENT_SPACE).is_none(), + "the default OkLab must stay absent rather than materialize" + ); + } + + #[test] + fn gradient_hue_direction_round_trips_through_the_item_attribute() { + let ramp = GradientRamp { + gradient_hue_direction: GradientHueDirection::Longer, + ..GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE])) + }; + + let item = Item::::from(ramp.clone()); + assert_eq!( + item.attribute_cloned_or_default::(ATTR_GRADIENT_HUE_DIRECTION), + GradientHueDirection::Longer, + "the runtime item should carry the hue direction as its attribute" + ); + assert_eq!(GradientRamp::from(&item), ramp); + + let shorter = Item::::from(GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE]))); + assert!( + shorter.attribute::(ATTR_GRADIENT_HUE_DIRECTION).is_none(), + "the default Shorter must stay absent rather than materialize" + ); + } + + #[test] + fn gradient_interpolation_round_trips_through_the_item_attribute() { + let ramp = GradientRamp { + gradient_interpolation: GradientInterpolation::Smooth, + ..GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE])) + }; + + let item = Item::::from(ramp.clone()); + assert_eq!( + item.attribute_cloned_or_default::(ATTR_GRADIENT_INTERPOLATION), + GradientInterpolation::Smooth, + "the runtime item should carry the interpolation as its attribute" + ); + assert_eq!(GradientRamp::from(&item), ramp); + + let linear = Item::::from(GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE]))); + assert!( + linear.attribute::(ATTR_GRADIENT_INTERPOLATION).is_none(), + "the default Linear must stay absent rather than materialize" + ); + } + + #[test] + fn toggling_cyclic_leaves_the_stops_where_they_are() { + // A ramp still riding the elided default is the case that would otherwise snap, since the two modes + // spread the same stop count differently + let elided = GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE, Color::RED])); + assert_eq!(Gradient::from(&elided).positions(false), vec![0., 0.5, 1.]); + + let cyclic = elided.clone().with_cyclic(true); + assert!(cyclic.gradient_cyclic); + assert_eq!(Gradient::from(&cyclic).positions(true), vec![0., 0.5, 1.], "toggling cyclic on must not move the stops"); + + // And back again, landing on the original elided form rather than the cyclic distribution + let restored = cyclic.with_cyclic(false); + assert_eq!(Gradient::from(&restored).positions(false), vec![0., 0.5, 1.], "toggling cyclic off must not move the stops"); + assert_eq!(restored, elided, "returning to the original mode should restore the canonical elided form"); + + // A ramp already sitting on the cyclic even distribution keeps it, and elides once the flag agrees + let mut thirds = Gradient::from(vec![Color::BLACK, Color::WHITE, Color::RED]); + thirds.set_positions(&[0., 1. / 3., 2. / 3.]); + let ramp = GradientRamp::from(thirds).with_cyclic(true); + assert_eq!(Gradient::from(&ramp).positions(true), vec![0., 1. / 3., 2. / 3.]); + assert!( + !Gradient::from(&ramp).has_position_attribute(), + "matching the new mode's distribution should elide back to the canonical form" + ); + } + + #[test] + fn stepped_holds_each_color_to_the_next_stop_and_ignores_midpoints() { + let stepped = GradientSettings { + interpolation: GradientInterpolation::Stepped, + ..Default::default() + }; + + let mut gradient = Gradient::from(vec![Color::BLACK, Color::WHITE, Color::RED]); + gradient.set_midpoints(&[0.1, 0.9, 0.5]); + + // Each stop's color fills its whole interval, jumping only once the next stop is reached + for (t, expected) in [(0., Color::BLACK), (0.49, Color::BLACK), (0.5, Color::WHITE), (0.99, Color::WHITE), (1., Color::RED)] { + assert_eq!(gradient.evaluate(t, stepped), expected, "stepped should hold the left stop's color at {t}"); + } + + // The bake reproduces the jumps exactly rather than approximating them, so each interval emits both of its ends + let samples = gradient.interpolated_samples(stepped); + assert_eq!( + samples.iter().map(|&(position, color, _)| (position, color)).collect::>(), + vec![(0., Color::BLACK), (0.5, Color::BLACK), (0.5, Color::WHITE), (1., Color::WHITE), (1., Color::RED)] + ); + } + + #[test] + fn smooth_passes_through_every_stop_without_overshooting_between_them() { + let smooth = GradientSettings { + space: GradientSpace::RgbLinear, + interpolation: GradientInterpolation::Smooth, + ..Default::default() + }; + + let gradient = Gradient::from(vec![Color::BLACK, Color::WHITE, Color::BLACK]); + + // A monotonic spline is pinned to its stops, unlike an overshooting one such as Catmull-Rom + for (index, expected) in [(0., Color::BLACK), (0.5, Color::WHITE), (1., Color::BLACK)] { + let sampled = gradient.evaluate(index, smooth); + assert!((sampled.r() - expected.r()).abs() < 1e-4, "the spline must pass through the stop at {index}, got {sampled:?}"); + } + + // Every sample between two stops stays bounded by them, so no channel manufactures an out-of-gamut excursion + for step in 0..=100 { + let red = gradient.evaluate(step as f64 / 100., smooth).r(); + assert!((-1e-4..=1. + 1e-4).contains(&red), "the monotonic spline must not overshoot its stops, got {red} at step {step}"); + } + } + + #[test] + fn smooth_removes_the_rate_kink_that_linear_leaves_at_a_stop() { + let mut gradient = Gradient::from(vec![Color::BLACK, Color::from_rgbaf32_unchecked(0.25, 0.25, 0.25, 1.), Color::WHITE]); + gradient.set_positions(&[0., 0.5, 1.]); + + // Sample the slope just either side of the middle stop, where Linear's independent chords change rate abruptly. + // The step stays small so the one-sided differences approximate the slopes at the stop rather than averaging in curvature. + let slope_around_middle = |settings: GradientSettings| { + const STEP: f64 = 1e-3; + let sample = |t: f64| gradient.evaluate(t, settings).r() as f64; + let before = (sample(0.5) - sample(0.5 - STEP)) / STEP; + let after = (sample(0.5 + STEP) - sample(0.5)) / STEP; + (after - before).abs() + }; + + let linear = GradientSettings { + space: GradientSpace::RgbLinear, + ..Default::default() + }; + let smooth = GradientSettings { + interpolation: GradientInterpolation::Smooth, + ..linear + }; + + assert!( + slope_around_middle(smooth) < slope_around_middle(linear) / 10., + "smooth should carry its rate through the stop where linear turns a corner" + ); + } + + #[test] + fn smooth_closes_a_cyclic_loop_across_the_boundary() { + let smooth_cyclic = GradientSettings { + space: GradientSpace::RgbLinear, + cyclic: true, + interpolation: GradientInterpolation::Smooth, + ..Default::default() + }; + + let gradient = Gradient::from(vec![Color::BLACK, Color::WHITE, Color::from_rgbaf32_unchecked(0.5, 0.5, 0.5, 1.)]); + + // The two wrapped views of the boundary must agree, or the seam shows as a visible discontinuity + let (before, after) = (gradient.evaluate(0.999, smooth_cyclic), gradient.evaluate(0.001, smooth_cyclic)); + assert!((before.r() - after.r()).abs() < 2. / 255., "the loop must join across the 1|0 boundary, got {before:?} then {after:?}"); + + // The bake's ends share that crossing color exactly, so downstream renderers see a closed ramp + let samples = gradient.interpolated_samples(smooth_cyclic); + let (first, last) = (samples.first().expect("a baked ramp has samples"), samples.last().expect("a baked ramp has samples")); + assert_eq!((first.0, first.1), (0., last.1), "the baked ends must share the boundary-crossing color"); + assert_eq!(last.0, 1.); + } + + #[test] + fn smooth_bake_keeps_the_end_stops_their_own_colors() { + let smooth = GradientSettings { + space: GradientSpace::RgbLinear, + interpolation: GradientInterpolation::Smooth, + ..Default::default() + }; + + let gradient = Gradient::from(vec![Color::BLACK, Color::WHITE]); + + let samples = gradient.interpolated_samples(smooth); + let (first, last) = (samples.first().expect("a baked ramp has samples"), samples.last().expect("a baked ramp has samples")); + assert_eq!((first.0, first.1), (0., Color::BLACK)); + assert_eq!((last.0, last.1), (1., Color::WHITE)); + } + + #[test] + fn smooth_cyclic_stops_on_both_boundaries_keep_a_hard_seam() { + let open = GradientSettings { + space: GradientSpace::RgbLinear, + interpolation: GradientInterpolation::Smooth, + ..Default::default() + }; + let cyclic = GradientSettings { cyclic: true, ..open }; + + let mut gradient = Gradient::from(vec![Color::BLACK, Color::from_rgbaf32_unchecked(0.25, 0.25, 0.25, 1.), Color::WHITE]); + gradient.set_positions(&[0., 0.5, 1.]); + + // With no wrapped interval to cross, the cycle's seam is the jump between the two end stops and the + // spline matches its open form everywhere + for step in 0..=100 { + let t = step as f64 / 100.; + assert_eq!(gradient.evaluate(t, cyclic), gradient.evaluate(t, open), "cyclic and open must agree at {t}"); + } + + let samples = gradient.interpolated_samples(cyclic); + let (first, last) = (samples.first().expect("a baked ramp has samples"), samples.last().expect("a baked ramp has samples")); + assert_eq!((first.0, first.1), (0., Color::BLACK)); + assert_eq!((last.0, last.1), (1., Color::WHITE)); + } + + #[test] + fn linear_space_densifies_samples_where_gamma_segments_deviate() { + let gradient = Gradient::from(vec![Color::BLACK, Color::WHITE]); + + // Gamma needs no synthesized samples since the renderers already draw gamma segments + assert_eq!( + gradient + .interpolated_samples(GradientSettings { + space: GradientSpace::RgbGamma, + ..Default::default() + }) + .len(), + 2 + ); + + // A linear black-to-white ramp curves away from any single gamma segment, so samples must densify, + // keeping the end stops in place and every synthesized color on the linear-light line + let samples = gradient.interpolated_samples(GradientSettings { + space: GradientSpace::RgbLinear, + ..Default::default() + }); + assert!(samples.len() > 2, "the linear space should synthesize samples, got {}", samples.len()); + assert_eq!(samples.first().unwrap().0, 0.); + assert_eq!(samples.last().unwrap().0, 1.); + for &(position, color, _) in &samples { + assert!( + (color.r() as f64 - position).abs() < 1e-5, + "sample at {position} should sit on the linear-light line, got {}", + color.r() + ); + } + + // Identical end colors leave nothing to densify + let flat = Gradient::from(vec![Color::WHITE, Color::WHITE]); + assert_eq!( + flat.interpolated_samples(GradientSettings { + space: GradientSpace::RgbLinear, + ..Default::default() + }) + .len(), + 2 + ); + } + + #[test] + fn midpoint_bias_and_gradient_space_compose_within_playback_tolerance() { + let color_pairs = [ + (Color::BLACK, Color::WHITE), + (Color::RED, Color::WHITE), + (Color::from_rgbaf32_unchecked(0.9, 0.2, 0.05, 1.), Color::from_rgbaf32_unchecked(0.05, 0.3, 0.8, 0.5)), + ]; + + // Sweep the midpoint against each space so its bias and the space's curvature also oppose each other, + // asserting the emitted samples' gamma playback tracks the composed midpoint-then-space theoretical curve + for (gradient_space, gradient_hue_direction) in [ + (GradientSpace::OkLab, GradientHueDirection::Shorter), + (GradientSpace::OkLCh, GradientHueDirection::Shorter), + (GradientSpace::OkLCh, GradientHueDirection::Longer), + (GradientSpace::Lab, GradientHueDirection::Shorter), + (GradientSpace::LCh, GradientHueDirection::Shorter), + (GradientSpace::Hsl, GradientHueDirection::Shorter), + (GradientSpace::Hsl, GradientHueDirection::Longer), + (GradientSpace::Hsv, GradientHueDirection::Shorter), + (GradientSpace::RgbLinear, GradientHueDirection::Shorter), + (GradientSpace::RgbGamma, GradientHueDirection::Shorter), + ] { + for &(color_a, color_b) in &color_pairs { + for midpoint_step in 1..40 { + let midpoint = midpoint_step as f64 / 40.; + + let mut gradient = Gradient::from(vec![color_a, color_b]); + gradient.set_midpoints(&[midpoint, 0.5]); + let samples = gradient.interpolated_samples(GradientSettings { + space: gradient_space, + hue_direction: gradient_hue_direction, + ..Default::default() + }); + + for probe in 0..=1000 { + let t = probe as f64 / 1000.; + + let after = samples.iter().position(|&(position, ..)| position >= t).unwrap_or(samples.len() - 1); + let playback = if after == 0 { + samples[0].1 + } else { + let (left_position, left_color, _) = samples[after - 1]; + let (right_position, right_color, _) = samples[after]; + let span = right_position - left_position; + if span < 1e-12 { + right_color + } else { + left_color.lerp_gamma_srgb(&right_color, ((t - left_position) / span) as f32) + } + }; + + let true_color = interpolate_stop_colors(color_a, color_b, apply_midpoint(t, midpoint) as f32, gradient_space, gradient_hue_direction); + let deviation = max_gamma_channel_deviation(playback, true_color); + assert!( + deviation <= 4. / 255., + "playback deviates {:.1}/255 at t={t} with midpoint {midpoint} in {gradient_space:?} ({gradient_hue_direction:?}) between {color_a:?} and {color_b:?}", + deviation * 255. + ); + } + } + } + } + } + + #[test] + fn svg_background_image_percent_encodes_and_keeps_straight_alpha_stops() { + let mut gradient = Gradient::from(vec![Color::BLACK, Color::WHITE]); + gradient.set_color(1, Color::from_rgbaf32_unchecked(1., 1., 1., 0.5)); + + let image = gradient.to_svg_background_image(GradientSettings::default()); + + assert!(image.starts_with("url(\"data:image/svg+xml,"), "the value should be an SVG data URI: {image}"); + assert!(image.contains("stop-opacity='0.5'"), "a transparent stop should emit its straight alpha: {image}"); + assert!(!image.contains(['#', '<', '>']), "URI-hostile characters should be percent-encoded: {image}"); + } + + #[test] + fn svg_background_image_paints_a_stopless_gradient_black() { + let image = Gradient::from(Vec::new()).to_svg_background_image(GradientSettings::default()); + + // The hex color's `#` arrives percent-encoded + assert!(image.contains("stop-color='%23000000'"), "a gradient with no stops should paint black rather than nothing: {image}"); + } + + #[test] + fn clear_spread_evaluates_to_transparency_outside_the_unit_range() { + let gradient = Gradient::from(vec![Color::BLACK, Color::WHITE]); + + assert_eq!( + gradient.evaluate( + -0.25, + GradientSettings { + spread: GradientSpread::Clear, + ..Default::default() + } + ), + Color::TRANSPARENT + ); + assert_eq!( + gradient.evaluate( + 1.25, + GradientSettings { + spread: GradientSpread::Clear, + ..Default::default() + } + ), + Color::TRANSPARENT + ); + + for t in [0., 0.25, 1.] { + assert_eq!( + gradient.evaluate( + t, + GradientSettings { + spread: GradientSpread::Clear, + ..Default::default() + } + ), + gradient.evaluate( + t, + GradientSettings { + spread: GradientSpread::Pad, + ..Default::default() + } + ), + "inside the range Clear must match Pad at t = {t}" + ); + } + } + + #[test] + fn evaluate_follows_the_gradient_space() { + let gradient = Gradient::from(vec![Color::BLACK, Color::WHITE]); + + let oklab = gradient.evaluate( + 0.5, + GradientSettings { + space: GradientSpace::OkLab, + ..Default::default() + }, + ); + let linear = gradient.evaluate( + 0.5, + GradientSettings { + space: GradientSpace::RgbLinear, + ..Default::default() + }, + ); + let gamma = gradient.evaluate( + 0.5, + GradientSettings { + space: GradientSpace::RgbGamma, + ..Default::default() + }, + ); + + assert_eq!(linear, Color::BLACK.lerp(&Color::WHITE, 0.5)); + assert_eq!(gamma, Color::BLACK.lerp_gamma_srgb(&Color::WHITE, 0.5)); + + // Halfway in OkLab between black and white is lightness 0.5, which cubes to 1/8 linear light in every channel + for channel in [oklab.r(), oklab.g(), oklab.b()] { + assert!((channel - 0.125).abs() < 1e-3, "the OkLab mid color of black and white should be 1/8 linear light, got {channel}"); + } + assert_eq!(oklab.a(), 1.); + + assert_ne!(linear, gamma, "each space must produce a different mid color between black and white"); + assert_ne!(oklab, linear, "each space must produce a different mid color between black and white"); + assert_ne!(oklab, gamma, "each space must produce a different mid color between black and white"); + } + + #[test] + fn polar_spaces_take_the_shorter_hue_arc_and_ignore_powerless_hues() { + use color::ColorSpace; + + // Red to blue in HSL crosses through magenta on the shorter arc (300 degrees), not through green (120 degrees) + let red_to_blue = Gradient::from(vec![Color::RED, Color::BLUE]); + let magenta = red_to_blue.evaluate( + 0.5, + GradientSettings { + space: GradientSpace::Hsl, + ..Default::default() + }, + ); + for (channel, expected) in [(magenta.r(), 1.), (magenta.g(), 0.), (magenta.b(), 1.)] { + assert!((channel - expected).abs() < 1e-3, "the HSL mid color of red and blue should be magenta, got {magenta:?}"); + } + + // White's hue is powerless, so an OkLCh interpolation toward it keeps red's hue instead of drifting toward white's arbitrary hue + let red_to_white = Gradient::from(vec![Color::RED, Color::WHITE]); + let pink = red_to_white.evaluate( + 0.5, + GradientSettings { + space: GradientSpace::OkLCh, + ..Default::default() + }, + ); + let [_, _, red_hue] = color::Oklch::from_linear_srgb([Color::RED.r(), Color::RED.g(), Color::RED.b()]); + let [_, pink_chroma, pink_hue] = color::Oklch::from_linear_srgb([pink.r(), pink.g(), pink.b()]); + assert!(pink_chroma > 0.05, "the mid color should stay chromatic, got {pink:?}"); + assert!((pink_hue - red_hue).abs() < 0.5, "the mid hue should hold red's {red_hue} degrees, got {pink_hue}"); + + // HSV rides the cube's top face toward white, keeping the mid tint at full brightness where HSL dips + let tint = red_to_white.evaluate( + 0.5, + GradientSettings { + space: GradientSpace::Hsv, + ..Default::default() + }, + ); + for (channel, target) in tint.to_gamma_srgb_channels().into_iter().zip([1., 0.5, 0.5, 1.]) { + assert!((channel - target).abs() < 1e-3, "the HSV mid tint of red and white should be gamma (1, 0.5, 0.5), got {tint:?}"); + } + + // Toward black both saturation and value halve, the classic HSV shade that neither HSL nor HWB produces + let red_to_black = Gradient::from(vec![Color::RED, Color::BLACK]); + let shade = red_to_black.evaluate( + 0.5, + GradientSettings { + space: GradientSpace::Hsv, + ..Default::default() + }, + ); + for (channel, target) in shade.to_gamma_srgb_channels().into_iter().zip([0.5, 0.25, 0.25, 1.]) { + assert!((channel - target).abs() < 1e-3, "the HSV mid shade of red and black should be gamma (0.5, 0.25, 0.25), got {shade:?}"); + } + } + + #[test] + fn hue_direction_chooses_the_arc_around_the_hue_wheel() { + // Red to blue spans 240 degrees upward, so Longer and Increasing agree on the green route + // while Shorter and Decreasing cross through magenta + let red_to_blue = Gradient::from(vec![Color::RED, Color::BLUE]); + let expectations = [ + (GradientHueDirection::Shorter, [1., 0., 1.]), + (GradientHueDirection::Longer, [0., 1., 0.]), + (GradientHueDirection::Increasing, [0., 1., 0.]), + (GradientHueDirection::Decreasing, [1., 0., 1.]), + ]; + for (gradient_hue_direction, expected_rgb) in expectations { + let mid = red_to_blue.evaluate( + 0.5, + GradientSettings { + space: GradientSpace::Hsl, + hue_direction: gradient_hue_direction, + ..Default::default() + }, + ); + for (channel, target) in [mid.r(), mid.g(), mid.b()].into_iter().zip(expected_rgb) { + assert!( + (channel - target).abs() < 1e-3, + "the {gradient_hue_direction:?} mid of red and blue should be {expected_rgb:?}, got {mid:?}" + ); + } + } + + // Identical hues under Longer take a full turn around the wheel, passing through cyan halfway + let red_to_red = Gradient::from(vec![Color::RED, Color::RED]); + let mid = red_to_red.evaluate( + 0.5, + GradientSettings { + space: GradientSpace::Hsl, + hue_direction: GradientHueDirection::Longer, + ..Default::default() + }, + ); + for (channel, target) in [mid.r(), mid.g(), mid.b()].into_iter().zip([0., 1., 1.]) { + assert!((channel - target).abs() < 1e-3, "the full-turn mid of red and red should be cyan, got {mid:?}"); + } + } + + #[test] + fn gradient_ui_write_back_elides_default_attributes() { + // The picker always sends explicit positions, so the write-back is what restores the canonical absence-as-default form + let write_back = |gradient: &Gradient, gradient_cyclic: bool| { + let sent = GradientRamp:: { gradient_cyclic, ..gradient.into() }; + Gradient::from(&GradientRamp::from(&sent)) + }; + + let mut gradient = Gradient::from(vec![Color::BLACK, Color::WHITE, Color::RED]); + gradient.set_positions(&[0., 0.5, 1.]); + gradient.set_midpoints(&[0.7, 0.5, 0.5]); + + let written_back = write_back(&gradient, false); + assert!(!written_back.has_position_attribute(), "the even distribution should elide on write-back"); + assert_eq!(written_back.midpoints(), vec![0.7, 0.5, 0.5]); + + // Cyclic ramps spread over one more interval, so thirds are the elidable distribution and halves are not + let mut cyclic = Gradient::from(vec![Color::BLACK, Color::WHITE, Color::RED]); + cyclic.set_positions(&[0., 1. / 3., 2. / 3.]); + assert!(!write_back(&cyclic, true).has_position_attribute(), "the cyclic even distribution should elide on write-back"); + assert_eq!( + write_back(&gradient, true).positions(true), + vec![0., 0.5, 1.], + "positions that only look default when non-cyclic must survive" + ); + } + + #[test] + fn nondefault_attributes_elide_default_values() { + let mut gradient = Gradient::from(vec![Color::BLACK, Color::WHITE, Color::RED]); + assert_eq!(gradient.nondefault_positions(false), None); + assert_eq!(gradient.nondefault_midpoints(), None); + + // Explicit attributes that merely restate the defaults still elide + gradient.set_positions(&[0., 0.5, 1.]); + gradient.set_midpoints(&[0.5, 0.5, 0.5]); + assert_eq!(gradient.nondefault_positions(false), None); + assert_eq!(gradient.nondefault_midpoints(), None); + + gradient.set_positions(&[0., 0.25, 1.]); + gradient.set_midpoints(&[0.5, 0.7, 0.5]); + assert_eq!(gradient.nondefault_positions(false), Some(vec![0., 0.25, 1.])); + assert_eq!(gradient.nondefault_midpoints(), Some(vec![0.5, 0.7, 0.5])); + } + + #[test] + fn non_compliant_positions_normalize_for_sampling_and_rendering() { + // Stored positions stay as authored and consumers sort them, with the bake clipped to the range the renderers accept + let mut gradient = Gradient::from(vec![Color::WHITE, Color::BLACK, Color::RED]); + gradient.set_positions(&[1.5, 0.4, -0.5]); + assert_eq!(gradient.positions(false), vec![1.5, 0.4, -0.5]); + + let settings = GradientSettings { + space: GradientSpace::RgbGamma, + ..Default::default() + }; + + let sample_positions: Vec = gradient.interpolated_samples(settings).iter().map(|(position, ..)| *position).collect(); + assert!(sample_positions.windows(2).all(|pair| pair[0] <= pair[1]), "samples must ascend: {sample_positions:?}"); + assert_eq!(sample_positions.first(), Some(&0.)); + assert_eq!(sample_positions.last(), Some(&1.)); + + // The outermost stops lie beyond the range, so the ends interpolate toward them instead of adopting their colors + let start = gradient.evaluate(0., settings); + let end = gradient.evaluate(1., settings); + assert!(max_gamma_channel_deviation(start, Color::RED.lerp_gamma_srgb(&Color::BLACK, 0.5 / 0.9)) < 1e-6, "got {start:?}"); + assert!(max_gamma_channel_deviation(end, Color::BLACK.lerp_gamma_srgb(&Color::WHITE, 0.6 / 1.1)) < 1e-6, "got {end:?}"); + } + + #[test] + fn infinite_positions_clamp_to_the_range_ends() { + let mut gradient = Gradient::from(vec![Color::WHITE, Color::BLACK]); + gradient.set_positions(&[f64::INFINITY, f64::NEG_INFINITY]); + + let sample_positions: Vec = gradient + .interpolated_samples(GradientSettings { + space: GradientSpace::RgbGamma, + ..Default::default() + }) + .iter() + .map(|(position, ..)| *position) + .collect(); + assert_eq!(sample_positions, vec![0., 1.]); + assert_eq!(gradient.evaluate(0., Default::default()), Color::BLACK); + assert_eq!(gradient.evaluate(1., Default::default()), Color::WHITE); + } + + #[test] + fn nan_positions_drop_their_stops_from_sampling() { + let mut gradient = Gradient::from(vec![Color::WHITE, Color::BLACK, Color::RED]); + gradient.set_positions(&[0., f64::NAN, 1.]); + + let sample_positions: Vec = gradient + .interpolated_samples(GradientSettings { + space: GradientSpace::RgbGamma, + ..Default::default() + }) + .iter() + .map(|(position, ..)| *position) + .collect(); + assert_eq!(sample_positions, vec![0., 1.]); + assert_eq!( + gradient.evaluate( + 0.5, + GradientSettings { + space: GradientSpace::RgbLinear, + ..Default::default() + } + ), + Color::WHITE.lerp(&Color::RED, 0.5) + ); + + // A non-finite position is preserved as nondefault so write-back elision cannot resurrect the dropped stop + assert!(gradient.nondefault_positions(false).is_some()); + + // With every position NaN the gradient samples as stopless, painting solid black to signal the upstream bug + let mut gradient = Gradient::from(vec![Color::WHITE, Color::RED]); + gradient.set_positions(&[f64::NAN, f64::NAN]); + assert!( + gradient + .interpolated_samples(GradientSettings { + space: GradientSpace::RgbGamma, + ..Default::default() + }) + .is_empty() + ); + assert_eq!(gradient.evaluate(0.5, Default::default()), Color::BLACK); + } + + #[test] + fn samples_start_at_the_first_stop_without_synthetic_lead_in() { + let mut gradient = Gradient::from(vec![Color::WHITE, Color::BLACK]); + gradient.set_positions(&[0.3, 1.]); + + let samples = gradient.interpolated_samples(GradientSettings { + space: GradientSpace::RgbGamma, + ..Default::default() + }); + assert_eq!(samples[0], (0.3, Color::WHITE, None), "renderers that need a flat lead-in before the first stop add it themselves"); + } + + #[test] + fn nan_midpoints_read_as_linear() { + let mut gradient = Gradient::from(vec![Color::BLACK, Color::WHITE]); + let linear_result = gradient.evaluate(0.25, Default::default()); + + gradient.set_midpoints(&[f64::NAN, f64::NAN]); + assert_eq!(gradient.evaluate(0.25, Default::default()), linear_result); + let no_nan_annotations = gradient + .interpolated_samples(GradientSettings { + space: GradientSpace::RgbGamma, + ..Default::default() + }) + .iter() + .all(|(position, _, midpoint)| position.is_finite() && !midpoint.is_some_and(|midpoint| midpoint.is_nan())); + assert!(no_nan_annotations, "NaN must not escape into rendered sample annotations"); + } + + #[test] + fn gradient_cyclic_serializes_only_when_set_and_rides_the_item_attribute() { + let ramp = GradientRamp::from(Gradient::from(vec![Color::BLACK, Color::WHITE])); + let json = serde_json::to_string(&ramp).unwrap(); + assert!(!json.contains("gradient_cyclic"), "the default non-cyclic flag must not serialize: {json}"); + assert_eq!(serde_json::from_str::(&json).unwrap(), ramp); + + let cyclic = GradientRamp { gradient_cyclic: true, ..ramp }; + let json = serde_json::to_string(&cyclic).unwrap(); + assert!(json.contains(r#""gradient_cyclic":true"#), "an enabled cyclic flag must serialize: {json}"); + assert_eq!(serde_json::from_str::(&json).unwrap(), cyclic); + + let item = Item::::from(cyclic.clone()); + assert!( + item.attribute_cloned_or_default::(ATTR_GRADIENT_CYCLIC), + "the runtime item should carry the cyclic flag as its attribute" + ); + assert_eq!(GradientRamp::from(&item), cyclic); + } + + #[test] + fn cyclic_reserves_the_wrapped_interval_in_the_even_distribution() { + let gradient = Gradient::from(vec![Color::BLACK, Color::WHITE, Color::RED, Color::BLUE]); + assert_eq!(gradient.positions(false), vec![0., 1. / 3., 2. / 3., 1.]); + assert_eq!(gradient.positions(true), vec![0., 0.25, 0.5, 0.75]); + } + + #[test] + fn cyclic_evaluate_wraps_from_the_last_stop_back_to_the_first() { + // Elided cyclic positions put the stops at 0 and 0.5, so the wrapped interval spans the other half + let gradient = Gradient::from(vec![Color::BLACK, Color::WHITE]); + let quarter = gradient.evaluate( + 0.25, + GradientSettings { + cyclic: true, + space: GradientSpace::RgbLinear, + ..Default::default() + }, + ); + let wrap_quarter = gradient.evaluate( + 0.75, + GradientSettings { + cyclic: true, + space: GradientSpace::RgbLinear, + ..Default::default() + }, + ); + assert_eq!(quarter, Color::BLACK.lerp(&Color::WHITE, 0.5)); + assert_eq!(wrap_quarter, Color::WHITE.lerp(&Color::BLACK, 0.5)); + + // A wrapped interval crossing the 1|0 boundary reads as one continuous span, so its two sides agree at the seam + let mut offset = Gradient::from(vec![Color::BLACK, Color::WHITE]); + offset.set_positions(&[0.25, 0.5]); + let at_end = offset.evaluate( + 1., + GradientSettings { + cyclic: true, + space: GradientSpace::RgbLinear, + ..Default::default() + }, + ); + let at_start = offset.evaluate( + 0., + GradientSettings { + cyclic: true, + space: GradientSpace::RgbLinear, + ..Default::default() + }, + ); + assert_eq!(at_end, at_start, "the 1|0 boundary must be seamless"); + assert_eq!(at_end, Color::WHITE.lerp(&Color::BLACK, 2. / 3.)); + } + + #[test] + fn cyclic_wrapped_interval_times_with_the_last_stops_midpoint() { + let mut gradient = Gradient::from(vec![Color::BLACK, Color::WHITE]); + gradient.set_midpoints(&[0.5, 0.25]); + + let expected_t = apply_midpoint(0.5, 0.25); + let mid = gradient.evaluate( + 0.75, + GradientSettings { + cyclic: true, + space: GradientSpace::RgbLinear, + ..Default::default() + }, + ); + assert_eq!(mid, Color::WHITE.lerp(&Color::BLACK, expected_t as f32)); + } + + #[test] + fn cyclic_samples_bake_the_wrap_and_play_back_within_tolerance() { + let mut gradient = Gradient::from(vec![Color::RED, Color::WHITE]); + gradient.set_positions(&[0.25, 0.5]); + gradient.set_midpoints(&[0.5, 0.3]); + + let samples = gradient.interpolated_samples(GradientSettings { + cyclic: true, + space: GradientSpace::OkLab, + ..Default::default() + }); + assert_eq!(samples.first().unwrap().0, 0.); + assert_eq!(samples.last().unwrap().0, 1.); + assert_eq!(samples.first().unwrap().1, samples.last().unwrap().1, "both ends must share the boundary-crossing color"); + assert!(samples.windows(2).all(|pair| pair[0].0 <= pair[1].0), "samples must ascend"); + + // The flat samples' gamma playback must track the true cyclic curve, wrapped interval included + for probe in 0..=400 { + let t = probe as f64 / 400.; + + let after = samples.iter().position(|&(position, ..)| position >= t).unwrap_or(samples.len() - 1); + let playback = if after == 0 { + samples[0].1 + } else { + let (left_position, left_color, _) = samples[after - 1]; + let (right_position, right_color, _) = samples[after]; + let span = right_position - left_position; + if span < 1e-12 { + right_color + } else { + left_color.lerp_gamma_srgb(&right_color, ((t - left_position) / span) as f32) + } + }; + + let true_color = gradient.evaluate( + t, + GradientSettings { + cyclic: true, + space: GradientSpace::OkLab, + ..Default::default() + }, + ); + let deviation = max_gamma_channel_deviation(playback, true_color); + assert!(deviation <= 4. / 255., "playback deviates {:.1}/255 at t={t}", deviation * 255.); + } + } + + #[test] + fn cyclic_even_positions_elide_against_their_own_distribution() { + let mut gradient = Gradient::from(vec![Color::BLACK, Color::WHITE, Color::RED]); + gradient.set_positions(&[0., 1. / 3., 2. / 3.]); + assert!(gradient.nondefault_positions(true).is_none()); + assert!(gradient.nondefault_positions(false).is_some()); + + gradient.elide_default_attributes(true); + assert!(!gradient.has_position_attribute(), "cyclic-even positions should elide under the cyclic default"); + } + + #[test] + fn inserting_into_the_wrapped_interval_inherits_the_wrap_handle_and_samples_its_color() { + let mut gradient = Gradient::from(vec![Color::BLACK, Color::WHITE]); + gradient.set_midpoints(&[0.5, 0.3]); + + // The elided cyclic stops sit at 0 and 0.5, so 0.75 lands mid-wrap + let index = gradient.insert_stop( + 0.75, + GradientSettings { + cyclic: true, + space: GradientSpace::RgbLinear, + ..Default::default() + }, + ); + assert_eq!(index, 2); + assert_eq!(gradient.midpoint(2), 0.3, "the wrap handle should be inherited by the split"); + assert_eq!(gradient.color(2), Some(Color::WHITE.lerp(&Color::BLACK, apply_midpoint(0.5, 0.3) as f32))); + } + + #[test] + fn cyclic_reversal_materializes_the_even_distribution_and_flips_the_wrap_handle() { + let mut gradient = Gradient::from(vec![Color::BLACK, Color::WHITE, Color::RED]); + gradient.set_midpoints(&[0.5, 0.5, 0.25]); + + let reversed = gradient.reversed(true); + let positions = reversed.positions(true); + for (actual, expected) in positions.iter().zip([1. / 3., 2. / 3., 1.]) { + assert!((actual - expected).abs() < 1e-12, "reversed positions should be thirds ending at 1, got {positions:?}"); + } + assert_eq!( + reversed.midpoints(), + vec![0.5, 0.5, 0.75], + "the wrap handle should flip in place while interval midpoints shift and flip" + ); + } + + #[test] + fn shift_rotates_a_cyclic_ramp_back_onto_the_even_distribution() { + let mut gradient = Gradient::from(vec![Color::RED, Color::GREEN, Color::BLUE, Color::WHITE]); + assert!(!gradient.has_position_attribute(), "an even distribution starts elided"); + + gradient.shift_positions(0.25, true); + + let colors: Vec = (0..gradient.len()).filter_map(|index| gradient.color(index)).collect(); + assert_eq!(colors, vec![Color::WHITE, Color::RED, Color::GREEN, Color::BLUE], "a quarter turn should rotate the stops by one"); + assert!(!gradient.has_position_attribute(), "landing back on the even distribution should re-elide the positions"); + } + + #[test] + fn cyclic_shift_keeps_stops_at_both_ends_together_and_in_order() { + // Stops at 0 and 1 occupy one point on the circle, so every shift has to place them together and break the + // resulting tie the same way, or the render flickers as the fraction sweeps + let mut gradient = Gradient::from(vec![Color::RED, Color::BLUE]); + gradient.set_positions(&[0., 1.]); + + // Decimal steps, as a slider produces them, since a dyadic fraction would wrap exactly either way + for step in 1..100 { + let mut shifted = gradient.clone(); + shifted.shift_positions(step as f64 * 0.01, true); + + let positions = shifted.positions(true); + assert_eq!(positions[0], positions[1], "both ends should land on an identical position, got {positions:?}"); + assert_eq!(shifted.color(0), Some(Color::RED), "the tie should keep the original stop order"); + } + } + + #[test] + fn stops_shifted_out_of_range_sample_through_instead_of_piling_at_the_edge() { + let settings = GradientSettings { + space: GradientSpace::RgbGamma, + ..Default::default() + }; + + let mut gradient = Gradient::from(vec![Color::RED, Color::GREEN, Color::BLUE]); + gradient.shift_positions(-0.6, false); + + // The red stop slid to -0.6 and the green to -0.1, so the range's start lands a fifth of the way from green to blue + let expected = Color::GREEN.lerp_gamma_srgb(&Color::BLUE, 0.2); + let edge = gradient.evaluate(0., settings); + assert!( + max_gamma_channel_deviation(edge, expected) < 1e-6, + "the start should interpolate through the stops that slid out, got {edge:?}" + ); + + let samples = gradient.interpolated_samples(settings); + assert!( + samples.iter().all(|&(position, ..)| (0. ..=1.).contains(&position)), + "the bake should carry no offsets outside the range" + ); + let &(first_position, first_color, _) = samples.first().expect("a three stop ramp bakes samples"); + assert_eq!(first_position, 0.); + assert!( + max_gamma_channel_deviation(first_color, expected) < SAMPLE_THRESHOLD, + "the baked start should match the sampled start rather than the stop that slid out, got {first_color:?}" + ); + } + + #[test] + fn shift_translates_a_non_cyclic_ramp_and_stays_reversible() { + let mut gradient = Gradient::from(vec![Color::RED, Color::GREEN, Color::BLUE]); + + gradient.shift_positions(0.25, false); + assert_eq!(gradient.positions(false), vec![0.25, 0.75, 1.25], "stops should slide past the end rather than wrapping to the front"); + let colors: Vec = (0..gradient.len()).filter_map(|index| gradient.color(index)).collect(); + assert_eq!(colors, vec![Color::RED, Color::GREEN, Color::BLUE], "a translation should leave the stop order alone"); + + gradient.shift_positions(-0.25, false); + assert_eq!( + gradient.positions(false), + vec![0., 0.5, 1.], + "the out-of-range position should survive so shifting back restores the ramp" + ); + assert!(!gradient.has_position_attribute(), "landing back on the even distribution should re-elide the positions"); + } + + #[test] + fn shift_carries_midpoints_with_their_stops_and_ignores_whole_turns() { + let mut gradient = Gradient::from(vec![Color::RED, Color::GREEN, Color::BLUE, Color::WHITE]); + gradient.set_midpoints(&[0.8, 0.5, 0.5, 0.5]); + + let untouched = gradient.clone(); + gradient.shift_positions(1., true); + assert_eq!(gradient, untouched, "a whole turn should leave the ramp exactly as it was"); + + gradient.shift_positions(0.25, true); + assert_eq!(gradient.color(1), Some(Color::RED)); + assert_eq!(gradient.midpoints(), vec![0.5, 0.8, 0.5, 0.5], "red's midpoint should follow it to its new index"); + } + + #[test] + fn stretch_spreads_stops_about_the_pivot_and_stays_reversible() { + let mut gradient = Gradient::from(vec![Color::RED, Color::GREEN, Color::BLUE]); + + gradient.stretch_positions(2., 0.5, false); + assert_eq!(gradient.positions(false), vec![-0.5, 0.5, 1.5], "the stop on the pivot should stay put while the rest spread out"); + let colors: Vec = (0..gradient.len()).filter_map(|index| gradient.color(index)).collect(); + assert_eq!(colors, vec![Color::RED, Color::GREEN, Color::BLUE], "a positive factor should leave the stop order alone"); + + gradient.stretch_positions(0.5, 0.5, false); + assert_eq!( + gradient.positions(false), + vec![0., 0.5, 1.], + "the out-of-range positions should survive so the reciprocal restores the ramp" + ); + assert!(!gradient.has_position_attribute(), "landing back on the even distribution should re-elide the positions"); + } + + #[test] + fn negative_stretch_matches_reversal_when_mirrored_about_the_middle() { + let mut gradient = Gradient::from(vec![Color::RED, Color::GREEN, Color::BLUE]); + gradient.set_midpoints(&[0.25, 0.125, 0.5]); + + let mut mirrored = gradient.clone(); + mirrored.stretch_positions(-1., 0.5, false); + + assert_eq!(mirrored, gradient.reversed(false), "mirroring about the middle is exactly a reversal"); + assert_eq!( + mirrored.midpoints(), + vec![0.875, 0.75, 0.5], + "each interval's midpoint should flip and move to the stop now preceding it" + ); + } + + #[test] + fn negative_stretch_mirrors_across_an_off_center_pivot() { + let mut gradient = Gradient::from(vec![Color::RED, Color::GREEN, Color::BLUE]); + + gradient.stretch_positions(-1., 0.25, false); + + let colors: Vec = (0..gradient.len()).filter_map(|index| gradient.color(index)).collect(); + assert_eq!(colors, vec![Color::BLUE, Color::GREEN, Color::RED], "mirroring should reverse the stop order"); + assert_eq!( + gradient.positions(false), + vec![-0.5, 0., 0.5], + "each stop should land as far from the pivot as it started, on the other side" + ); + } + + #[test] + fn cyclic_stretch_mirrors_around_the_circle_and_re_elides() { + let mut gradient = Gradient::from(vec![Color::RED, Color::GREEN, Color::BLUE, Color::WHITE]); + assert!(!gradient.has_position_attribute(), "an even distribution starts elided"); + + // Mirroring about the ramp's start sends every other stop the long way around the loop + gradient.stretch_positions(-1., 0., true); + + let colors: Vec = (0..gradient.len()).filter_map(|index| gradient.color(index)).collect(); + assert_eq!( + colors, + vec![Color::RED, Color::WHITE, Color::BLUE, Color::GREEN], + "the stop on the pivot should stay while the rest wrap past it" + ); + assert!(!gradient.has_position_attribute(), "landing back on the even distribution should re-elide the positions"); + } + + #[test] + fn a_lone_stop_shifted_out_of_range_still_bakes_inside_it() { + let mut gradient = Gradient::from(vec![Color::RED]); + gradient.shift_positions(2., false); + + let samples = gradient.interpolated_samples(Default::default()); + let positions: Vec = samples.iter().map(|(position, ..)| *position).collect(); + assert!( + positions.iter().all(|position| (0. ..=1.).contains(position)), + "renderers only accept offsets from 0 to 1, got {positions:?}" + ); + assert_eq!(samples.first().map(|(_, color, _)| *color), Some(Color::RED), "the lone stop's color should still fill the ramp"); + } +} diff --git a/node-graph/libraries/vector-types/src/lib.rs b/node-graph/libraries/vector-types/src/lib.rs index 42b24aea4c..b9d11f697f 100644 --- a/node-graph/libraries/vector-types/src/lib.rs +++ b/node-graph/libraries/vector-types/src/lib.rs @@ -4,15 +4,13 @@ extern crate log; pub mod gradient; pub mod markers; pub mod math; -pub mod subpath; pub mod vector; // Re-export commonly used types at the crate root pub use core_types as gcore; -pub use gradient::{GradientSpreadMethod, GradientStop, GradientStops, GradientType}; -pub use markers::{ATTR_EDITOR_CLICK_TARGET, ATTR_GRADIENT_TYPE, ATTR_SPREAD_METHOD}; -pub use math::{QuadExt, RectExt}; -pub use subpath::Subpath; +pub use gradient::{Gradient, GradientForm, GradientHueDirection, GradientInterpolation, GradientRamp, GradientSettings, GradientSpace, GradientSpread, GradientStop}; +pub use markers::ATTR_EDITOR_CLICK_TARGET; +pub use math::QuadExt; pub use vector::Vector; pub use vector::reference_point::ReferencePoint; diff --git a/node-graph/libraries/vector-types/src/markers.rs b/node-graph/libraries/vector-types/src/markers.rs index 951bbeccce..bea7b63cfd 100644 --- a/node-graph/libraries/vector-types/src/markers.rs +++ b/node-graph/libraries/vector-types/src/markers.rs @@ -1,13 +1,44 @@ //! Attribute markers whose value types live in this crate, with their name //! constants for the string-keyed legacy readers and writers. +//! +//! The gradient names follow master's vocabulary: `gradient_form` for the +//! shape and `gradient_spread` for the endpoint behavior, replacing the +//! earlier `gradient_type` and `spread_method`. use core_types::attribute::Attribute; core_types::attribute! { - /// Gradient's spread behavior past its endpoints (`Pad`, `Reflect`, or `Repeat`). - pub SpreadMethod("spread_method"): crate::gradient::GradientSpreadMethod; + /// Gradient's spread behavior past its endpoints (`Pad`, `Reflect`, `Repeat`, or `Clear`). + pub GradientSpread("gradient_spread"): crate::gradient::GradientSpread; /// Gradient's shape (`Linear` or `Radial`). - pub GradientType("gradient_type"): crate::gradient::GradientType; + pub GradientForm("gradient_form"): crate::gradient::GradientForm; + /// The color space a gradient's stops interpolate in. + pub GradientSpace("gradient_space"): crate::gradient::GradientSpace; + /// Which way around the hue wheel the stops interpolate when the space is polar. + pub GradientHueDirection("gradient_hue_direction"): crate::gradient::GradientHueDirection; + /// The path a gradient's stops interpolate along, so whether the ramp jumps, + /// turns corners, or flows smoothly through them. + pub GradientInterpolation("gradient_interpolation"): crate::gradient::GradientInterpolation; + /// Whether the stop list is a cycle, so a wrapped interval interpolates from the + /// last stop through the 1|0 boundary back to the first. + pub GradientCyclic("gradient_cyclic"): bool; + /// A gradient stop's position from 0 to 1, on the `List` inside a `Gradient`. + /// An absent column distributes the stops evenly. + pub Position("position"): f64; + /// A gradient stop's midpoint factor from 0 to 1 across the distance to the next stop. + pub Midpoint("midpoint"): f64 = 0.5; + /// A stroke coverage's line thickness. + pub Weight("weight"): f64; + /// A stroke coverage's dash phase offset distance. + pub DashOffset("dash_offset"): f64; + /// A stroke coverage's line cap. + pub Cap("cap"): crate::vector::style::StrokeCap; + /// A stroke coverage's line join. + pub Join("join"): crate::vector::style::StrokeJoin; + /// A stroke coverage's miter limit threshold. + pub JoinMiterLimit("join_miter_limit"): f64 = 4.; + /// A stroke coverage's alignment across the path. + pub Align("align"): crate::vector::style::StrokeAlign; /// Optional `Vector` that overrides the item's own geometry for click-target generation. /// Used by the 'Text' node for per-glyph bounding-box rectangles so glyphs are selectable /// by clicking anywhere within their bounds, not just the filled letterform. An absent @@ -15,8 +46,20 @@ core_types::attribute! { pub EditorClickTarget("editor:click_target"): Option<&crate::Vector>; } -pub const ATTR_SPREAD_METHOD: &str = SpreadMethod::NAME; -pub const ATTR_GRADIENT_TYPE: &str = GradientType::NAME; +pub const ATTR_GRADIENT_SPREAD: &str = GradientSpread::NAME; +pub const ATTR_GRADIENT_FORM: &str = GradientForm::NAME; +pub const ATTR_GRADIENT_SPACE: &str = GradientSpace::NAME; +pub const ATTR_GRADIENT_HUE_DIRECTION: &str = GradientHueDirection::NAME; +pub const ATTR_GRADIENT_INTERPOLATION: &str = GradientInterpolation::NAME; +pub const ATTR_GRADIENT_CYCLIC: &str = GradientCyclic::NAME; +pub const ATTR_POSITION: &str = Position::NAME; +pub const ATTR_MIDPOINT: &str = Midpoint::NAME; +pub const ATTR_WEIGHT: &str = Weight::NAME; +pub const ATTR_DASH_OFFSET: &str = DashOffset::NAME; +pub const ATTR_CAP: &str = Cap::NAME; +pub const ATTR_JOIN: &str = Join::NAME; +pub const ATTR_JOIN_MITER_LIMIT: &str = JoinMiterLimit::NAME; +pub const ATTR_ALIGN: &str = Align::NAME; pub const ATTR_EDITOR_CLICK_TARGET: &str = EditorClickTarget::NAME; #[cfg(test)] @@ -27,8 +70,8 @@ mod tests { #[test] fn the_census_carries_this_crates_names() { - assert_eq!(info("gradient_type").unwrap().value_type, TypeId::of::()); - assert_eq!(info("spread_method").unwrap().value_type, TypeId::of::()); + assert_eq!(info("gradient_form").unwrap().value_type, TypeId::of::()); + assert_eq!(info("gradient_spread").unwrap().value_type, TypeId::of::()); assert_eq!(info("editor:click_target").unwrap().value_type, TypeId::of::>()); } @@ -36,4 +79,9 @@ mod tests { fn an_absent_click_target_defaults_to_none() { assert_eq!(::default(), None); } + + #[test] + fn an_absent_midpoint_defaults_to_the_halfway_point() { + assert_eq!(::default(), 0.5); + } } diff --git a/node-graph/libraries/vector-types/src/math/mod.rs b/node-graph/libraries/vector-types/src/math/mod.rs index 3919c71f81..7b1b1dc4c5 100644 --- a/node-graph/libraries/vector-types/src/math/mod.rs +++ b/node-graph/libraries/vector-types/src/math/mod.rs @@ -1,32 +1,13 @@ -use crate::subpath::Bezier; use crate::vector::misc::dvec2_to_point; use core_types::math::quad::Quad; -use core_types::math::rect::Rect; use kurbo::{Line, PathSeg}; pub trait QuadExt { - /// Get all the edges in the rect as linear bezier curves - fn bezier_lines(&self) -> impl Iterator + '_; fn to_lines(&self) -> impl Iterator; } impl QuadExt for Quad { - fn bezier_lines(&self) -> impl Iterator + '_ { - self.all_edges().into_iter().map(|[start, end]| Bezier::from_linear_dvec2(start, end)) - } - fn to_lines(&self) -> impl Iterator { self.all_edges().into_iter().map(|[start, end]| PathSeg::Line(Line::new(dvec2_to_point(start), dvec2_to_point(end)))) } } - -pub trait RectExt { - /// Get all the edges in the quad as linear bezier curves - fn bezier_lines(&self) -> impl Iterator + '_; -} - -impl RectExt for Rect { - fn bezier_lines(&self) -> impl Iterator + '_ { - self.edges().into_iter().map(|[start, end]| Bezier::from_linear_dvec2(start, end)) - } -} diff --git a/node-graph/libraries/vector-types/src/subpath/consts.rs b/node-graph/libraries/vector-types/src/subpath/consts.rs deleted file mode 100644 index 300407f526..0000000000 --- a/node-graph/libraries/vector-types/src/subpath/consts.rs +++ /dev/null @@ -1,4 +0,0 @@ -// Implementation constants - -/// Constant used to determine if `f64`s are equivalent. -pub const MAX_ABSOLUTE_DIFFERENCE: f64 = 1e-3; diff --git a/node-graph/libraries/vector-types/src/subpath/core.rs b/node-graph/libraries/vector-types/src/subpath/core.rs deleted file mode 100644 index 1a5a12caa0..0000000000 --- a/node-graph/libraries/vector-types/src/subpath/core.rs +++ /dev/null @@ -1,469 +0,0 @@ -use super::consts::*; -use super::*; -use crate::vector::misc::{SpiralType, point_to_dvec2}; -use glam::DVec2; -use kurbo::PathSeg; -use std::f64::consts::TAU; - -pub struct PathSegPoints { - pub p0: DVec2, - pub p1: Option, - pub p2: Option, - pub p3: DVec2, -} - -impl PathSegPoints { - pub fn new(p0: DVec2, p1: Option, p2: Option, p3: DVec2) -> Self { - Self { p0, p1, p2, p3 } - } -} - -pub fn pathseg_points(segment: PathSeg) -> PathSegPoints { - match segment { - PathSeg::Line(line) => PathSegPoints::new(point_to_dvec2(line.p0), None, None, point_to_dvec2(line.p1)), - PathSeg::Quad(quad) => PathSegPoints::new(point_to_dvec2(quad.p0), None, Some(point_to_dvec2(quad.p1)), point_to_dvec2(quad.p2)), - PathSeg::Cubic(cube) => PathSegPoints::new(point_to_dvec2(cube.p0), Some(point_to_dvec2(cube.p1)), Some(point_to_dvec2(cube.p2)), point_to_dvec2(cube.p3)), - } -} - -/// Functionality relating to core `Subpath` operations, such as constructors and `iter`. -impl Subpath { - /// Create a new `Subpath` using a list of [ManipulatorGroup]s. - /// A `Subpath` with less than 2 [ManipulatorGroup]s may not be closed. - #[track_caller] - pub fn new(manipulator_groups: Vec>, closed: bool) -> Self { - assert!(!closed || !manipulator_groups.is_empty(), "A closed Subpath must contain more than 0 ManipulatorGroups."); - Self { manipulator_groups, closed } - } - - /// Create a `Subpath` consisting of 2 manipulator groups from a `Bezier`. - pub fn from_bezier(segment: PathSeg) -> Self { - let PathSegPoints { p0, p1, p2, p3 } = pathseg_points(segment); - Subpath::new(vec![ManipulatorGroup::new(p0, None, p1), ManipulatorGroup::new(p3, p2, None)], false) - } - - /// Creates a subpath from a slice of [Bezier]. When two consecutive Beziers do not share an end and start point, this function - /// resolves the discrepancy by simply taking the start-point of the second Bezier as the anchor of the Manipulator Group. - pub fn from_beziers(beziers: &[PathSeg], closed: bool) -> Self { - assert!(!closed || beziers.len() > 1, "A closed Subpath must contain at least 1 Bezier."); - if beziers.is_empty() { - return Subpath::new(vec![], closed); - } - - let beziers: Vec<_> = beziers.iter().map(|b| pathseg_points(*b)).collect(); - - let first = beziers.first().unwrap(); - let mut manipulator_groups = vec![ManipulatorGroup { - anchor: first.p0, - in_handle: None, - out_handle: first.p1, - id: PointId::new(), - }]; - let mut inner_groups: Vec> = beziers - .windows(2) - .map(|bezier_pair| ManipulatorGroup { - anchor: bezier_pair[1].p0, - in_handle: bezier_pair[0].p2, - out_handle: bezier_pair[1].p1, - id: PointId::new(), - }) - .collect::>>(); - manipulator_groups.append(&mut inner_groups); - - let last = beziers.last().unwrap(); - if !closed { - manipulator_groups.push(ManipulatorGroup { - anchor: last.p3, - in_handle: last.p2, - out_handle: None, - id: PointId::new(), - }); - return Subpath::new(manipulator_groups, false); - } - - manipulator_groups[0].in_handle = last.p2; - Subpath::new(manipulator_groups, true) - } - - /// Returns true if the `Subpath` contains no [ManipulatorGroup]. - pub fn is_empty(&self) -> bool { - self.manipulator_groups.is_empty() - } - - /// Returns the number of [ManipulatorGroup]s contained within the `Subpath`. - pub fn len(&self) -> usize { - self.manipulator_groups.len() - } - - /// Returns the number of segments contained within the `Subpath`. - pub fn len_segments(&self) -> usize { - let mut number_of_curves = self.len(); - if !self.closed && number_of_curves > 0 { - number_of_curves -= 1 - } - number_of_curves - } - - /// Returns a copy of the bezier segment at the given segment index, if this segment exists. - pub fn get_segment(&self, segment_index: usize) -> Option { - if segment_index >= self.len_segments() { - return None; - } - Some(self[segment_index].to_bezier(&self[(segment_index + 1) % self.len()])) - } - - /// Returns an iterator of the [Bezier]s along the `Subpath`. - pub fn iter(&self) -> SubpathIter<'_, PointId> { - SubpathIter { - subpath: self, - index: 0, - is_always_closed: false, - } - } - - /// Returns an iterator of the [Bezier]s along the `Subpath` always considering it as a closed subpath. - pub fn iter_closed(&self) -> SubpathIter<'_, PointId> { - SubpathIter { - subpath: self, - index: 0, - is_always_closed: true, - } - } - - /// Returns a slice of the [ManipulatorGroup]s in the `Subpath`. - pub fn manipulator_groups(&self) -> &[ManipulatorGroup] { - &self.manipulator_groups - } - - /// Returns a mutable reference to the [ManipulatorGroup]s in the `Subpath`. - pub fn manipulator_groups_mut(&mut self) -> &mut Vec> { - &mut self.manipulator_groups - } - - /// Returns a vector of all the anchors (DVec2) for this `Subpath`. - pub fn anchors(&self) -> Vec { - self.manipulator_groups().iter().map(|group| group.anchor).collect() - } - - /// Returns if the Subpath is equivalent to a single point. - pub fn is_point(&self) -> bool { - if self.is_empty() { - return false; - } - let point = self.manipulator_groups[0].anchor; - self.manipulator_groups - .iter() - .all(|manipulator_group| manipulator_group.anchor.abs_diff_eq(point, MAX_ABSOLUTE_DIFFERENCE)) - } - - pub fn from_anchors(anchor_positions: impl IntoIterator, closed: bool) -> Self { - Self::new(anchor_positions.into_iter().map(|anchor| ManipulatorGroup::new_anchor(anchor)).collect(), closed) - } - - /// Constructs a rectangle with `corner1` and `corner2` as the two corners. - pub fn new_rectangle(corner1: DVec2, corner2: DVec2) -> Self { - Self::from_anchors([corner1, DVec2::new(corner2.x, corner1.y), corner2, DVec2::new(corner1.x, corner2.y)], true) - } - - /// Constructs a rounded rectangle with `corner1` and `corner2` as the two corners and `corner_radii` as the radii of the corners: `[top_left, top_right, bottom_right, bottom_left]`. - pub fn new_rounded_rectangle(corner1: DVec2, corner2: DVec2, corner_radii: [f64; 4]) -> Self { - if corner_radii.iter().all(|radii| radii.abs() < f64::EPSILON * 100.) { - return Self::new_rectangle(corner1, corner2); - } - - use std::f64::consts::{FRAC_1_SQRT_2, PI}; - - let new_arc = |center: DVec2, corner: DVec2, radius: f64| -> Vec> { - let point1 = center + DVec2::from_angle(-PI * 0.25).rotate(corner - center) * FRAC_1_SQRT_2; - let point2 = center + DVec2::from_angle(PI * 0.25).rotate(corner - center) * FRAC_1_SQRT_2; - if radius == 0. { - return vec![ManipulatorGroup::new_anchor(point1), ManipulatorGroup::new_anchor(point2)]; - } - - // Constant from https://pomax.github.io/bezierinfo/#circles_cubic - const HANDLE_OFFSET_FACTOR: f64 = 0.551784777779014; - let handle_offset = radius * HANDLE_OFFSET_FACTOR; - vec![ - ManipulatorGroup::new(point1, None, Some(point1 + handle_offset * (corner - point1).normalize())), - ManipulatorGroup::new(point2, Some(point2 + handle_offset * (corner - point2).normalize()), None), - ] - }; - Self::new( - [ - new_arc(DVec2::new(corner1.x + corner_radii[0], corner1.y + corner_radii[0]), DVec2::new(corner1.x, corner1.y), corner_radii[0]), - new_arc(DVec2::new(corner2.x - corner_radii[1], corner1.y + corner_radii[1]), DVec2::new(corner2.x, corner1.y), corner_radii[1]), - new_arc(DVec2::new(corner2.x - corner_radii[2], corner2.y - corner_radii[2]), DVec2::new(corner2.x, corner2.y), corner_radii[2]), - new_arc(DVec2::new(corner1.x + corner_radii[3], corner2.y - corner_radii[3]), DVec2::new(corner1.x, corner2.y), corner_radii[3]), - ] - .concat(), - true, - ) - } - - /// Constructs an ellipse with `corner1` and `corner2` as the two corners of the bounding box. - pub fn new_ellipse(corner1: DVec2, corner2: DVec2) -> Self { - let size = (corner1 - corner2).abs(); - let center = (corner1 + corner2) / 2.; - let top = DVec2::new(center.x, corner1.y); - let bottom = DVec2::new(center.x, corner2.y); - let left = DVec2::new(corner1.x, center.y); - let right = DVec2::new(corner2.x, center.y); - - // Based on https://pomax.github.io/bezierinfo/#circles_cubic - const HANDLE_OFFSET_FACTOR: f64 = 0.551784777779014; - let handle_offset = size * HANDLE_OFFSET_FACTOR * 0.5; - - let manipulator_groups = vec![ - ManipulatorGroup::new(top, Some(top - handle_offset * DVec2::X), Some(top + handle_offset * DVec2::X)), - ManipulatorGroup::new(right, Some(right - handle_offset * DVec2::Y), Some(right + handle_offset * DVec2::Y)), - ManipulatorGroup::new(bottom, Some(bottom + handle_offset * DVec2::X), Some(bottom - handle_offset * DVec2::X)), - ManipulatorGroup::new(left, Some(left + handle_offset * DVec2::Y), Some(left - handle_offset * DVec2::Y)), - ]; - Self::new(manipulator_groups, true) - } - - /// Constructs an arc by a `radius`, `angle_start` and `angle_size`. Angles must be in radians. Slice option makes it look like pie or pacman. - pub fn new_arc(radius: f64, start_angle: f64, sweep_angle: f64, arc_type: ArcType) -> Self { - // Prevents glitches from numerical imprecision that have been observed during animation playback after about a minute - let start_angle = start_angle % (std::f64::consts::TAU * 2.); - let sweep_angle = sweep_angle % (std::f64::consts::TAU * 2.); - - let original_start_angle = start_angle; - let sweep_angle_sign = sweep_angle.signum(); - - let mut start_angle = 0.; - let mut sweep_angle = sweep_angle.abs(); - - if ((sweep_angle / std::f64::consts::TAU).floor() as u32).is_multiple_of(2) { - sweep_angle %= std::f64::consts::TAU; - } else { - start_angle = sweep_angle % std::f64::consts::TAU; - sweep_angle = std::f64::consts::TAU - start_angle; - } - - sweep_angle *= sweep_angle_sign; - start_angle *= sweep_angle_sign; - start_angle += original_start_angle; - - let closed = arc_type == ArcType::Closed; - let slice = arc_type == ArcType::PieSlice; - - let center = DVec2::new(0., 0.); - let segments = (sweep_angle.abs() / (std::f64::consts::PI / 4.)).ceil().max(1.) as usize; - let step = sweep_angle / segments as f64; - let factor = 4. / 3. * (step / 2.).sin() / (1. + (step / 2.).cos()); - - let mut manipulator_groups = Vec::with_capacity(segments); - let mut prev_in_handle = None; - let mut prev_end = DVec2::new(0., 0.); - - for i in 0..segments { - let start_angle = start_angle + step * i as f64; - let end_angle = start_angle + step; - let start_vec = DVec2::from_angle(start_angle); - let end_vec = DVec2::from_angle(end_angle); - - let start = center + radius * start_vec; - let end = center + radius * end_vec; - - let handle_start = start + start_vec.perp() * radius * factor; - let handle_end = end - end_vec.perp() * radius * factor; - - manipulator_groups.push(ManipulatorGroup::new(start, prev_in_handle, Some(handle_start))); - prev_in_handle = Some(handle_end); - prev_end = end; - } - manipulator_groups.push(ManipulatorGroup::new(prev_end, prev_in_handle, None)); - - if slice { - manipulator_groups.push(ManipulatorGroup::new(center, None, None)); - } - - Self::new(manipulator_groups, closed || slice) - } - - /// Constructs a regular polygon (ngon). Based on `sides` and `radius`, which is the distance from the center to any vertex. - pub fn new_regular_polygon(center: DVec2, sides: u64, radius: f64) -> Self { - let sides = sides.max(3); - let angle_increment = std::f64::consts::TAU / (sides as f64); - let anchor_positions = (0..sides).map(|i| { - let angle = (i as f64) * angle_increment - std::f64::consts::FRAC_PI_2; - let center = center + DVec2::ONE * radius; - DVec2::new(center.x + radius * f64::cos(angle), center.y + radius * f64::sin(angle)) * 0.5 - }); - Self::from_anchors(anchor_positions, true) - } - - /// Constructs a star polygon (n-star). See [new_regular_polygon], but with interspersed vertices at an `inner_radius`. - pub fn new_star_polygon(center: DVec2, sides: u64, radius: f64, inner_radius: f64) -> Self { - let sides = sides.max(2); - let angle_increment = 0.5 * std::f64::consts::TAU / (sides as f64); - let anchor_positions = (0..sides * 2).map(|i| { - let angle = (i as f64) * angle_increment - std::f64::consts::FRAC_PI_2; - let center = center + DVec2::ONE * radius; - let r = if i % 2 == 0 { radius } else { inner_radius }; - DVec2::new(center.x + r * f64::cos(angle), center.y + r * f64::sin(angle)) * 0.5 - }); - Self::from_anchors(anchor_positions, true) - } - - /// Constructs a line from `p1` to `p2` - pub fn new_line(p1: DVec2, p2: DVec2) -> Self { - Self::from_anchors([p1, p2], false) - } - - /// Constructs an arrow shape from start and end points with parametric control over dimensions - pub fn new_arrow(start: DVec2, end: DVec2, shaft_width: f64, head_width: f64, head_length: f64) -> Self { - let delta = end - start; - let length = delta.length(); - - if length < 1e-10 { - // Degenerate case: return a point - return Self::from_anchors([start], true); - } - - let direction = delta / length; - let perpendicular = DVec2::new(-direction.y, direction.x); - - let half_shaft = shaft_width * 0.5; - let half_head = head_width * 0.5; - let head_base_distance = (length - head_length).max(0.); - let head_base = start + direction * head_base_distance; - - // Arrow path starts at the tail, traces around the shape, and returns to the tail - let anchors = [ - start, // Tail center (origin) - start + perpendicular * half_shaft, // Tail top - head_base + perpendicular * half_shaft, // Head base top (shaft) - head_base + perpendicular * half_head, // Head base top (wide) - end, // Tip - head_base - perpendicular * half_head, // Head base bottom (wide) - head_base - perpendicular * half_shaft, // Head base bottom (shaft) - start - perpendicular * half_shaft, // Tail bottom - ]; - - Self::from_anchors(anchors, true) - } - - pub fn new_spiral(a: f64, outer_radius: f64, turns: f64, start_angle: f64, delta_theta: f64, spiral_type: SpiralType) -> Self { - let mut manipulator_groups = Vec::new(); - let mut prev_in_handle = None; - let theta_end = turns * std::f64::consts::TAU + start_angle; - - let a = if spiral_type == SpiralType::Logarithmic { a.max(1e-10) } else { a }; - let b = calculate_growth_factor(a, turns, outer_radius, spiral_type); - - let mut theta = start_angle; - while theta < theta_end { - let theta_next = f64::min(theta + delta_theta, theta_end); - - let p0 = spiral_point(theta, a, b, spiral_type); - let p3 = spiral_point(theta_next, a, b, spiral_type); - let t0 = spiral_tangent(theta, a, b, spiral_type); - let t1 = spiral_tangent(theta_next, a, b, spiral_type); - - let arc_len = spiral_arc_length(theta, theta_next, a, b, spiral_type); - let d = arc_len / 3.; - - let p1 = p0 + d * t0; - let p2 = p3 - d * t1; - - manipulator_groups.push(ManipulatorGroup::new(p0, prev_in_handle, Some(p1))); - prev_in_handle = Some(p2); - - // If final segment, end with anchor at theta_end - if (theta_next - theta_end).abs() < f64::EPSILON { - manipulator_groups.push(ManipulatorGroup::new(p3, prev_in_handle, None)); - break; - } - - theta = theta_next; - } - - Self::new(manipulator_groups, false) - } -} - -pub fn calculate_growth_factor(a: f64, turns: f64, outer_radius: f64, spiral_type: SpiralType) -> f64 { - match spiral_type { - SpiralType::Archimedean => { - let total_theta = turns * TAU; - (outer_radius - a) / total_theta - } - SpiralType::Logarithmic => { - let total_theta = turns * TAU; - ((outer_radius.abs() / a).ln()) / total_theta - } - } -} - -/// Returns a point on the given spiral type at angle `theta`. -pub fn spiral_point(theta: f64, a: f64, b: f64, spiral_type: SpiralType) -> DVec2 { - match spiral_type { - SpiralType::Archimedean => archimedean_spiral_point(theta, a, b), - SpiralType::Logarithmic => log_spiral_point(theta, a, b), - } -} - -/// Returns the tangent direction at angle `theta` for the given spiral type. -pub fn spiral_tangent(theta: f64, a: f64, b: f64, spiral_type: SpiralType) -> DVec2 { - match spiral_type { - SpiralType::Archimedean => archimedean_spiral_tangent(theta, a, b), - SpiralType::Logarithmic => log_spiral_tangent(theta, a, b), - } -} - -/// Computes arc length between two angles for the given spiral type. -pub fn spiral_arc_length(theta_start: f64, theta_end: f64, a: f64, b: f64, spiral_type: SpiralType) -> f64 { - match spiral_type { - SpiralType::Archimedean => archimedean_spiral_arc_length(theta_start, theta_end, a, b), - SpiralType::Logarithmic => log_spiral_arc_length(theta_start, theta_end, a, b), - } -} - -/// Returns a point on a logarithmic spiral at angle `theta`. -pub fn log_spiral_point(theta: f64, a: f64, b: f64) -> DVec2 { - let r = a * (b * theta).exp(); // a * e^(bΞΈ) - DVec2::new(r * theta.cos(), -r * theta.sin()) -} - -/// Computes arc length along a logarithmic spiral between two angles. -pub fn log_spiral_arc_length(theta_start: f64, theta_end: f64, a: f64, b: f64) -> f64 { - let factor = (1. + b * b).sqrt(); - (a / b) * factor * ((b * theta_end).exp() - (b * theta_start).exp()) -} - -/// Returns the tangent direction of a logarithmic spiral at angle `theta`. -pub fn log_spiral_tangent(theta: f64, a: f64, b: f64) -> DVec2 { - let r = a * (b * theta).exp(); - let dx = r * (b * theta.cos() - theta.sin()); - let dy = r * (b * theta.sin() + theta.cos()); - - DVec2::new(dx, -dy).normalize_or(DVec2::X) -} - -/// Returns a point on an Archimedean spiral at angle `theta`. -pub fn archimedean_spiral_point(theta: f64, a: f64, b: f64) -> DVec2 { - let r = a + b * theta; - DVec2::new(r * theta.cos(), -r * theta.sin()) -} - -/// Returns the tangent direction of an Archimedean spiral at angle `theta`. -pub fn archimedean_spiral_tangent(theta: f64, a: f64, b: f64) -> DVec2 { - let r = a + b * theta; - let dx = b * theta.cos() - r * theta.sin(); - let dy = b * theta.sin() + r * theta.cos(); - DVec2::new(dx, -dy).normalize_or(DVec2::X) -} - -/// Computes arc length along an Archimedean spiral between two angles. -pub fn archimedean_spiral_arc_length(theta_start: f64, theta_end: f64, a: f64, b: f64) -> f64 { - archimedean_spiral_arc_length_origin(theta_end, a, b) - archimedean_spiral_arc_length_origin(theta_start, a, b) -} - -/// Computes arc length from origin to a point on Archimedean spiral at angle `theta`. -pub fn archimedean_spiral_arc_length_origin(theta: f64, a: f64, b: f64) -> f64 { - let r = a + b * theta; - let sqrt_term = (r * r + b * b).sqrt(); - (r * sqrt_term + b * b * ((r + sqrt_term).ln())) / (2. * b) -} diff --git a/node-graph/libraries/vector-types/src/subpath/lookup.rs b/node-graph/libraries/vector-types/src/subpath/lookup.rs deleted file mode 100644 index b3dc49e222..0000000000 --- a/node-graph/libraries/vector-types/src/subpath/lookup.rs +++ /dev/null @@ -1,128 +0,0 @@ -use super::consts::MAX_ABSOLUTE_DIFFERENCE; -use super::*; -use crate::vector::algorithms::bezpath_algorithms::pathseg_length_centroid_and_length; -use crate::vector::algorithms::intersection::{filtered_all_segment_intersections, pathseg_self_intersections}; -use core_types::math::polynomial::pathseg_to_parametric_polynomial; -use glam::DVec2; - -impl Subpath { - /// Returns a list of `t` values that correspond to all the self intersection points of the subpath always considering it as a closed subpath. The index and `t` value of both will be returned that corresponds to a point. - /// The points will be sorted based on their index and `t` repsectively. - /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. - /// - `minimum_separation`: the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. - /// - /// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two - /// - /// **NOTE**: if an intersection were to occur within an `error` distance away from an anchor point, the algorithm will filter that intersection out. - pub fn all_self_intersections(&self, accuracy: Option, minimum_separation: Option) -> Vec<(usize, f64)> { - let mut intersections_vec = Vec::new(); - let err = accuracy.unwrap_or(MAX_ABSOLUTE_DIFFERENCE); - let num_curves = self.len(); - // TODO: optimization opportunity - this for-loop currently compares all intersections with all curve-segments in the subpath list - self.iter_closed().enumerate().for_each(|(i, other)| { - intersections_vec.extend(pathseg_self_intersections(other, accuracy, minimum_separation).iter().flat_map(|value| [(i, value.0), (i, value.1)])); - self.iter_closed().enumerate().skip(i + 1).for_each(|(j, curve)| { - intersections_vec.extend( - filtered_all_segment_intersections(curve, other, accuracy, minimum_separation) - .iter() - .filter(|&value| (j != i + 1 || value.0 > err || (1. - value.1) > err) && (j != num_curves - 1 || i != 0 || value.1 > err || (1. - value.0) > err)) - .flat_map(|value| [(j, value.0), (i, value.1)]), - ); - }); - }); - - intersections_vec.sort_by(|a, b| a.partial_cmp(b).unwrap()); - - intersections_vec - } - - /// Return the area centroid, together with the area, of the `Subpath` always considering it as a closed subpath. The area will always be a positive value. - /// - /// The area centroid is the center of mass for the area of a solid shape's interior. - /// An infinitely flat material forming the subpath's closed shape would balance at this point. - /// - /// It will return `None` if no manipulator is present. If the area is less than `error`, it will return `Some((DVec2::NAN, 0.))`. - /// - /// Because the calculation of area and centroid for self-intersecting path requires finding the intersections, the following parameters are used: - /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. - /// - `minimum_separation` - the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. - /// - /// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two. - /// - /// **NOTE**: if an intersection were to occur within an `error` distance away from an anchor point, the algorithm will filter that intersection out. - pub fn area_centroid_and_area(&self, error: Option, minimum_separation: Option) -> Option<(DVec2, f64)> { - let all_intersections = self.all_self_intersections(error, minimum_separation); - let mut current_sign: f64 = 1.; - - let (x_sum, y_sum, area) = self - .iter_closed() - .enumerate() - .map(|(index, bezier)| { - let (f_x, f_y) = pathseg_to_parametric_polynomial(bezier); - let (f_x, f_y) = (f_x.as_size::<10>().unwrap(), f_y.as_size::<10>().unwrap()); - let f_y_prime = f_y.derivative(); - let f_x_prime = f_x.derivative(); - let f_xy = &f_x * &f_y; - - let mut x_part = &f_xy * &f_x_prime; - let mut y_part = &f_xy * &f_y_prime; - let mut area_part = &f_x * &f_y_prime; - x_part.antiderivative_mut(); - y_part.antiderivative_mut(); - area_part.antiderivative_mut(); - - let mut curve_sum_x = -current_sign * x_part.eval(0.); - let mut curve_sum_y = -current_sign * y_part.eval(0.); - let mut curve_sum_area = -current_sign * area_part.eval(0.); - for (_, t) in all_intersections.iter().filter(|(i, _)| *i == index) { - curve_sum_x += 2. * current_sign * x_part.eval(*t); - curve_sum_y += 2. * current_sign * y_part.eval(*t); - curve_sum_area += 2. * current_sign * area_part.eval(*t); - current_sign *= -1.; - } - curve_sum_x += current_sign * x_part.eval(1.); - curve_sum_y += current_sign * y_part.eval(1.); - curve_sum_area += current_sign * area_part.eval(1.); - - (-curve_sum_x, curve_sum_y, curve_sum_area) - }) - .reduce(|(x1, y1, area1), (x2, y2, area2)| (x1 + x2, y1 + y2, area1 + area2))?; - - if area.abs() < error.unwrap_or(MAX_ABSOLUTE_DIFFERENCE) { - return Some((DVec2::NAN, 0.)); - } - - Some((DVec2::new(x_sum / area, y_sum / area), area.abs())) - } - - /// Return the approximation of the length centroid, together with the length, of the `Subpath`. - /// - /// The length centroid is the center of mass for the arc length of the solid shape's perimeter. - /// An infinitely thin wire forming the subpath's closed shape would balance at this point. - /// - /// It will return `None` if no manipulator is present. - /// - `accuracy` is used to approximate the curve. - /// - `always_closed` is to consider the subpath as closed always. - pub fn length_centroid_and_length(&self, accuracy: Option, always_closed: bool) -> Option<(DVec2, f64)> { - if always_closed { self.iter_closed() } else { self.iter() } - .map(|bezier| pathseg_length_centroid_and_length(bezier, accuracy)) - .map(|(centroid, length)| (centroid * length, length)) - .reduce(|(centroid_part1, length1), (centroid_part2, length2)| (centroid_part1 + centroid_part2, length1 + length2)) - .map(|(centroid_part, length)| (centroid_part / length, length)) - .map(|(centroid_part, length)| (DVec2::new(centroid_part.x, centroid_part.y), length)) - } -} - -#[cfg(test)] -mod test_centroid { - use crate::vector::PointId; - - use super::*; - #[test] - fn centroid_rect() { - let rect = Subpath::::new_rectangle(DVec2::new(100., 100.), DVec2::new(300., 200.)); - let (center, area) = rect.area_centroid_and_area(Some(1e-3), Some(1e-3)).unwrap(); - assert_eq!(area, 200. * 100.); - assert_eq!(center, DVec2::new(200., 150.)) - } -} diff --git a/node-graph/libraries/vector-types/src/subpath/manipulators.rs b/node-graph/libraries/vector-types/src/subpath/manipulators.rs deleted file mode 100644 index 6dad21d6d1..0000000000 --- a/node-graph/libraries/vector-types/src/subpath/manipulators.rs +++ /dev/null @@ -1,52 +0,0 @@ -// use super::consts::MAX_ABSOLUTE_DIFFERENCE; -// use super::utils::{SubpathTValue}; -use super::*; - -impl Subpath { - /// Get whether the subpath is closed. - pub fn closed(&self) -> bool { - self.closed - } - - /// Set whether the subpath is closed. - pub fn set_closed(&mut self, new_closed: bool) { - self.closed = new_closed; - } - - /// Access a [ManipulatorGroup] from a PointId. - pub fn manipulator_from_id(&self, id: PointId) -> Option<&ManipulatorGroup> { - self.manipulator_groups.iter().find(|manipulator_group| manipulator_group.id == id) - } - - /// Access a mutable [ManipulatorGroup] from a PointId. - pub fn manipulator_mut_from_id(&mut self, id: PointId) -> Option<&mut ManipulatorGroup> { - self.manipulator_groups.iter_mut().find(|manipulator_group| manipulator_group.id == id) - } - - /// Access the index of a [ManipulatorGroup] from a PointId. - pub fn manipulator_index_from_id(&self, id: PointId) -> Option { - self.manipulator_groups.iter().position(|manipulator_group| manipulator_group.id == id) - } - - /// Insert a manipulator group at an index. - pub fn insert_manipulator_group(&mut self, index: usize, group: ManipulatorGroup) { - assert!(group.is_finite(), "Inserting non finite manipulator group"); - self.manipulator_groups.insert(index, group) - } - - /// Push a manipulator group to the end. - pub fn push_manipulator_group(&mut self, group: ManipulatorGroup) { - assert!(group.is_finite(), "Pushing non finite manipulator group"); - self.manipulator_groups.push(group) - } - - /// Get a mutable reference to the last manipulator - pub fn last_manipulator_group_mut(&mut self) -> Option<&mut ManipulatorGroup> { - self.manipulator_groups.last_mut() - } - - /// Remove a manipulator group at an index. - pub fn remove_manipulator_group(&mut self, index: usize) -> ManipulatorGroup { - self.manipulator_groups.remove(index) - } -} diff --git a/node-graph/libraries/vector-types/src/subpath/mod.rs b/node-graph/libraries/vector-types/src/subpath/mod.rs deleted file mode 100644 index 80ea7cd241..0000000000 --- a/node-graph/libraries/vector-types/src/subpath/mod.rs +++ /dev/null @@ -1,71 +0,0 @@ -mod consts; -mod core; -mod lookup; -mod manipulators; -mod solvers; -mod structs; -mod transform; - -pub use core::*; -use kurbo::PathSeg; -use std::fmt::{Debug, Formatter, Result}; -use std::ops::{Index, IndexMut}; -pub use structs::*; - -/// Structure used to represent a path composed of [Bezier] curves. -#[derive(Clone, PartialEq, graphene_hash::CacheHash)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct Subpath { - manipulator_groups: Vec>, - pub closed: bool, -} - -/// Iteration structure for iterating across each curve of a `Subpath`, using an intermediate `Bezier` representation. -pub struct SubpathIter<'a, PointId: Identifier> { - index: usize, - subpath: &'a Subpath, - is_always_closed: bool, -} - -impl Index for Subpath { - type Output = ManipulatorGroup; - - fn index(&self, index: usize) -> &Self::Output { - assert!(index < self.len(), "Index out of bounds in trait Index of SubPath."); - &self.manipulator_groups[index] - } -} - -impl IndexMut for Subpath { - fn index_mut(&mut self, index: usize) -> &mut Self::Output { - assert!(index < self.len(), "Index out of bounds in trait IndexMut of SubPath."); - &mut self.manipulator_groups[index] - } -} - -impl Iterator for SubpathIter<'_, PointId> { - type Item = PathSeg; - - // Returns the Bezier representation of each `Subpath` segment, defined between a pair of adjacent manipulator points. - fn next(&mut self) -> Option { - if self.subpath.is_empty() { - return None; - } - let closed = if self.is_always_closed { true } else { self.subpath.closed }; - let len = self.subpath.len() - 1 + if closed { 1 } else { 0 }; - if self.index >= len { - return None; - } - let start_index = self.index; - let end_index = (self.index + 1) % self.subpath.len(); - self.index += 1; - - Some(self.subpath[start_index].to_bezier(&self.subpath[end_index])) - } -} - -impl Debug for Subpath { - fn fmt(&self, f: &mut Formatter<'_>) -> Result { - f.debug_struct("Subpath").field("closed", &self.closed).field("manipulator_groups", &self.manipulator_groups).finish() - } -} diff --git a/node-graph/libraries/vector-types/src/subpath/solvers.rs b/node-graph/libraries/vector-types/src/subpath/solvers.rs deleted file mode 100644 index 409e336a93..0000000000 --- a/node-graph/libraries/vector-types/src/subpath/solvers.rs +++ /dev/null @@ -1,83 +0,0 @@ -use crate::subpath::{Identifier, Subpath}; -use crate::vector::algorithms::bezpath_algorithms::bezpath_is_inside_bezpath; -use crate::vector::misc::dvec2_to_point; -use glam::DVec2; -use kurbo::{Affine, BezPath, Shape}; - -impl Subpath { - pub fn contains_point(&self, point: DVec2) -> bool { - self.to_bezpath().contains(dvec2_to_point(point)) - } - - pub fn to_bezpath(&self) -> BezPath { - let mut bezpath = kurbo::BezPath::new(); - let mut out_handle; - - let Some(first) = self.manipulator_groups.first() else { return bezpath }; - bezpath.move_to(dvec2_to_point(first.anchor)); - out_handle = first.out_handle; - - for manipulator in self.manipulator_groups.iter().skip(1) { - match (out_handle, manipulator.in_handle) { - (Some(handle_start), Some(handle_end)) => bezpath.curve_to(dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(manipulator.anchor)), - (None, None) => bezpath.line_to(dvec2_to_point(manipulator.anchor)), - (None, Some(handle)) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(manipulator.anchor)), - (Some(handle), None) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(manipulator.anchor)), - } - out_handle = manipulator.out_handle; - } - - if self.closed { - match (out_handle, first.in_handle) { - (Some(handle_start), Some(handle_end)) => bezpath.curve_to(dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(first.anchor)), - (None, None) => bezpath.line_to(dvec2_to_point(first.anchor)), - (None, Some(handle)) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(first.anchor)), - (Some(handle), None) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(first.anchor)), - } - bezpath.close_path(); - } - bezpath - } - - /// Returns `true` if this subpath is completely inside the `other` subpath. - pub fn is_inside_subpath(&self, other: &Subpath, accuracy: Option, minimum_separation: Option) -> bool { - bezpath_is_inside_bezpath(&self.to_bezpath(), &other.to_bezpath(), accuracy, minimum_separation) - } - - /// Return the min and max corners that represent the bounding box of the subpath. Return `None` if the subpath is empty. - pub fn bounding_box(&self) -> Option<[DVec2; 2]> { - self.iter() - .map(|bezier| bezier.bounding_box()) - .map(|bbox| [DVec2::new(bbox.min_x(), bbox.min_y()), DVec2::new(bbox.max_x(), bbox.max_y())]) - .reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) - } - - /// Return the min and max corners that represent the bounding box of the subpath, after a given affine transform. - pub fn bounding_box_with_transform(&self, transform: glam::DAffine2) -> Option<[DVec2; 2]> { - self.iter() - .map(|bezier| (Affine::new(transform.to_cols_array()) * bezier).bounding_box()) - .map(|bbox| [DVec2::new(bbox.min_x(), bbox.min_y()), DVec2::new(bbox.max_x(), bbox.max_y())]) - .reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) - } - - /// Return the min and max corners that represent the loose bounding box of the subpath (bounding box of all handles and anchors). - pub fn loose_bounding_box(&self) -> Option<[DVec2; 2]> { - self.manipulator_groups - .iter() - .flat_map(|group| [group.in_handle, group.out_handle, Some(group.anchor)]) - .flatten() - .map(|pos| [pos, pos]) - .reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) - } - - /// Return the min and max corners that represent the loose bounding box of the subpath, after a given affine transform. - pub fn loose_bounding_box_with_transform(&self, transform: glam::DAffine2) -> Option<[DVec2; 2]> { - self.manipulator_groups - .iter() - .flat_map(|group| [group.in_handle, group.out_handle, Some(group.anchor)]) - .flatten() - .map(|pos| transform.transform_point2(pos)) - .map(|pos| [pos, pos]) - .reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) - } -} diff --git a/node-graph/libraries/vector-types/src/subpath/structs.rs b/node-graph/libraries/vector-types/src/subpath/structs.rs deleted file mode 100644 index 11d72b0e2b..0000000000 --- a/node-graph/libraries/vector-types/src/subpath/structs.rs +++ /dev/null @@ -1,384 +0,0 @@ -use crate::vector::algorithms::intersection::filtered_segment_intersections; -use crate::vector::misc::{dvec2_to_point, handles_to_segment}; -use glam::{DAffine2, DVec2}; -use kurbo::{CubicBez, Line, PathSeg, QuadBez, Shape}; -use std::fmt::{Debug, Formatter, Result}; -use std::hash::Hash; - -/// An id type used for each [ManipulatorGroup]. -pub trait Identifier: Sized + Clone + PartialEq + Hash + graphene_hash::CacheHash + 'static { - fn new() -> Self; -} - -/// Structure used to represent a single anchor with up to two optional associated handles along a `Subpath` -#[derive(Copy, Clone, PartialEq, graphene_hash::CacheHash)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct ManipulatorGroup { - pub anchor: DVec2, - pub in_handle: Option, - pub out_handle: Option, - pub id: PointId, -} - -impl Debug for ManipulatorGroup { - fn fmt(&self, f: &mut Formatter<'_>) -> Result { - f.debug_struct("ManipulatorGroup") - .field("anchor", &self.anchor) - .field("in_handle", &self.in_handle) - .field("out_handle", &self.out_handle) - .finish() - } -} - -impl ManipulatorGroup { - /// Construct a new manipulator group from an anchor, in handle and out handle - pub fn new(anchor: DVec2, in_handle: Option, out_handle: Option) -> Self { - let id = PointId::new(); - Self { anchor, in_handle, out_handle, id } - } - - /// Construct a new manipulator point with just an anchor position - pub fn new_anchor(anchor: DVec2) -> Self { - Self::new(anchor, None, None) - } - - /// Construct a new manipulator group from an anchor, in handle, out handle and an id - pub fn new_with_id(anchor: DVec2, in_handle: Option, out_handle: Option, id: PointId) -> Self { - Self { anchor, in_handle, out_handle, id } - } - - /// Construct a new manipulator point with just an anchor position and an id - pub fn new_anchor_with_id(anchor: DVec2, id: PointId) -> Self { - Self::new_with_id(anchor, Some(anchor), Some(anchor), id) - } - - /// Create a bezier curve that starts at the current manipulator group and finishes in the `end_group` manipulator group. - pub fn to_bezier(&self, end_group: &ManipulatorGroup) -> PathSeg { - let start = self.anchor; - let end = end_group.anchor; - let out_handle = self.out_handle; - let in_handle = end_group.in_handle; - - match (out_handle, in_handle) { - (Some(handle1), Some(handle2)) => PathSeg::Cubic(CubicBez::new(dvec2_to_point(start), dvec2_to_point(handle1), dvec2_to_point(handle2), dvec2_to_point(end))), - (Some(handle), None) | (None, Some(handle)) => PathSeg::Quad(QuadBez::new(dvec2_to_point(start), dvec2_to_point(handle), dvec2_to_point(end))), - (None, None) => PathSeg::Line(Line::new(dvec2_to_point(start), dvec2_to_point(end))), - } - } - - /// Apply a transformation to all of the [ManipulatorGroup] points - pub fn apply_transform(&mut self, affine_transform: DAffine2) { - self.anchor = affine_transform.transform_point2(self.anchor); - self.in_handle = self.in_handle.map(|in_handle| affine_transform.transform_point2(in_handle)); - self.out_handle = self.out_handle.map(|out_handle| affine_transform.transform_point2(out_handle)); - } - - /// Are all handles at finite positions - pub fn is_finite(&self) -> bool { - self.anchor.is_finite() && self.in_handle.is_none_or(|handle| handle.is_finite()) && self.out_handle.is_none_or(|handle| handle.is_finite()) - } - - /// Reverse directions of handles - pub fn flip(mut self) -> Self { - std::mem::swap(&mut self.in_handle, &mut self.out_handle); - self - } - - pub fn has_in_handle(&self) -> bool { - self.in_handle.map(|handle| Self::has_handle(self.anchor, handle)).unwrap_or(false) - } - - pub fn has_out_handle(&self) -> bool { - self.out_handle.map(|handle| Self::has_handle(self.anchor, handle)).unwrap_or(false) - } - - fn has_handle(anchor: DVec2, handle: DVec2) -> bool { - !((handle.x - anchor.x).abs() < f64::EPSILON && (handle.y - anchor.y).abs() < f64::EPSILON) - } -} - -#[derive(Copy, Clone)] -pub enum AppendType { - IgnoreStart, - SmoothJoin(f64), -} - -#[derive(Copy, Clone, Eq, PartialEq, Hash, graphene_hash::CacheHash)] -pub enum ArcType { - Open, - Closed, - PieSlice, -} - -/// Representation of the handle point(s) in a bezier segment. -#[derive(Copy, Clone, PartialEq, Debug, graphene_hash::CacheHash)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub enum BezierHandles { - Linear, - /// Handles for a quadratic curve. - Quadratic { - /// Point representing the location of the single handle. - handle: DVec2, - }, - /// Handles for a cubic curve. - Cubic { - /// Point representing the location of the handle associated to the start point. - handle_start: DVec2, - /// Point representing the location of the handle associated to the end point. - handle_end: DVec2, - }, -} - -impl BezierHandles { - pub fn is_cubic(&self) -> bool { - matches!(self, Self::Cubic { .. }) - } - - pub fn is_finite(&self) -> bool { - match self { - BezierHandles::Linear => true, - BezierHandles::Quadratic { handle } => handle.is_finite(), - BezierHandles::Cubic { handle_start, handle_end } => handle_start.is_finite() && handle_end.is_finite(), - } - } - - /// Get the coordinates of the bezier segment's first handle point. This represents the only handle in a quadratic segment. - pub fn start(&self) -> Option { - match *self { - BezierHandles::Cubic { handle_start, .. } | BezierHandles::Quadratic { handle: handle_start } => Some(handle_start), - _ => None, - } - } - - /// Get the coordinates of the second handle point. This will return `None` for a quadratic segment. - pub fn end(&self) -> Option { - match *self { - BezierHandles::Cubic { handle_end, .. } => Some(handle_end), - _ => None, - } - } - - pub fn move_start(&mut self, delta: DVec2) { - if let BezierHandles::Cubic { handle_start, .. } | BezierHandles::Quadratic { handle: handle_start } = self { - *handle_start += delta - } - } - - pub fn move_end(&mut self, delta: DVec2) { - if let BezierHandles::Cubic { handle_end, .. } = self { - *handle_end += delta - } - } - - /// Returns a Bezier curve that results from applying the transformation function to each handle point in the Bezier. - #[must_use] - pub fn apply_transformation(&self, transformation_function: impl Fn(DVec2) -> DVec2) -> Self { - match *self { - BezierHandles::Linear => Self::Linear, - BezierHandles::Quadratic { handle } => { - let handle = transformation_function(handle); - Self::Quadratic { handle } - } - BezierHandles::Cubic { handle_start, handle_end } => { - let handle_start = transformation_function(handle_start); - let handle_end = transformation_function(handle_end); - Self::Cubic { handle_start, handle_end } - } - } - } - - #[must_use] - pub fn reversed(self) -> Self { - match self { - BezierHandles::Cubic { handle_start, handle_end } => Self::Cubic { - handle_start: handle_end, - handle_end: handle_start, - }, - _ => self, - } - } -} - -/// Representation of a bezier curve with 2D points. -#[derive(Copy, Clone, PartialEq)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct Bezier { - /// Start point of the bezier curve. - pub start: DVec2, - /// End point of the bezier curve. - pub end: DVec2, - /// Handles of the bezier curve. - pub handles: BezierHandles, -} - -impl Debug for Bezier { - fn fmt(&self, f: &mut Formatter<'_>) -> Result { - let mut debug_struct = f.debug_struct("Bezier"); - let mut debug_struct_ref = debug_struct.field("start", &self.start); - debug_struct_ref = match self.handles { - BezierHandles::Linear => debug_struct_ref, - BezierHandles::Quadratic { handle } => debug_struct_ref.field("handle", &handle), - BezierHandles::Cubic { handle_start, handle_end } => debug_struct_ref.field("handle_start", &handle_start).field("handle_end", &handle_end), - }; - debug_struct_ref.field("end", &self.end).finish() - } -} - -/// Functionality for the getters and setters of the various points in a Bezier -impl Bezier { - /// Set the coordinates of the start point. - pub fn set_start(&mut self, s: DVec2) { - self.start = s; - } - - /// Set the coordinates of the end point. - pub fn set_end(&mut self, e: DVec2) { - self.end = e; - } - - /// Set the coordinates of the first handle point. This represents the only handle in a quadratic segment. If used on a linear segment, it will be changed to a quadratic. - pub fn set_handle_start(&mut self, h1: DVec2) { - match self.handles { - BezierHandles::Linear => { - self.handles = BezierHandles::Quadratic { handle: h1 }; - } - BezierHandles::Quadratic { ref mut handle } => { - *handle = h1; - } - BezierHandles::Cubic { ref mut handle_start, .. } => { - *handle_start = h1; - } - }; - } - - /// Set the coordinates of the second handle point. This will convert both linear and quadratic segments into cubic ones. For a linear segment, the first handle will be set to the start point. - pub fn set_handle_end(&mut self, h2: DVec2) { - match self.handles { - BezierHandles::Linear => { - self.handles = BezierHandles::Cubic { - handle_start: self.start, - handle_end: h2, - }; - } - BezierHandles::Quadratic { handle } => { - self.handles = BezierHandles::Cubic { handle_start: handle, handle_end: h2 }; - } - BezierHandles::Cubic { ref mut handle_end, .. } => { - *handle_end = h2; - } - }; - } - - /// Get the coordinates of the bezier segment's start point. - pub fn start(&self) -> DVec2 { - self.start - } - - /// Get the coordinates of the bezier segment's end point. - pub fn end(&self) -> DVec2 { - self.end - } - - /// Get the coordinates of the bezier segment's first handle point. This represents the only handle in a quadratic segment. - pub fn handle_start(&self) -> Option { - self.handles.start() - } - - /// Get the coordinates of the second handle point. This will return `None` for a quadratic segment. - pub fn handle_end(&self) -> Option { - self.handles.end() - } - - /// Get an iterator over the coordinates of all points in a vector. - /// - For a linear segment, the order of the points will be: `start`, `end`. - /// - For a quadratic segment, the order of the points will be: `start`, `handle`, `end`. - /// - For a cubic segment, the order of the points will be: `start`, `handle_start`, `handle_end`, `end`. - pub fn get_points(&self) -> impl Iterator + use<> { - match self.handles { - BezierHandles::Linear => [self.start, self.end, DVec2::ZERO, DVec2::ZERO].into_iter().take(2), - BezierHandles::Quadratic { handle } => [self.start, handle, self.end, DVec2::ZERO].into_iter().take(3), - BezierHandles::Cubic { handle_start, handle_end } => [self.start, handle_start, handle_end, self.end].into_iter().take(4), - } - } - - // TODO: Consider removing this function - /// Create a linear bezier using the provided coordinates as the start and end points. - pub fn from_linear_coordinates(x1: f64, y1: f64, x2: f64, y2: f64) -> Self { - Bezier { - start: DVec2::new(x1, y1), - handles: BezierHandles::Linear, - end: DVec2::new(x2, y2), - } - } - - /// Create a linear bezier using the provided DVec2s as the start and end points. - pub fn from_linear_dvec2(p1: DVec2, p2: DVec2) -> Self { - Bezier { - start: p1, - handles: BezierHandles::Linear, - end: p2, - } - } - - // TODO: Consider removing this function - /// Create a quadratic bezier using the provided coordinates as the start, handle, and end points. - pub fn from_quadratic_coordinates(x1: f64, y1: f64, x2: f64, y2: f64, x3: f64, y3: f64) -> Self { - Bezier { - start: DVec2::new(x1, y1), - handles: BezierHandles::Quadratic { handle: DVec2::new(x2, y2) }, - end: DVec2::new(x3, y3), - } - } - - /// Create a quadratic bezier using the provided DVec2s as the start, handle, and end points. - pub fn from_quadratic_dvec2(p1: DVec2, p2: DVec2, p3: DVec2) -> Self { - Bezier { - start: p1, - handles: BezierHandles::Quadratic { handle: p2 }, - end: p3, - } - } - - // TODO: Consider removing this function - /// Create a cubic bezier using the provided coordinates as the start, handles, and end points. - #[allow(clippy::too_many_arguments)] - pub fn from_cubic_coordinates(x1: f64, y1: f64, x2: f64, y2: f64, x3: f64, y3: f64, x4: f64, y4: f64) -> Self { - Bezier { - start: DVec2::new(x1, y1), - handles: BezierHandles::Cubic { - handle_start: DVec2::new(x2, y2), - handle_end: DVec2::new(x3, y3), - }, - end: DVec2::new(x4, y4), - } - } - - /// Create a cubic bezier using the provided DVec2s as the start, handles, and end points. - pub fn from_cubic_dvec2(p1: DVec2, p2: DVec2, p3: DVec2, p4: DVec2) -> Self { - Bezier { - start: p1, - handles: BezierHandles::Cubic { handle_start: p2, handle_end: p3 }, - end: p4, - } - } - - /// Returns a Bezier curve that results from applying the transformation function to each point in the Bezier. - pub fn apply_transformation(&self, transformation_function: impl Fn(DVec2) -> DVec2) -> Bezier { - Self { - start: transformation_function(self.start), - end: transformation_function(self.end), - handles: self.handles.apply_transformation(transformation_function), - } - } - - pub fn intersections(&self, other: &Bezier, accuracy: Option, minimum_separation: Option) -> Vec { - let this = handles_to_segment(self.start, self.handles, self.end); - let other = handles_to_segment(other.start, other.handles, other.end); - filtered_segment_intersections(this, other, accuracy, minimum_separation) - } - - pub fn winding(&self, point: DVec2) -> i32 { - let this = handles_to_segment(self.start, self.handles, self.end); - this.winding(dvec2_to_point(point)) - } -} diff --git a/node-graph/libraries/vector-types/src/subpath/transform.rs b/node-graph/libraries/vector-types/src/subpath/transform.rs deleted file mode 100644 index c4476a7388..0000000000 --- a/node-graph/libraries/vector-types/src/subpath/transform.rs +++ /dev/null @@ -1,62 +0,0 @@ -use super::structs::Identifier; -use super::*; -use glam::{DAffine2, DVec2}; - -/// Functionality that transforms Subpaths, such as split, reduce, offset, etc. -impl Subpath { - /// Returns [ManipulatorGroup]s with a reversed winding order. - fn reverse_manipulator_groups(manipulator_groups: &[ManipulatorGroup]) -> Vec> { - manipulator_groups - .iter() - .rev() - .map(|group| ManipulatorGroup { - anchor: group.anchor, - in_handle: group.out_handle, - out_handle: group.in_handle, - id: PointId::new(), - }) - .collect::>>() - } - - /// Returns a [Subpath] with a reversed winding order. - /// Note that a reversed closed subpath will start on the same manipulator group and simply wind the other direction - pub fn reverse(&self) -> Subpath { - let mut reversed = Subpath::reverse_manipulator_groups(self.manipulator_groups()); - if self.closed { - reversed.rotate_right(1); - }; - Subpath { - manipulator_groups: reversed, - closed: self.closed, - } - } - - /// Apply a transformation to all of the [ManipulatorGroup]s in the [Subpath]. - pub fn apply_transform(&mut self, affine_transform: DAffine2) { - for manipulator_group in &mut self.manipulator_groups { - manipulator_group.apply_transform(affine_transform); - } - } - - /// Returns a subpath that results from rotating this subpath around the origin by the given angle (in radians). - pub fn rotate(&self, angle: f64) -> Subpath { - let mut rotated_subpath = self.clone(); - - let affine_transform: DAffine2 = DAffine2::from_angle(angle); - rotated_subpath.apply_transform(affine_transform); - - rotated_subpath - } - - /// Returns a subpath that results from rotating this subpath around the provided point by the given angle (in radians). - pub fn rotate_about_point(&self, angle: f64, pivot: DVec2) -> Subpath { - // Translate before and after the rotation to account for the pivot - let translate: DAffine2 = DAffine2::from_translation(pivot); - let rotate: DAffine2 = DAffine2::from_angle(angle); - let translate_inverse = translate.inverse(); - - let mut rotated_subpath = self.clone(); - rotated_subpath.apply_transform(translate * rotate * translate_inverse); - rotated_subpath - } -} diff --git a/node-graph/libraries/vector-types/src/vector/algorithms/bezpath_algorithms.rs b/node-graph/libraries/vector-types/src/vector/algorithms/bezpath_algorithms.rs index b09fe4ea52..bd067a0443 100644 --- a/node-graph/libraries/vector-types/src/vector/algorithms/bezpath_algorithms.rs +++ b/node-graph/libraries/vector-types/src/vector/algorithms/bezpath_algorithms.rs @@ -1,16 +1,16 @@ -use super::intersection::bezpath_intersections; +use super::consts::MAX_ABSOLUTE_DIFFERENCE; +use super::intersection::{bezpath_intersections, filtered_all_segment_intersections, pathseg_self_intersections}; use super::poisson_disk::poisson_disk_sample; use super::util::pathseg_tangent; -use crate::vector::algorithms::offset_subpath::MAX_ABSOLUTE_DIFFERENCE; use crate::vector::misc::{PointSpacingType, dvec2_to_point, point_to_dvec2}; use core_types::math::polynomial::pathseg_to_parametric_polynomial; use glam::{DMat2, DVec2}; -use kurbo::{BezPath, CubicBez, DEFAULT_ACCURACY, Line, ParamCurve, ParamCurveArclen, ParamCurveDeriv, PathEl, PathSeg, Point, QuadBez, Rect, Shape, Vec2}; +use kurbo::{BezPath, CubicBez, DEFAULT_ACCURACY, Line, ParamCurve, ParamCurveArclen, PathEl, PathSeg, Point, QuadBez, Rect, Shape, Vec2}; use std::f64::consts::{FRAC_PI_2, PI}; /// Splits the [`BezPath`] at segment index at `t` value which lie in the range of [0, 1]. /// Returns [`None`] if the given [`BezPath`] has no segments or `t` is within f64::EPSILON of 0 or 1. -pub fn split_bezpath_at_segment(bezpath: &BezPath, segment_index: usize, t: f64) -> Option<(BezPath, BezPath)> { +fn split_bezpath_at_segment(bezpath: &BezPath, segment_index: usize, t: f64) -> Option<(BezPath, BezPath)> { if t <= f64::EPSILON || (1. - t) <= f64::EPSILON || bezpath.segments().count() == 0 { return None; } @@ -77,11 +77,7 @@ pub fn tangent_on_bezpath(bezpath: &BezPath, t_value: TValue, segments_length: O let (segment_index, t) = eval_bezpath(bezpath, t_value, segments_length); let segment = bezpath.get_seg(segment_index + 1).unwrap(); - match segment { - PathSeg::Line(line) => line.deriv().eval(t), - PathSeg::Quad(quad_bez) => quad_bez.deriv().eval(t), - PathSeg::Cubic(cubic_bez) => cubic_bez.deriv().eval(t), - } + dvec2_to_point(pathseg_tangent(segment, t)) } /// Computes sample locations along a bezpath, returning parametric `(segment_index, t)` pairs and whether the path was closed. @@ -182,7 +178,7 @@ pub enum TValue { } /// Default LUT step size in `compute_lookup_table` function. -pub const DEFAULT_LUT_STEP_SIZE: usize = 10; +const DEFAULT_LUT_STEP_SIZE: usize = 10; /// Return a selection of equidistant points on the bezier curve. /// If no value is provided for `steps`, then the function will default `steps` to be 10. @@ -252,7 +248,7 @@ pub(crate) fn pathseg_length_centroid_and_length(segment: PathSeg, accuracy: Opt let QuadBez { p0, p1, p2 } = quad_bez; // Use Casteljau subdivision, noting that the length is more than the straight line distance from start to end but less than the straight line distance through the handles fn recurse(a0: Vec2, a1: Vec2, a2: Vec2, accuracy: f64, level: u8) -> (f64, Vec2) { - let lower = (a2 - a1).length(); + let lower = (a2 - a0).length(); let upper = (a1 - a0).length() + (a2 - a1).length(); if upper - lower <= 2. * accuracy || level >= 8 { let length = (lower + upper) / 2.; @@ -415,21 +411,8 @@ pub fn poisson_disk_points(bezpath_index: usize, bezpaths: &[(BezPath, Rect)], s poisson_disk_sample(offset, width, height, separation_disk_diameter, point_in_shape_checker, line_intersect_shape_checker, rng) } -/// Returns true if the Bezier curve is equivalent to a line. -/// -/// **NOTE**: This is different from simply checking if the segment is [`PathSeg::Line`] or [`PathSeg::Quad`] or [`PathSeg::Cubic`]. Bezier curve can also be a line if the control points are colinear to the start and end points. Therefore if the handles exceed the start and end point, it will still be considered as a line. -pub fn is_linear(segment: &PathSeg) -> bool { - let is_colinear = |a: Point, b: Point, c: Point| -> bool { ((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)).abs() < MAX_ABSOLUTE_DIFFERENCE }; - - match *segment { - PathSeg::Line(_) => true, - PathSeg::Quad(QuadBez { p0, p1, p2 }) => is_colinear(p0, p1, p2), - PathSeg::Cubic(CubicBez { p0, p1, p2, p3 }) => is_colinear(p0, p1, p3) && is_colinear(p0, p2, p3), - } -} - -// TODO: If a segment curls back on itself tightly enough it could intersect again at the portion that should be trimmed. This could cause the Subpaths to be clipped -// TODO: at the incorrect location. This can be avoided by first trimming the two Subpaths at any extrema, effectively ignoring loopbacks. +// TODO: If a segment curls back on itself tightly enough it could intersect again at the portion that should be trimmed. This could cause the subpaths to be clipped +// TODO: at the incorrect location. This can be avoided by first trimming the two subpaths at any extrema, effectively ignoring loopbacks. /// Helper function to clip overlap of two intersecting open BezPaths. Returns an Option because intersections may not exist for certain arrangements and distances. /// Assumes that the BezPaths represents simple Bezier segments, and clips the BezPaths at the last intersection of the first BezPath, and first intersection of the last BezPath. pub fn clip_simple_bezpaths(bezpath1: &BezPath, bezpath2: &BezPath) -> Option<(BezPath, BezPath)> { @@ -499,7 +482,7 @@ pub fn miter_line_join(bezpath1: &BezPath, bezpath2: &BezPath, miter_limit: Opti /// Computes the [`PathEl`] to form a circular join from `left` to `right`, along a circle around `center`. /// By default, the angle is assumed to be 180 degrees. -pub fn compute_circular_subpath_details(left: DVec2, arc_point: DVec2, right: DVec2, center: DVec2, angle: Option) -> [PathEl; 2] { +fn compute_circular_subpath_details(left: DVec2, arc_point: DVec2, right: DVec2, center: DVec2, angle: Option) -> [PathEl; 2] { let center_to_arc_point = arc_point - center; // Based on https://pomax.github.io/bezierinfo/#circles_cubic @@ -579,6 +562,124 @@ pub fn bezpath_is_inside_bezpath(bezpath1: &BezPath, bezpath2: &BezPath, accurac true } +/// The segments of the [`BezPath`] always considering it as a closed path, synthesizing the closing line when it is open. +fn closed_segments(bezpath: &BezPath) -> Vec { + let mut segments = bezpath.segments().collect::>(); + + if let (Some(first), Some(last)) = (segments.first(), segments.last()) + && last.end() != first.start() + { + segments.push(PathSeg::Line(Line::new(last.end(), first.start()))); + } + + segments +} + +/// Returns a list of `t` values that correspond to all the self intersection points of the path always considering it as a closed path. +/// The index and `t` value of both will be returned that corresponds to a point, sorted based on their index and `t` respectively. +fn closed_bezpath_self_intersections(segments: &[PathSeg], accuracy: Option, minimum_separation: Option) -> Vec<(usize, f64)> { + let mut intersections_vec = Vec::new(); + let err = accuracy.unwrap_or(MAX_ABSOLUTE_DIFFERENCE); + let num_curves = segments.len(); + + // O(nΒ²) in the number of segments, since every segment pair is compared + segments.iter().enumerate().for_each(|(i, &other)| { + intersections_vec.extend(pathseg_self_intersections(other, accuracy, minimum_separation).iter().flat_map(|value| [(i, value.0), (i, value.1)])); + segments.iter().enumerate().skip(i + 1).for_each(|(j, &curve)| { + intersections_vec.extend( + filtered_all_segment_intersections(curve, other, accuracy, minimum_separation) + .iter() + .filter(|&value| (j != i + 1 || value.0 > err || (1. - value.1) > err) && (j != num_curves - 1 || i != 0 || value.1 > err || (1. - value.0) > err)) + .flat_map(|value| [(j, value.0), (i, value.1)]), + ); + }); + }); + + intersections_vec.sort_by(|a, b| a.partial_cmp(b).unwrap()); + + intersections_vec +} + +/// Return the area centroid, together with the area, of the [`BezPath`] always considering it as a closed path. The area will always be a positive value. +/// +/// The area centroid is the center of mass for the area of a solid shape's interior. +/// An infinitely flat material forming the path's closed shape would balance at this point. +/// +/// It will return `None` if no segment is present. If the area is less than `error`, it will return `Some((DVec2::NAN, 0.))`. +/// +/// Because the calculation of area and centroid for a self-intersecting path requires finding the intersections, the following parameters are used: +/// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. +/// - `minimum_separation` - the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. +/// +/// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two. +/// +/// **NOTE**: if an intersection were to occur within an `error` distance away from an anchor point, the algorithm will filter that intersection out. +pub fn bezpath_area_centroid_and_area(bezpath: &BezPath, error: Option, minimum_separation: Option) -> Option<(DVec2, f64)> { + let segments = closed_segments(bezpath); + let all_intersections = closed_bezpath_self_intersections(&segments, error, minimum_separation); + let mut current_sign: f64 = 1.; + + let (x_sum, y_sum, area) = segments + .iter() + .enumerate() + .map(|(index, &bezier)| { + let (f_x, f_y) = pathseg_to_parametric_polynomial(bezier); + let (f_x, f_y) = (f_x.as_size::<10>().unwrap(), f_y.as_size::<10>().unwrap()); + let f_y_prime = f_y.derivative(); + let f_x_prime = f_x.derivative(); + let f_xy = &f_x * &f_y; + + let mut x_part = &f_xy * &f_x_prime; + let mut y_part = &f_xy * &f_y_prime; + let mut area_part = &f_x * &f_y_prime; + x_part.antiderivative_mut(); + y_part.antiderivative_mut(); + area_part.antiderivative_mut(); + + let mut curve_sum_x = -current_sign * x_part.eval(0.); + let mut curve_sum_y = -current_sign * y_part.eval(0.); + let mut curve_sum_area = -current_sign * area_part.eval(0.); + for (_, t) in all_intersections.iter().filter(|(i, _)| *i == index) { + curve_sum_x += 2. * current_sign * x_part.eval(*t); + curve_sum_y += 2. * current_sign * y_part.eval(*t); + curve_sum_area += 2. * current_sign * area_part.eval(*t); + current_sign *= -1.; + } + curve_sum_x += current_sign * x_part.eval(1.); + curve_sum_y += current_sign * y_part.eval(1.); + curve_sum_area += current_sign * area_part.eval(1.); + + (-curve_sum_x, curve_sum_y, curve_sum_area) + }) + .reduce(|(x1, y1, area1), (x2, y2, area2)| (x1 + x2, y1 + y2, area1 + area2))?; + + if area.abs() < error.unwrap_or(MAX_ABSOLUTE_DIFFERENCE) { + return Some((DVec2::NAN, 0.)); + } + + Some((DVec2::new(x_sum / area, y_sum / area), area.abs())) +} + +/// Return the approximation of the length centroid, together with the length, of the [`BezPath`]. +/// +/// The length centroid is the center of mass for the arc length of the solid shape's perimeter. +/// An infinitely thin wire forming the path's shape would balance at this point. +/// +/// It will return `None` if no segment is present. +/// - `accuracy` is used to approximate the curve. +/// - `always_closed` is to consider the path as closed always. +pub fn bezpath_length_centroid_and_length(bezpath: &BezPath, accuracy: Option, always_closed: bool) -> Option<(DVec2, f64)> { + let segments = if always_closed { closed_segments(bezpath) } else { bezpath.segments().collect() }; + + segments + .into_iter() + .map(|bezier| pathseg_length_centroid_and_length(bezier, accuracy)) + .map(|(centroid, length)| (centroid * length, length)) + .reduce(|(centroid_part1, length1), (centroid_part2, length2)| (centroid_part1 + centroid_part2, length1 + length2)) + .map(|(centroid_part, length)| (centroid_part / length, length)) + .map(|(centroid_part, length)| (DVec2::new(centroid_part.x, centroid_part.y), length)) +} + #[cfg(test)] mod tests { // TODO: add more intersection tests @@ -608,4 +709,13 @@ mod tests { let line_inside = Line::new(Point::new(101., 101.5), Point::new(150.2, 499.)).to_path(DEFAULT_ACCURACY); assert!(bezpath_is_inside_bezpath(&line_inside, &boundary_polygon, None, None)); } + + #[test] + fn centroid_rect() { + let rect = crate::vector::algorithms::shapes::rectangle_bezpath(glam::DVec2::new(100., 100.), glam::DVec2::new(300., 200.)); + let (center, area) = super::bezpath_area_centroid_and_area(&rect, Some(1e-3), Some(1e-3)).unwrap(); + + assert_eq!(area, 200. * 100.); + assert_eq!(center, glam::DVec2::new(200., 150.)); + } } diff --git a/node-graph/libraries/vector-types/src/vector/algorithms/consts.rs b/node-graph/libraries/vector-types/src/vector/algorithms/consts.rs new file mode 100644 index 0000000000..46eec7326b --- /dev/null +++ b/node-graph/libraries/vector-types/src/vector/algorithms/consts.rs @@ -0,0 +1,8 @@ +/// Minimum allowable separation between adjacent `t` values when calculating curve intersections +pub(crate) const MIN_SEPARATION_VALUE: f64 = 5. * 1e-3; + +/// Threshold for comparing floating point values in intersection and centroid math. +pub(crate) const MAX_ABSOLUTE_DIFFERENCE: f64 = 1e-3; + +/// Maximum distance at which two points are treated as one and the same point. +pub(crate) const MAX_COINCIDENT_POINT_DISTANCE: f64 = 1e-7; diff --git a/node-graph/libraries/vector-types/src/vector/algorithms/contants.rs b/node-graph/libraries/vector-types/src/vector/algorithms/contants.rs deleted file mode 100644 index 021e49be22..0000000000 --- a/node-graph/libraries/vector-types/src/vector/algorithms/contants.rs +++ /dev/null @@ -1,6 +0,0 @@ -/// Minimum allowable separation between adjacent `t` values when calculating curve intersections -pub const MIN_SEPARATION_VALUE: f64 = 5. * 1e-3; - -/// Constant used to determine if `f64`s are equivalent. -#[cfg(test)] -pub const MAX_ABSOLUTE_DIFFERENCE: f64 = 1e-3; diff --git a/node-graph/libraries/vector-types/src/vector/algorithms/intersection.rs b/node-graph/libraries/vector-types/src/vector/algorithms/intersection.rs index 7a80e5cc60..fa351888fc 100644 --- a/node-graph/libraries/vector-types/src/vector/algorithms/intersection.rs +++ b/node-graph/libraries/vector-types/src/vector/algorithms/intersection.rs @@ -1,4 +1,4 @@ -use super::contants::MIN_SEPARATION_VALUE; +use super::consts::MIN_SEPARATION_VALUE; use kurbo::{BezPath, DEFAULT_ACCURACY, ParamCurve, PathSeg, Shape}; use lyon_geom::{CubicBezierSegment, Point}; @@ -25,7 +25,7 @@ fn cubic_cubic_intersections_lyon(cubic1: kurbo::CubicBez, cubic2: kurbo::CubicB /// that segment where the intersection occurred. /// /// `minimum_separation` is the minimum difference that two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. -pub fn bezpath_and_segment_intersections(bezpath: &BezPath, segment: PathSeg, accuracy: Option, minimum_separation: Option) -> Vec<(usize, f64)> { +fn bezpath_and_segment_intersections(bezpath: &BezPath, segment: PathSeg, accuracy: Option, minimum_separation: Option) -> Vec<(usize, f64)> { bezpath .segments() .enumerate() @@ -39,7 +39,7 @@ pub fn bezpath_and_segment_intersections(bezpath: &BezPath, segment: PathSeg, ac } /// Calculates the intersection points the bezpath has with another given bezpath and returns a list of parametric `t`-values. -pub fn bezpath_intersections(bezpath1: &BezPath, bezpath2: &BezPath, accuracy: Option, minimum_separation: Option) -> Vec<(usize, f64)> { +pub(crate) fn bezpath_intersections(bezpath1: &BezPath, bezpath2: &BezPath, accuracy: Option, minimum_separation: Option) -> Vec<(usize, f64)> { let mut intersection_t_values: Vec<(usize, f64)> = bezpath2 .segments() .flat_map(|bezier| bezpath_and_segment_intersections(bezpath1, bezier, accuracy, minimum_separation)) @@ -50,7 +50,7 @@ pub fn bezpath_intersections(bezpath1: &BezPath, bezpath2: &BezPath, accuracy: O } /// Calculates the intersection points the segment has with another given segment and returns a list of parametric `t`-values with given accuracy. -pub fn segment_intersections(segment1: PathSeg, segment2: PathSeg, accuracy: Option) -> Vec<(f64, f64)> { +fn segment_intersections(segment1: PathSeg, segment2: PathSeg, accuracy: Option) -> Vec<(f64, f64)> { let accuracy = accuracy.unwrap_or(DEFAULT_ACCURACY); match (segment1, segment2) { @@ -66,7 +66,7 @@ pub fn segment_intersections(segment1: PathSeg, segment2: PathSeg, accuracy: Opt } } -pub fn subsegment_intersections(segment1: PathSeg, min_t1: f64, max_t1: f64, segment2: PathSeg, min_t2: f64, max_t2: f64, accuracy: Option) -> Vec<(f64, f64)> { +fn subsegment_intersections(segment1: PathSeg, min_t1: f64, max_t1: f64, segment2: PathSeg, min_t2: f64, max_t2: f64, accuracy: Option) -> Vec<(f64, f64)> { let accuracy = accuracy.unwrap_or(DEFAULT_ACCURACY); match (segment1, segment2) { @@ -180,7 +180,7 @@ pub fn filtered_segment_intersections(segment1: PathSeg, segment2: PathSeg, accu /// `error`, for intersections where the provided bezier is non-linear, defines the threshold for bounding boxes to be considered an intersection point. /// /// `minimum_separation` is the minimum difference between adjacent `t` values in sorted order -pub fn filtered_all_segment_intersections(segment1: PathSeg, segment2: PathSeg, accuracy: Option, minimum_separation: Option) -> Vec<(f64, f64)> { +pub(crate) fn filtered_all_segment_intersections(segment1: PathSeg, segment2: PathSeg, accuracy: Option, minimum_separation: Option) -> Vec<(f64, f64)> { let mut intersection_t_values = segment_intersections(segment1, segment2, accuracy); intersection_t_values.sort_by(|a, b| (a.0 + a.1).partial_cmp(&(b.0 + b.1)).unwrap()); @@ -240,7 +240,7 @@ fn pathseg_self_intersection(segment: PathSeg, accuracy: Option) -> Vec<(f6 /// If the difference between 2 adjacent `t` values is less than the minimum difference, the filtering takes the larger `t` value and discards the smaller `t` value. /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. /// - `minimum_separation` - The minimum difference between adjacent `t` values in sorted order -pub fn pathseg_self_intersections(segment: PathSeg, accuracy: Option, minimum_separation: Option) -> Vec<(f64, f64)> { +pub(crate) fn pathseg_self_intersections(segment: PathSeg, accuracy: Option, minimum_separation: Option) -> Vec<(f64, f64)> { let mut intersection_t_values = pathseg_self_intersection(segment, accuracy); intersection_t_values.sort_by(|a, b| (a.0 + a.1).partial_cmp(&(b.0 + b.1)).unwrap()); @@ -260,7 +260,7 @@ pub fn pathseg_self_intersections(segment: PathSeg, accuracy: Option, minim mod tests { use super::{bezpath_and_segment_intersections, filtered_segment_intersections}; use crate::vector::algorithms::{ - contants::MAX_ABSOLUTE_DIFFERENCE, + consts::MAX_ABSOLUTE_DIFFERENCE, util::{compare_points, compare_vec_of_points, dvec2_compare}, }; diff --git a/node-graph/libraries/vector-types/src/vector/algorithms/merge_by_distance.rs b/node-graph/libraries/vector-types/src/vector/algorithms/merge_by_distance.rs index 195cae25e4..e4cf8f25a5 100644 --- a/node-graph/libraries/vector-types/src/vector/algorithms/merge_by_distance.rs +++ b/node-graph/libraries/vector-types/src/vector/algorithms/merge_by_distance.rs @@ -47,7 +47,7 @@ impl MergeByDistanceExt for Vector { // Collect points and segments to delete at the end to avoid invalidating indices let mut points_to_delete = FxHashSet::default(); let mut segments_to_delete = FxHashSet::default(); - for (mut collapse_set, average_pos) in collapse.into_iter().zip(average_position.into_iter()) { + for (mut collapse_set, average_pos) in collapse.into_iter().zip(average_position) { // Remove any segments where both endpoints are in the collapse set segments_to_delete.extend(self.segment_domain.iter().filter_map(|(id, start_offset, end_offset, _)| { let start = self.point_domain.ids()[start_offset]; @@ -94,10 +94,6 @@ impl MergeByDistanceExt for Vector { points_to_delete.extend(collapse_set) } - // Remove faces whose start or end segments are removed - // TODO: Adjust faces and only delete if all (or all but one) segments are removed - self.region_domain - .retain_with_region(|_, segment_range| segments_to_delete.contains(segment_range.start()) || segments_to_delete.contains(segment_range.end())); self.segment_domain.retain(|id| !segments_to_delete.contains(id), usize::MAX); self.point_domain.retain(&mut self.segment_domain, |id| !points_to_delete.contains(id)); } @@ -197,7 +193,6 @@ impl MergeByDistanceExt for Vector { let start = self.segment_domain.start_point()[segment_idx]; let end = self.segment_domain.end_point()[segment_idx]; let handles = self.segment_domain.handles()[segment_idx]; - let stroke = self.segment_domain.stroke()[segment_idx]; // Get new indices for start and end points let new_start = point_index_map[start].unwrap(); @@ -205,7 +200,7 @@ impl MergeByDistanceExt for Vector { // Skip segments where start and end points were merged if new_start != new_end { - new_segment_domain.push(id, new_start, new_end, handles, stroke); + new_segment_domain.push(id, new_start, new_end, handles); } } @@ -224,7 +219,7 @@ pub(crate) struct Point { /// Useful indexes to speed up various operations on [`Vector`]. /// /// Important: It is the user's responsibility to ensure the indexes remain valid after mutations to the data. -pub struct VectorIndex { +pub(crate) struct VectorIndex { /// Points and segments form a graph. Store it here in a form amenable to graph algorithms. /// /// Currently, segment data is not stored as it is not used, but it could easily be added. @@ -237,7 +232,7 @@ pub struct VectorIndex { impl VectorIndex { /// Construct a [`VectorIndex`] by building indexes from the given [`Vector`]. Takes `O(n)` time. - pub fn build_from(data: &Vector) -> Self { + fn build_from(data: &Vector) -> Self { let point_to_offset = data.point_domain.ids().iter().copied().enumerate().map(|(a, b)| (b, a)).collect::>(); let mut point_to_node = FxHashMap::default(); @@ -270,7 +265,7 @@ impl VectorIndex { /// # Panics /// /// Will panic if no segment with the given ID is found. - pub fn segment_chord_length(&self, id: SegmentId) -> f64 { + fn segment_chord_length(&self, id: SegmentId) -> f64 { let edge_idx = self.segment_to_edge[&id]; let (start, end) = self.point_graph.edge_endpoints(edge_idx).unwrap(); let start_position = self.point_graph.node_weight(start).unwrap().position; @@ -285,7 +280,7 @@ impl VectorIndex { /// # Panics /// /// This function will panic if the ID is not present. - pub fn segment_ends(&self, id: SegmentId) -> [NodeIndex; 2] { + fn segment_ends(&self, id: SegmentId) -> [NodeIndex; 2] { let (start, end) = self.point_graph.edge_endpoints(self.segment_to_edge[&id]).unwrap(); if start < end { [start, end] } else { [end, start] } } @@ -295,7 +290,7 @@ impl VectorIndex { /// # Panics /// /// Will panic if `id` isn't in the data. - pub fn point_position(&self, id: PointId, data: &Vector) -> DVec2 { + fn point_position(&self, id: PointId, data: &Vector) -> DVec2 { let offset = self.point_to_offset[&id]; data.point_domain.positions()[offset] } diff --git a/node-graph/libraries/vector-types/src/vector/algorithms/mod.rs b/node-graph/libraries/vector-types/src/vector/algorithms/mod.rs index 2ba54718e4..3d45506dc9 100644 --- a/node-graph/libraries/vector-types/src/vector/algorithms/mod.rs +++ b/node-graph/libraries/vector-types/src/vector/algorithms/mod.rs @@ -1,8 +1,9 @@ pub mod bezpath_algorithms; -mod contants; +pub(crate) mod consts; pub mod intersection; pub mod merge_by_distance; -pub mod offset_subpath; -pub mod poisson_disk; +pub mod offset_bezpath; +mod poisson_disk; +pub mod shapes; pub mod spline; pub mod util; diff --git a/node-graph/libraries/vector-types/src/vector/algorithms/offset_subpath.rs b/node-graph/libraries/vector-types/src/vector/algorithms/offset_bezpath.rs similarity index 88% rename from node-graph/libraries/vector-types/src/vector/algorithms/offset_subpath.rs rename to node-graph/libraries/vector-types/src/vector/algorithms/offset_bezpath.rs index d3d0b9965d..112df67a7c 100644 --- a/node-graph/libraries/vector-types/src/vector/algorithms/offset_subpath.rs +++ b/node-graph/libraries/vector-types/src/vector/algorithms/offset_bezpath.rs @@ -1,13 +1,12 @@ use super::bezpath_algorithms::{clip_simple_bezpaths, miter_line_join, round_line_join}; +use super::consts::MAX_COINCIDENT_POINT_DISTANCE; use crate::vector::misc::point_to_dvec2; use kurbo::{BezPath, Join, ParamCurve, PathEl, PathSeg}; /// Value to control smoothness and mathematical accuracy to offset a cubic Bezier. const CUBIC_REGULARIZATION_ACCURACY: f64 = 0.5; -/// Constant used to determine if `f64`s are equivalent. -pub const MAX_ABSOLUTE_DIFFERENCE: f64 = 1e-7; /// Squared version to avoid sqrt in distance checks. -const MAX_ABSOLUTE_DIFFERENCE_SQUARED: f64 = MAX_ABSOLUTE_DIFFERENCE * MAX_ABSOLUTE_DIFFERENCE; +const MAX_COINCIDENT_POINT_DISTANCE_SQUARED: f64 = MAX_COINCIDENT_POINT_DISTANCE * MAX_COINCIDENT_POINT_DISTANCE; const MAX_FITTED_SEGMENTS: usize = 10000; /// Reduces the segments of the bezpath into simple subcurves, then offset each subcurve a set `distance` away. @@ -26,9 +25,9 @@ pub fn offset_bezpath(bezpath: &BezPath, distance: f64, join: Join, miter_limit: // Skip degenerate curves where all control points are at the same location. // Offsetting a point is undefined and causes infinite recursion in fit_to_bezpath. let start = cubic_bez.p0; - let is_degenerate = start.distance_squared(cubic_bez.p1) < MAX_ABSOLUTE_DIFFERENCE_SQUARED - && start.distance_squared(cubic_bez.p2) < MAX_ABSOLUTE_DIFFERENCE_SQUARED - && start.distance_squared(cubic_bez.p3) < MAX_ABSOLUTE_DIFFERENCE_SQUARED; + let is_degenerate = start.distance_squared(cubic_bez.p1) < MAX_COINCIDENT_POINT_DISTANCE_SQUARED + && start.distance_squared(cubic_bez.p2) < MAX_COINCIDENT_POINT_DISTANCE_SQUARED + && start.distance_squared(cubic_bez.p3) < MAX_COINCIDENT_POINT_DISTANCE_SQUARED; if is_degenerate { return None; @@ -49,7 +48,7 @@ pub fn offset_bezpath(bezpath: &BezPath, distance: f64, join: Join, miter_limit: return BezPath::new(); } - // Clip or join consecutive Subpaths + // Clip or join consecutive subpaths for i in 0..bezpaths.len() - 1 { let j = i + 1; let bezpath1 = &bezpaths[i]; @@ -59,11 +58,11 @@ pub fn offset_bezpath(bezpath: &BezPath, distance: f64, join: Join, miter_limit: let first_segment_start = point_to_dvec2(bezpath2.segments().next().unwrap().start()); // If the anchors are approximately equal, there is no need to clip / join the segments - if last_segment_end.abs_diff_eq(first_segment_start, MAX_ABSOLUTE_DIFFERENCE) { + if last_segment_end.abs_diff_eq(first_segment_start, MAX_COINCIDENT_POINT_DISTANCE) { continue; } - // The angle is concave. The Subpath overlap and must be clipped + // The angle is concave. The subpaths overlap and must be clipped let mut apply_join = true; if let Some((clipped_subpath1, clipped_subpath2)) = clip_simple_bezpaths(bezpath1, bezpath2) { @@ -71,7 +70,7 @@ pub fn offset_bezpath(bezpath: &BezPath, distance: f64, join: Join, miter_limit: bezpaths[j] = clipped_subpath2; apply_join = false; } - // The angle is convex. The Subpath must be joined using the specified join type + // The angle is convex. The subpaths must be joined using the specified join type if apply_join { match join { Join::Bevel => { diff --git a/node-graph/libraries/vector-types/src/vector/algorithms/poisson_disk.rs b/node-graph/libraries/vector-types/src/vector/algorithms/poisson_disk.rs index 7a3445f10b..a6ce56fac7 100644 --- a/node-graph/libraries/vector-types/src/vector/algorithms/poisson_disk.rs +++ b/node-graph/libraries/vector-types/src/vector/algorithms/poisson_disk.rs @@ -8,7 +8,7 @@ const DEEPEST_SUBDIVISION_LEVEL_BEFORE_DISCARDING: usize = 8; /// Based on the paper: /// "Poisson Disk Point Sets by Hierarchical Dart Throwing" /// -pub fn poisson_disk_sample( +pub(crate) fn poisson_disk_sample( offset: DVec2, width: f64, height: f64, @@ -187,23 +187,23 @@ where /// A square (represented by its top left corner position and width/height of `square_size`) that is currently a candidate for targetting by the dart throwing process. /// The positive sign bit encodes if the square is contained entirely within the masking shape, or negative if it's outside or intersects the shape path. -pub struct ActiveSquare(DVec2); +struct ActiveSquare(DVec2); impl ActiveSquare { - pub fn new(top_left_corner: DVec2, fully_in_shape: bool) -> Self { + fn new(top_left_corner: DVec2, fully_in_shape: bool) -> Self { Self(if fully_in_shape { top_left_corner } else { -top_left_corner }) } - pub fn top_left_corner(&self) -> DVec2 { + fn top_left_corner(&self) -> DVec2 { self.0.abs() } - pub fn fully_in_shape(&self) -> bool { + fn fully_in_shape(&self) -> bool { self.0.x.is_sign_positive() } } -pub struct ActiveListLevel { +struct ActiveListLevel { /// List of all subdivided squares of the same size that are currently candidates for targetting by the dart throwing process active_squares: Vec, /// Width and height of the squares in this level of subdivision @@ -214,7 +214,7 @@ pub struct ActiveListLevel { impl ActiveListLevel { #[inline(always)] - pub fn new(square_size: f64) -> Self { + fn new(square_size: f64) -> Self { Self { active_squares: Vec::new(), square_size, @@ -222,7 +222,7 @@ impl ActiveListLevel { } } - pub fn new_filled( + fn new_filled( square_size: f64, offset: DVec2, width: f64, @@ -295,14 +295,14 @@ impl ActiveListLevel { #[must_use] #[inline(always)] - pub fn take_square(&mut self, active_square_index: usize) -> ActiveSquare { + fn take_square(&mut self, active_square_index: usize) -> ActiveSquare { let targetted_square = self.active_squares.swap_remove(active_square_index); self.total_area = self.square_size.powi(2) * self.active_squares.len() as f64; targetted_square } #[inline(always)] - pub fn add_squares(&mut self, new_squares: impl Iterator) { + fn add_squares(&mut self, new_squares: impl Iterator) { for new_square in new_squares { self.active_squares.push(new_square); } @@ -310,28 +310,28 @@ impl ActiveListLevel { } #[inline(always)] - pub fn square_size(&self) -> f64 { + fn square_size(&self) -> f64 { self.square_size } #[inline(always)] - pub fn square_area(&self) -> f64 { + fn square_area(&self) -> f64 { self.square_size.powi(2) } #[inline(always)] - pub fn total_area(&self) -> f64 { + fn total_area(&self) -> f64 { self.total_area } #[inline(always)] - pub fn not_empty(&self) -> bool { + fn not_empty(&self) -> bool { !self.active_squares.is_empty() } } #[derive(Clone, Default)] -pub struct PointsList { +struct PointsList { // The worst-case number of points in a 3x3 grid is 16 (one at each intersection of the four gridlines per axis) storage_slots: [DVec2; 16], length: usize, @@ -339,19 +339,19 @@ pub struct PointsList { impl PointsList { #[inline(always)] - pub fn push(&mut self, point: DVec2) { + fn push(&mut self, point: DVec2) { self.storage_slots[self.length] = point; self.length += 1; } #[inline(always)] - pub fn list_cell_and_neighbors(&self) -> impl Iterator { + fn list_cell_and_neighbors(&self) -> impl Iterator { // The negative bit is used to store whether a point belongs to a neighboring cell self.storage_slots.into_iter().take(self.length).map(|point| (point.x.abs(), point.y.abs()).into()) } #[inline(always)] - pub fn list_cell(&self) -> impl Iterator { + fn list_cell(&self) -> impl Iterator { // The negative bit is used to store whether a point belongs to a neighboring cell self.storage_slots .into_iter() @@ -360,7 +360,7 @@ impl PointsList { } } -pub struct AccelerationGrid { +struct AccelerationGrid { size: f64, dimension_x: usize, dimension_y: usize, @@ -369,7 +369,7 @@ pub struct AccelerationGrid { impl AccelerationGrid { #[inline(always)] - pub fn new(width: f64, height: f64, size: f64) -> Self { + fn new(width: f64, height: f64, size: f64) -> Self { let dimension_x = (width / size).ceil() as usize + 1; let dimension_y = (height / size).ceil() as usize + 1; @@ -382,7 +382,7 @@ impl AccelerationGrid { } #[inline(always)] - pub fn insert(&mut self, point: DVec2) { + fn insert(&mut self, point: DVec2) { let x = (point.x / self.size).floor() as usize; let y = (point.y / self.size).floor() as usize; @@ -408,7 +408,7 @@ impl AccelerationGrid { } #[inline(always)] - pub fn nearby_points(&self, point: DVec2) -> impl Iterator { + fn nearby_points(&self, point: DVec2) -> impl Iterator { let x = (point.x / self.size).floor() as usize; let y = (point.y / self.size).floor() as usize; @@ -416,7 +416,7 @@ impl AccelerationGrid { } #[inline(always)] - pub fn final_points(&self, offset: DVec2) -> Vec { + fn final_points(&self, offset: DVec2) -> Vec { self.cells.iter().flat_map(|cell| cell.list_cell()).map(|point| point + offset).collect() } } diff --git a/node-graph/libraries/vector-types/src/vector/algorithms/shapes.rs b/node-graph/libraries/vector-types/src/vector/algorithms/shapes.rs new file mode 100644 index 0000000000..33c6265cee --- /dev/null +++ b/node-graph/libraries/vector-types/src/vector/algorithms/shapes.rs @@ -0,0 +1,345 @@ +//! Constructors for the primitive shapes used by the vector generator nodes. +//! +//! Anchor order and winding direction are load-bearing, since fills rely on every generator agreeing. + +use crate::vector::misc::{ArcType, SpiralType, bezpath_from_anchors_and_handles}; +use glam::DVec2; +use kurbo::BezPath; +use std::f64::consts::TAU; + +/// Constant from +const HANDLE_OFFSET_FACTOR: f64 = 0.551784777779014; + +/// An anchor point with its optional incoming and outgoing handle positions, in absolute coordinates. +#[derive(Clone)] +struct Anchor { + position: DVec2, + in_handle: Option, + out_handle: Option, +} + +impl Anchor { + fn new(position: DVec2, in_handle: Option, out_handle: Option) -> Self { + Self { position, in_handle, out_handle } + } + + fn sharp(position: DVec2) -> Self { + Self::new(position, None, None) + } +} + +fn bezpath_from_anchors(anchors: &[Anchor], closed: bool) -> BezPath { + bezpath_from_anchors_and_handles(anchors.iter().map(|anchor| (anchor.position, anchor.in_handle, anchor.out_handle)), closed) +} + +/// Stitches a sequence of sharp (handleless) anchors into a polyline, or a closed polygon. +pub fn polyline_bezpath(positions: impl IntoIterator, closed: bool) -> BezPath { + let anchors: Vec = positions.into_iter().map(Anchor::sharp).collect(); + bezpath_from_anchors(&anchors, closed) +} + +/// Constructs a rectangle with `corner1` and `corner2` as the two corners. +pub fn rectangle_bezpath(corner1: DVec2, corner2: DVec2) -> BezPath { + polyline_bezpath([corner1, DVec2::new(corner2.x, corner1.y), corner2, DVec2::new(corner1.x, corner2.y)], true) +} + +/// Constructs a rounded rectangle with `corner1` and `corner2` as the two corners and `corner_radii` as the radii of the corners: `[top_left, top_right, bottom_right, bottom_left]`. +pub fn rounded_rectangle_bezpath(corner1: DVec2, corner2: DVec2, corner_radii: [f64; 4]) -> BezPath { + if corner_radii.iter().all(|radius| radius.abs() < f64::EPSILON * 100.) { + return rectangle_bezpath(corner1, corner2); + } + + use std::f64::consts::{FRAC_1_SQRT_2, PI}; + + // The pair of anchors where one rounded corner's arc leaves and rejoins the straight edges + let corner_anchors = |center: DVec2, corner: DVec2, radius: f64| -> Vec { + let point1 = center + DVec2::from_angle(-PI * 0.25).rotate(corner - center) * FRAC_1_SQRT_2; + let point2 = center + DVec2::from_angle(PI * 0.25).rotate(corner - center) * FRAC_1_SQRT_2; + if radius == 0. { + return vec![Anchor::sharp(point1), Anchor::sharp(point2)]; + } + + let handle_offset = radius * HANDLE_OFFSET_FACTOR; + vec![ + Anchor::new(point1, None, Some(point1 + handle_offset * (corner - point1).normalize())), + Anchor::new(point2, Some(point2 + handle_offset * (corner - point2).normalize()), None), + ] + }; + + let anchors = [ + corner_anchors(DVec2::new(corner1.x + corner_radii[0], corner1.y + corner_radii[0]), DVec2::new(corner1.x, corner1.y), corner_radii[0]), + corner_anchors(DVec2::new(corner2.x - corner_radii[1], corner1.y + corner_radii[1]), DVec2::new(corner2.x, corner1.y), corner_radii[1]), + corner_anchors(DVec2::new(corner2.x - corner_radii[2], corner2.y - corner_radii[2]), DVec2::new(corner2.x, corner2.y), corner_radii[2]), + corner_anchors(DVec2::new(corner1.x + corner_radii[3], corner2.y - corner_radii[3]), DVec2::new(corner1.x, corner2.y), corner_radii[3]), + ] + .concat(); + + bezpath_from_anchors(&anchors, true) +} + +/// Constructs an ellipse with `corner1` and `corner2` as the two corners of the bounding box. +pub fn ellipse_bezpath(corner1: DVec2, corner2: DVec2) -> BezPath { + let size = (corner1 - corner2).abs(); + let center = (corner1 + corner2) / 2.; + let top = DVec2::new(center.x, corner1.y); + let bottom = DVec2::new(center.x, corner2.y); + let left = DVec2::new(corner1.x, center.y); + let right = DVec2::new(corner2.x, center.y); + + let handle_offset = size * HANDLE_OFFSET_FACTOR * 0.5; + + let anchors = [ + Anchor::new(top, Some(top - handle_offset * DVec2::X), Some(top + handle_offset * DVec2::X)), + Anchor::new(right, Some(right - handle_offset * DVec2::Y), Some(right + handle_offset * DVec2::Y)), + Anchor::new(bottom, Some(bottom + handle_offset * DVec2::X), Some(bottom - handle_offset * DVec2::X)), + Anchor::new(left, Some(left + handle_offset * DVec2::Y), Some(left - handle_offset * DVec2::Y)), + ]; + + bezpath_from_anchors(&anchors, true) +} + +/// Constructs an arc by a `radius`, `start_angle` and `sweep_angle`. Angles must be in radians. The arc type makes it look like a pie or pacman. +pub fn arc_bezpath(radius: f64, start_angle: f64, sweep_angle: f64, arc_type: ArcType) -> BezPath { + // Prevents glitches from numerical imprecision that have been observed during animation playback after about a minute + let start_angle = start_angle % (TAU * 2.); + let sweep_angle = sweep_angle % (TAU * 2.); + + let original_start_angle = start_angle; + let sweep_angle_sign = sweep_angle.signum(); + + let mut start_angle = 0.; + let mut sweep_angle = sweep_angle.abs(); + + if ((sweep_angle / TAU).floor() as u32).is_multiple_of(2) { + sweep_angle %= TAU; + } else { + start_angle = sweep_angle % TAU; + sweep_angle = TAU - start_angle; + } + + sweep_angle *= sweep_angle_sign; + start_angle *= sweep_angle_sign; + start_angle += original_start_angle; + + let closed = arc_type == ArcType::Closed; + let slice = arc_type == ArcType::PieSlice; + + let center = DVec2::new(0., 0.); + let segments = (sweep_angle.abs() / (std::f64::consts::PI / 4.)).ceil().max(1.) as usize; + let step = sweep_angle / segments as f64; + let factor = 4. / 3. * (step / 2.).sin() / (1. + (step / 2.).cos()); + + let mut anchors = Vec::with_capacity(segments); + let mut prev_in_handle = None; + let mut prev_end = DVec2::new(0., 0.); + + for i in 0..segments { + let start_angle = start_angle + step * i as f64; + let end_angle = start_angle + step; + let start_vec = DVec2::from_angle(start_angle); + let end_vec = DVec2::from_angle(end_angle); + + let start = center + radius * start_vec; + let end = center + radius * end_vec; + + let handle_start = start + start_vec.perp() * radius * factor; + let handle_end = end - end_vec.perp() * radius * factor; + + anchors.push(Anchor::new(start, prev_in_handle, Some(handle_start))); + prev_in_handle = Some(handle_end); + prev_end = end; + } + anchors.push(Anchor::new(prev_end, prev_in_handle, None)); + + if slice { + anchors.push(Anchor::sharp(center)); + } + + bezpath_from_anchors(&anchors, closed || slice) +} + +/// Constructs a regular polygon (ngon). Based on `sides` and `radius`, which is the distance from the center to any vertex. +pub fn regular_polygon_bezpath(center: DVec2, sides: u64, radius: f64) -> BezPath { + let sides = sides.max(3); + let angle_increment = TAU / (sides as f64); + let positions = (0..sides).map(|i| { + let angle = (i as f64) * angle_increment - std::f64::consts::FRAC_PI_2; + center + radius * DVec2::new(f64::cos(angle), f64::sin(angle)) + }); + + polyline_bezpath(positions, true) +} + +/// Constructs a star polygon (n-star). See [`regular_polygon_bezpath`], but with interspersed vertices at an `inner_radius`. +pub fn star_polygon_bezpath(center: DVec2, sides: u64, radius: f64, inner_radius: f64) -> BezPath { + let sides = sides.max(2); + let angle_increment = 0.5 * TAU / (sides as f64); + let positions = (0..sides * 2).map(|i| { + let angle = (i as f64) * angle_increment - std::f64::consts::FRAC_PI_2; + let radius = if i % 2 == 0 { radius } else { inner_radius }; + center + radius * DVec2::new(f64::cos(angle), f64::sin(angle)) + }); + + polyline_bezpath(positions, true) +} + +/// Constructs a line from `point1` to `point2`. +pub fn line_bezpath(point1: DVec2, point2: DVec2) -> BezPath { + polyline_bezpath([point1, point2], false) +} + +/// Constructs an arrow shape from start and end points with parametric control over dimensions. +pub fn arrow_bezpath(start: DVec2, end: DVec2, shaft_width: f64, head_width: f64, head_length: f64) -> BezPath { + let delta = end - start; + let length = delta.length(); + + // Degenerate case: return a point + if length < 1e-10 { + return polyline_bezpath([start], true); + } + + let direction = delta / length; + let perpendicular = DVec2::new(-direction.y, direction.x); + + let half_shaft = shaft_width * 0.5; + let half_head = head_width * 0.5; + let head_base_distance = (length - head_length).max(0.); + let head_base = start + direction * head_base_distance; + + // Arrow path starts at the tail, traces around the shape, and returns to the tail + let positions = [ + start, // Tail center (origin) + start + perpendicular * half_shaft, // Tail top + head_base + perpendicular * half_shaft, // Head base top (shaft) + head_base + perpendicular * half_head, // Head base top (wide) + end, // Tip + head_base - perpendicular * half_head, // Head base bottom (wide) + head_base - perpendicular * half_shaft, // Head base bottom (shaft) + start - perpendicular * half_shaft, // Tail bottom + ]; + + polyline_bezpath(positions, true) +} + +/// Constructs a spiral winding from an inner radius `a` out to `outer_radius`, sampled every `delta_theta` radians. +pub fn spiral_bezpath(a: f64, outer_radius: f64, turns: f64, start_angle: f64, delta_theta: f64, spiral_type: SpiralType) -> BezPath { + let mut anchors = Vec::new(); + let mut prev_in_handle = None; + let theta_end = turns * TAU + start_angle; + + let a = if spiral_type == SpiralType::Logarithmic { a.max(1e-10) } else { a }; + let b = calculate_growth_factor(a, turns, outer_radius, spiral_type); + + let mut theta = start_angle; + while theta < theta_end { + let theta_next = f64::min(theta + delta_theta, theta_end); + + let p0 = spiral_point(theta, a, b, spiral_type); + let p3 = spiral_point(theta_next, a, b, spiral_type); + let t0 = spiral_tangent(theta, a, b, spiral_type); + let t1 = spiral_tangent(theta_next, a, b, spiral_type); + + let arc_length = spiral_arc_length(theta, theta_next, a, b, spiral_type); + let handle_distance = arc_length / 3.; + + let p1 = p0 + handle_distance * t0; + let p2 = p3 - handle_distance * t1; + + anchors.push(Anchor::new(p0, prev_in_handle, Some(p1))); + prev_in_handle = Some(p2); + + // If final segment, end with anchor at theta_end + if (theta_next - theta_end).abs() < f64::EPSILON { + anchors.push(Anchor::new(p3, prev_in_handle, None)); + break; + } + + theta = theta_next; + } + + bezpath_from_anchors(&anchors, false) +} + +pub fn calculate_growth_factor(a: f64, turns: f64, outer_radius: f64, spiral_type: SpiralType) -> f64 { + match spiral_type { + SpiralType::Archimedean => { + let total_theta = turns * TAU; + (outer_radius - a) / total_theta + } + SpiralType::Logarithmic => { + let total_theta = turns * TAU; + ((outer_radius.abs() / a).ln()) / total_theta + } + } +} + +/// Returns a point on the given spiral type at angle `theta`. +pub fn spiral_point(theta: f64, a: f64, b: f64, spiral_type: SpiralType) -> DVec2 { + match spiral_type { + SpiralType::Archimedean => archimedean_spiral_point(theta, a, b), + SpiralType::Logarithmic => log_spiral_point(theta, a, b), + } +} + +/// Returns the tangent direction at angle `theta` for the given spiral type. +fn spiral_tangent(theta: f64, a: f64, b: f64, spiral_type: SpiralType) -> DVec2 { + match spiral_type { + SpiralType::Archimedean => archimedean_spiral_tangent(theta, a, b), + SpiralType::Logarithmic => log_spiral_tangent(theta, a, b), + } +} + +/// Computes arc length between two angles for the given spiral type. +fn spiral_arc_length(theta_start: f64, theta_end: f64, a: f64, b: f64, spiral_type: SpiralType) -> f64 { + match spiral_type { + SpiralType::Archimedean => archimedean_spiral_arc_length(theta_start, theta_end, a, b), + SpiralType::Logarithmic => log_spiral_arc_length(theta_start, theta_end, a, b), + } +} + +/// Returns a point on a logarithmic spiral at angle `theta`. +fn log_spiral_point(theta: f64, a: f64, b: f64) -> DVec2 { + let r = a * (b * theta).exp(); // a * e^(bΞΈ) + DVec2::new(r * theta.cos(), -r * theta.sin()) +} + +/// Computes arc length along a logarithmic spiral between two angles. +fn log_spiral_arc_length(theta_start: f64, theta_end: f64, a: f64, b: f64) -> f64 { + let factor = (1. + b * b).sqrt(); + (a / b) * factor * ((b * theta_end).exp() - (b * theta_start).exp()) +} + +/// Returns the tangent direction of a logarithmic spiral at angle `theta`. +fn log_spiral_tangent(theta: f64, a: f64, b: f64) -> DVec2 { + let r = a * (b * theta).exp(); + let dx = r * (b * theta.cos() - theta.sin()); + let dy = r * (b * theta.sin() + theta.cos()); + + DVec2::new(dx, -dy).normalize_or(DVec2::X) +} + +/// Returns a point on an Archimedean spiral at angle `theta`. +fn archimedean_spiral_point(theta: f64, a: f64, b: f64) -> DVec2 { + let r = a + b * theta; + DVec2::new(r * theta.cos(), -r * theta.sin()) +} + +/// Returns the tangent direction of an Archimedean spiral at angle `theta`. +fn archimedean_spiral_tangent(theta: f64, a: f64, b: f64) -> DVec2 { + let r = a + b * theta; + let dx = b * theta.cos() - r * theta.sin(); + let dy = b * theta.sin() + r * theta.cos(); + DVec2::new(dx, -dy).normalize_or(DVec2::X) +} + +/// Computes arc length along an Archimedean spiral between two angles. +fn archimedean_spiral_arc_length(theta_start: f64, theta_end: f64, a: f64, b: f64) -> f64 { + archimedean_spiral_arc_length_origin(theta_end, a, b) - archimedean_spiral_arc_length_origin(theta_start, a, b) +} + +/// Computes arc length from origin to a point on Archimedean spiral at angle `theta`. +fn archimedean_spiral_arc_length_origin(theta: f64, a: f64, b: f64) -> f64 { + let r = a + b * theta; + let sqrt_term = (r * r + b * b).sqrt(); + (r * sqrt_term + b * b * ((r + sqrt_term).ln())) / (2. * b) +} diff --git a/node-graph/libraries/vector-types/src/vector/algorithms/spline.rs b/node-graph/libraries/vector-types/src/vector/algorithms/spline.rs index e03d84ce3b..262e8d94a6 100644 --- a/node-graph/libraries/vector-types/src/vector/algorithms/spline.rs +++ b/node-graph/libraries/vector-types/src/vector/algorithms/spline.rs @@ -150,7 +150,7 @@ mod tests { // List of first handle or second point in a cubic bezier curve. let first_handles = solve_spline_first_handle_closed(&points); - // Construct the Subpath + // Construct the subpath let mut bezpath = BezPath::new(); bezpath.move_to(dvec2_to_point(points[0])); diff --git a/node-graph/libraries/vector-types/src/vector/algorithms/util.rs b/node-graph/libraries/vector-types/src/vector/algorithms/util.rs index 0c2eacf7ce..662f47e2c5 100644 --- a/node-graph/libraries/vector-types/src/vector/algorithms/util.rs +++ b/node-graph/libraries/vector-types/src/vector/algorithms/util.rs @@ -14,22 +14,16 @@ pub fn pathseg_tangent(segment: PathSeg, t: f64) -> DVec2 { DVec2::new(tangent.x, tangent.y) } -// Compare two f64s with some maximum absolute difference to account for floating point errors -#[cfg(test)] -pub fn compare_f64s(f1: f64, f2: f64) -> bool { - (f1 - f2).abs() < super::contants::MAX_ABSOLUTE_DIFFERENCE -} - /// Compare points by allowing some maximum absolute difference to account for floating point errors #[cfg(test)] -pub fn compare_points(p1: kurbo::Point, p2: kurbo::Point) -> bool { +pub(crate) fn compare_points(p1: kurbo::Point, p2: kurbo::Point) -> bool { let (p1, p2) = (crate::vector::misc::point_to_dvec2(p1), crate::vector::misc::point_to_dvec2(p2)); - p1.abs_diff_eq(p2, super::contants::MAX_ABSOLUTE_DIFFERENCE) + p1.abs_diff_eq(p2, super::consts::MAX_ABSOLUTE_DIFFERENCE) } /// Compare vectors of points by allowing some maximum absolute difference to account for floating point errors #[cfg(test)] -pub fn compare_vec_of_points(a: Vec, b: Vec, max_absolute_difference: f64) -> bool { +pub(crate) fn compare_vec_of_points(a: Vec, b: Vec, max_absolute_difference: f64) -> bool { a.len() == b.len() && a.into_iter() .zip(b) @@ -39,6 +33,6 @@ pub fn compare_vec_of_points(a: Vec, b: Vec, max_abs /// Compare the two values in a `DVec2` independently with a provided max absolute value difference. #[cfg(test)] -pub fn dvec2_compare(a: kurbo::Point, b: kurbo::Point, max_abs_diff: f64) -> glam::BVec2 { +pub(crate) fn dvec2_compare(a: kurbo::Point, b: kurbo::Point, max_abs_diff: f64) -> glam::BVec2 { glam::BVec2::new((a.x - b.x).abs() < max_abs_diff, (a.y - b.y).abs() < max_abs_diff) } diff --git a/node-graph/libraries/vector-types/src/vector/click_target.rs b/node-graph/libraries/vector-types/src/vector/click_target.rs index e97ea4be8b..ddb1d8b157 100644 --- a/node-graph/libraries/vector-types/src/vector/click_target.rs +++ b/node-graph/libraries/vector-types/src/vector/click_target.rs @@ -3,16 +3,42 @@ use std::sync::{Arc, RwLock}; use super::algorithms::{bezpath_algorithms::bezpath_is_inside_bezpath, intersection::filtered_segment_intersections}; use super::misc::dvec2_to_point; use crate::math::QuadExt; -use crate::subpath::Subpath; use crate::vector::PointId; -use crate::vector::misc::point_to_dvec2; use core_types::math::quad::Quad; use core_types::transform::Transform; use glam::{DAffine2, DMat2, DVec2}; -use kurbo::{Affine, BezPath, ParamCurve, PathSeg, Shape}; +use kurbo::{Affine, BezPath, ParamCurve, PathEl, PathSeg, Shape}; type BoundingBox = Option<[DVec2; 2]>; +/// Per-segment tight bounding box union of the transformed path, or None if the path has no segments. +fn bezpath_bounding_box_with_transform(bezpath: &BezPath, transform: DAffine2) -> BoundingBox { + let affine = Affine::new(transform.to_cols_array()); + bezpath + .segments() + .map(|segment| (affine * segment).bounding_box()) + .reduce(|a, b| a.union(b)) + .map(|rect| [DVec2::new(rect.min_x(), rect.min_y()), DVec2::new(rect.max_x(), rect.max_y())]) +} + +/// The explicitly closed contours of the path, which together form its fillable region. +fn closed_contours(bezpath: &BezPath) -> BezPath { + let elements = bezpath.elements(); + let mut kept = Vec::new(); + let mut contour_start = 0; + + for (index, element) in elements.iter().enumerate() { + if matches!(element, PathEl::MoveTo(_)) { + contour_start = index; + } + if matches!(element, PathEl::ClosePath) { + kept.extend_from_slice(&elements[contour_start..=index]); + } + } + + BezPath::from_vec(kept) +} + #[derive(Copy, Clone, Debug, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct FreePoint { @@ -33,11 +59,10 @@ impl FreePoint { #[derive(Clone, Debug, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub enum ClickTargetType { - Subpath(Subpath), - FreePoint(FreePoint), - /// Multiple subpaths tested as one compound shape using the non-zero fill rule, so holes + /// One or more contours tested as one compound shape using the non-zero fill rule, so holes /// (e.g. the inside of an "O") correctly count as outside the fill. - CompoundPath(Vec>), + Path(BezPath), + FreePoint(FreePoint), } /// Fixed-size ring buffer cache for rotated bounding boxes. @@ -93,9 +118,9 @@ impl BoundingBoxCache { } /// Computes and caches bounding box for the given rotation, then applies scale/translation. /// Returns the final transformed bounds. - fn add_to_cache(&mut self, subpath: &Subpath, rotation: f64, scale: DVec2, translation: DVec2, fingerprint: u8) -> BoundingBox { + fn add_to_cache(&mut self, bezpath: &BezPath, rotation: f64, scale: DVec2, translation: DVec2, fingerprint: u8) -> BoundingBox { // Compute bounds for pure rotation (expensive operation we want to cache) - let bounds = subpath.bounding_box_with_transform(DAffine2::from_angle(rotation)); + let bounds = bezpath_bounding_box_with_transform(bezpath, DAffine2::from_angle(rotation)); if bounds.is_none() { return bounds; @@ -137,23 +162,12 @@ impl PartialEq for ClickTarget { } impl ClickTarget { - pub fn new_with_subpath(subpath: Subpath, stroke_width: f64) -> Self { - let bounding_box = subpath.loose_bounding_box(); + pub fn new_with_path(path: BezPath, stroke_width: f64) -> Self { + // The control-point hull serves as the loose bounding box + let control_box = path.control_box(); + let bounding_box = (!path.elements().is_empty()).then(|| [DVec2::new(control_box.min_x(), control_box.min_y()), DVec2::new(control_box.max_x(), control_box.max_y())]); Self { - target_type: ClickTargetType::Subpath(subpath), - stroke_width, - bounding_box, - bounding_box_cache: Default::default(), - } - } - - pub fn new_with_compound_path(subpaths: Vec>, stroke_width: f64) -> Self { - let bounding_box = subpaths - .iter() - .filter_map(|subpath| subpath.loose_bounding_box()) - .reduce(|[a_min, a_max], [b_min, b_max]| [a_min.min(b_min), a_max.max(b_max)]); - Self { - target_type: ClickTargetType::CompoundPath(subpaths), + target_type: ClickTargetType::Path(path), stroke_width, bounding_box, bounding_box_cache: Default::default(), @@ -190,10 +204,10 @@ impl ClickTarget { pub fn bounding_box_with_transform(&self, transform: DAffine2) -> BoundingBox { match self.target_type { - ClickTargetType::Subpath(ref subpath) => { + ClickTargetType::Path(ref path) => { // Bypass cache for skewed transforms since rotation decomposition isn't valid if transform.has_skew() { - return subpath.bounding_box_with_transform(transform); + return bezpath_bounding_box_with_transform(path, transform); } // Decompose transform into rotation, scale, translation for caching strategy @@ -213,12 +227,8 @@ impl ClickTarget { // Cache miss - compute and store new entry let mut write_lock = self.bounding_box_cache.write().unwrap(); - write_lock.add_to_cache(subpath, rotation, scale, translation, fingerprint) + write_lock.add_to_cache(path, rotation, scale, translation, fingerprint) } - ClickTargetType::CompoundPath(ref subpaths) => subpaths - .iter() - .filter_map(|subpath| subpath.bounding_box_with_transform(transform)) - .reduce(|[a_min, a_max], [b_min, b_max]| [a_min.min(b_min), a_max.max(b_max)]), // TODO: use point for calculation of bbox ClickTargetType::FreePoint(_) => self.bounding_box.map(|[a, b]| [transform.transform_point2(a), transform.transform_point2(b)]), } @@ -226,13 +236,8 @@ impl ClickTarget { pub fn apply_transform(&mut self, affine_transform: DAffine2) { match self.target_type { - ClickTargetType::Subpath(ref mut subpath) => { - subpath.apply_transform(affine_transform); - } - ClickTargetType::CompoundPath(ref mut subpaths) => { - for subpath in subpaths { - subpath.apply_transform(affine_transform); - } + ClickTargetType::Path(ref mut path) => { + path.apply_affine(Affine::new(affine_transform.to_cols_array())); } ClickTargetType::FreePoint(ref mut point) => { point.apply_transform(affine_transform); @@ -243,14 +248,8 @@ impl ClickTarget { fn update_bbox(&mut self) { match self.target_type { - ClickTargetType::Subpath(ref subpath) => { - self.bounding_box = subpath.bounding_box(); - } - ClickTargetType::CompoundPath(ref subpaths) => { - self.bounding_box = subpaths - .iter() - .filter_map(|subpath| subpath.bounding_box()) - .reduce(|[a_min, a_max], [b_min, b_max]| [a_min.min(b_min), a_max.max(b_max)]); + ClickTargetType::Path(ref path) => { + self.bounding_box = bezpath_bounding_box_with_transform(path, DAffine2::IDENTITY); } ClickTargetType::FreePoint(ref point) => { self.bounding_box = Some([point.position - DVec2::splat(self.stroke_width / 2.), point.position + DVec2::splat(self.stroke_width / 2.)]); @@ -270,43 +269,26 @@ impl ClickTarget { let mut bezier_iter = || bezier_iter().map(|bezier| Affine::new(inverse.to_cols_array()) * bezier); match self.target_type() { - ClickTargetType::Subpath(subpath) => { - // Check if outlines intersect - let outline_intersects = |path_segment: PathSeg| bezier_iter().any(|line| !filtered_segment_intersections(path_segment, line, None, None).is_empty()); - if subpath.iter().any(outline_intersects) { - return true; - } - // Check if selection is entirely within the shape - if subpath.closed() && bezier_iter().next().is_some_and(|bezier| subpath.contains_point(point_to_dvec2(bezier.start()))) { - return true; - } - - let mut selection = BezPath::from_path_segments(bezier_iter()); - selection.close_path(); - - // Check if shape is entirely within selection - bezpath_is_inside_bezpath(&subpath.to_bezpath(), &selection, None, None) - } - ClickTargetType::CompoundPath(subpaths) => { + ClickTargetType::Path(path) => { // Outline intersection (catches strokes and both filled/unfilled shapes) let outline_intersects = |path_segment: PathSeg| bezier_iter().any(|line| !filtered_segment_intersections(path_segment, line, None, None).is_empty()); - if subpaths.iter().flat_map(|subpath| subpath.iter()).any(outline_intersects) { + if path.segments().any(outline_intersects) { return true; } - // Selection point inside compound fill (non-zero rule). - // Only closed subpaths contribute to the fill region; open segments would otherwise produce spurious winding on one side of the segment. - let combined: BezPath = subpaths.iter().filter(|subpath| subpath.closed()).flat_map(|subpath| subpath.to_bezpath()).collect(); - if !combined.is_empty() && bezier_iter().next().is_some_and(|bezier| combined.contains(bezier.start())) { + // Selection point inside the fill (non-zero rule). + // Only closed contours contribute to the fill region; open segments would otherwise produce spurious winding on one side of the segment. + let fill_region = closed_contours(path); + if !fill_region.is_empty() && bezier_iter().next().is_some_and(|segment| fill_region.contains(segment.start())) { return true; } - // Build closed selection path, then check if all contours are entirely within it + // Build closed selection path, then check if the whole shape is entirely within it let mut selection = BezPath::from_path_segments(bezier_iter()); selection.close_path(); - subpaths.iter().all(|subpath| bezpath_is_inside_bezpath(&subpath.to_bezpath(), &selection, None, None)) + bezpath_is_inside_bezpath(path, &selection, None, None) } - ClickTargetType::FreePoint(point) => bezier_iter().map(|bezier: PathSeg| bezier.winding(dvec2_to_point(point.position))).sum::() != 0, + ClickTargetType::FreePoint(point) => bezier_iter().map(|segment: PathSeg| segment.winding(dvec2_to_point(point.position))).sum::() != 0, } } @@ -337,11 +319,7 @@ impl ClickTarget { { // Check if the point is within the shape match self.target_type() { - ClickTargetType::Subpath(subpath) => subpath.closed() && subpath.contains_point(point), - ClickTargetType::CompoundPath(subpaths) => { - let combined: BezPath = subpaths.iter().flat_map(|subpath| subpath.to_bezpath()).collect(); - combined.contains(dvec2_to_point(point)) - } + ClickTargetType::Path(path) => closed_contours(path).contains(dvec2_to_point(point)), ClickTargetType::FreePoint(free_point) => free_point.position == point, } } else { @@ -353,10 +331,14 @@ impl ClickTarget { #[cfg(test)] mod tests { use super::*; - use crate::subpath::Subpath; use glam::DVec2; + use kurbo::{DEFAULT_ACCURACY, Rect}; use std::f64::consts::PI; + fn rectangle_path(corner1: DVec2, corner2: DVec2) -> BezPath { + Rect::new(corner1.x, corner1.y, corner2.x, corner2.y).to_path(DEFAULT_ACCURACY) + } + #[test] fn test_bounding_box_cache_fingerprint_generation() { // Test that fingerprints have MSB set and use only 7 bits for data @@ -386,8 +368,8 @@ mod tests { fn test_bounding_box_cache_basic_operations() { let mut cache = BoundingBoxCache::default(); - // Create a simple rectangle subpath for testing - let subpath = Subpath::new_rectangle(DVec2::ZERO, DVec2::new(100., 50.)); + // Create a simple rectangle path for testing + let path = rectangle_path(DVec2::ZERO, DVec2::new(100., 50.)); let rotation = PI / 4.; let scale = DVec2::new(2., 2.); @@ -398,7 +380,7 @@ mod tests { assert!(cache.try_read(rotation, scale, translation, fingerprint).is_none()); // Add to cache - let result = cache.add_to_cache(&subpath, rotation, scale, translation, fingerprint); + let result = cache.add_to_cache(&path, rotation, scale, translation, fingerprint); assert!(result.is_some()); // Should now be able to read from cache @@ -410,7 +392,7 @@ mod tests { #[test] fn test_bounding_box_cache_ring_buffer_behavior() { let mut cache = BoundingBoxCache::default(); - let subpath = Subpath::new_rectangle(DVec2::ZERO, DVec2::new(10., 10.)); + let path = rectangle_path(DVec2::ZERO, DVec2::new(10., 10.)); let scale = DVec2::ONE; let translation = DVec2::ZERO; @@ -419,7 +401,7 @@ mod tests { for rotation in &rotations { let fingerprint = BoundingBoxCache::rotation_fingerprint(*rotation); - cache.add_to_cache(&subpath, *rotation, scale, translation, fingerprint); + cache.add_to_cache(&path, *rotation, scale, translation, fingerprint); } // First two entries should be overwritten (cache size is 8) @@ -435,8 +417,8 @@ mod tests { #[test] fn test_click_target_bounding_box_caching() { // Create a click target with a simple rectangle - let subpath = Subpath::new_rectangle(DVec2::ZERO, DVec2::new(100., 50.)); - let click_target = ClickTarget::new_with_subpath(subpath, 1.); + let path = rectangle_path(DVec2::ZERO, DVec2::new(100., 50.)); + let click_target = ClickTarget::new_with_path(path, 1.); let rotation = PI / 6.; let scale = DVec2::new(1.5, 1.5); @@ -472,8 +454,8 @@ mod tests { #[test] fn test_click_target_skew_bypass_cache() { - let subpath = Subpath::new_rectangle(DVec2::ZERO, DVec2::new(100., 50.)); - let click_target = ClickTarget::new_with_subpath(subpath.clone(), 1.); + let path = rectangle_path(DVec2::ZERO, DVec2::new(100., 50.)); + let click_target = ClickTarget::new_with_path(path.clone(), 1.); // Create a transform with skew (non-uniform scaling in different directions) let skew_transform = DAffine2::from_cols_array(&[2., 0.5, 0., 1., 10., 20.]); @@ -481,14 +463,14 @@ mod tests { // Should bypass cache and compute directly let result = click_target.bounding_box_with_transform(skew_transform); - let expected = subpath.bounding_box_with_transform(skew_transform); + let expected = bezpath_bounding_box_with_transform(&path, skew_transform); assert_eq!(result, expected); } #[test] fn test_cache_fingerprint_collision_handling() { let mut cache = BoundingBoxCache::default(); - let subpath = Subpath::new_rectangle(DVec2::ZERO, DVec2::new(10., 10.)); + let path = rectangle_path(DVec2::ZERO, DVec2::new(10., 10.)); let scale = DVec2::ONE; let translation = DVec2::ZERO; @@ -501,7 +483,7 @@ mod tests { // If we found a collision, test that exact rotation matching still works if fp1 == fp2 && rotation1 != rotation2 { // Add first rotation - cache.add_to_cache(&subpath, rotation1, scale, translation, fp1); + cache.add_to_cache(&path, rotation1, scale, translation, fp1); // Should find the exact rotation assert!(cache.try_read(rotation1, scale, translation, fp1).is_some()); diff --git a/node-graph/libraries/vector-types/src/vector/misc.rs b/node-graph/libraries/vector-types/src/vector/misc.rs index a7564fd855..b889bf87f0 100644 --- a/node-graph/libraries/vector-types/src/vector/misc.rs +++ b/node-graph/libraries/vector-types/src/vector/misc.rs @@ -1,10 +1,11 @@ use super::PointId; -use super::algorithms::offset_subpath::MAX_ABSOLUTE_DIFFERENCE; -use crate::subpath::{BezierHandles, ManipulatorGroup}; +use super::algorithms::consts::MAX_COINCIDENT_POINT_DISTANCE; use crate::vector::{SegmentId, Vector}; +use core_types::list::{Item, List}; use dyn_any::DynAny; -use glam::DVec2; +use glam::{DAffine2, DVec2}; use kurbo::{BezPath, CubicBez, Line, ParamCurve, ParamCurveDeriv, PathSeg, Point, QuadBez}; +use std::fmt::{Debug, Formatter}; use std::ops::Sub; #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] @@ -49,6 +50,57 @@ pub enum RowsOrColumns { Columns, } +/// A box's four corner values, such as a rectangle's corner radii, expanded on read from any number of stored +/// values by the CSS `border-radius` shorthand rules. +/// +/// Wraps a `List` so the Data panel can introspect its values, mirroring how `DashPattern` wraps its lengths, +/// while remaining a single rank-0 value on the wire. +#[derive(Default, Debug, Clone, PartialEq, graphene_hash::CacheHash, DynAny)] +pub struct BoxCorners(pub List); + +impl BoxCorners { + /// Expands the stored values to the four corners, clockwise from the top-left, by the CSS `border-radius` shorthand rules. + /// - `[]` β†’ `[0, 0, 0, 0]` + /// - `[a]` β†’ `[a, a, a, a]` + /// - `[a, b]` β†’ `[a, b, a, b]` + /// - `[a, b, c]` β†’ `[a, b, c, b]` + /// - `[a, b, c, d, …]` β†’ `[a, b, c, d]` + pub fn to_corner_values(&self) -> [f64; 4] { + let values: Vec = self.0.iter_element_values().copied().collect(); + match values.as_slice() { + [] => [0., 0., 0., 0.], + &[a] => [a, a, a, a], + &[a, b] => [a, b, a, b], + &[a, b, c] => [a, b, c, b], + &[a, b, c, d, ..] => [a, b, c, d], + } + } +} + +impl From for BoxCorners { + fn from(value: f64) -> Self { + Self(List::new_from_element(value)) + } +} + +impl From> for BoxCorners { + fn from(values: Vec) -> Self { + Self(values.into_iter().map(Item::new_from_element).collect()) + } +} + +impl From<&str> for BoxCorners { + fn from(text: &str) -> Self { + Self::from(core_types::misc::parse_f64_list(text)) + } +} + +impl From for BoxCorners { + fn from(text: String) -> Self { + Self::from(text.as_str()) + } +} + pub trait AsU64 { fn as_u64(&self) -> u64; } @@ -68,25 +120,6 @@ impl AsU64 for f64 { } } -pub trait AsI64 { - fn as_i64(&self) -> i64; -} -impl AsI64 for u32 { - fn as_i64(&self) -> i64 { - *self as i64 - } -} -impl AsI64 for u64 { - fn as_i64(&self) -> i64 { - *self as i64 - } -} -impl AsI64 for f64 { - fn as_i64(&self) -> i64 { - *self as i64 - } -} - #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, DynAny, node_macro::ChoiceType)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] @@ -103,9 +136,12 @@ pub enum GridType { #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[widget(Radio)] pub enum ArcType { + /// Leaves the two ends of the arc unconnected. #[default] Open = 0, + /// Connects the two ends of the arc with a straight line. Closed, + /// Connects the two ends of the arc to its center, forming a wedge. PieSlice, } @@ -191,38 +227,44 @@ pub fn handles_to_segment(start: DVec2, handles: BezierHandles, end: DVec2) -> P } } -pub fn bezpath_from_manipulator_groups(manipulator_groups: &[ManipulatorGroup], closed: bool) -> BezPath { - let mut bezpath = kurbo::BezPath::new(); - let mut out_handle; +/// Stitches anchors into a path, emitting a cubic when both facing handles exist, a quadratic when only one does, and a line otherwise. +/// +/// Each item is an anchor position paired with its incoming and outgoing handle positions, in absolute coordinates. +pub fn bezpath_from_anchors_and_handles(anchors: impl IntoIterator, Option)>, closed: bool) -> BezPath { + let mut bezpath = BezPath::new(); + let mut anchors = anchors.into_iter(); - let Some(first) = manipulator_groups.first() else { return bezpath }; - bezpath.move_to(dvec2_to_point(first.anchor)); - out_handle = first.out_handle; + let Some((first_anchor, first_in_handle, first_out_handle)) = anchors.next() else { + return bezpath; + }; + bezpath.move_to(dvec2_to_point(first_anchor)); + let mut out_handle = first_out_handle; - for manipulator in manipulator_groups.iter().skip(1) { - match (out_handle, manipulator.in_handle) { - (Some(handle_start), Some(handle_end)) => bezpath.curve_to(dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(manipulator.anchor)), - (None, None) => bezpath.line_to(dvec2_to_point(manipulator.anchor)), - (None, Some(handle)) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(manipulator.anchor)), - (Some(handle), None) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(manipulator.anchor)), - } - out_handle = manipulator.out_handle; + let connect_to = |bezpath: &mut BezPath, out_handle: Option, anchor: DVec2, in_handle: Option| match (out_handle, in_handle) { + (Some(handle_start), Some(handle_end)) => bezpath.curve_to(dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(anchor)), + (None, None) => bezpath.line_to(dvec2_to_point(anchor)), + (None, Some(handle)) | (Some(handle), None) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(anchor)), + }; + + for (anchor, in_handle, anchor_out_handle) in anchors { + connect_to(&mut bezpath, out_handle, anchor, in_handle); + out_handle = anchor_out_handle; } if closed { - match (out_handle, first.in_handle) { - (Some(handle_start), Some(handle_end)) => bezpath.curve_to(dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(first.anchor)), - (None, None) => bezpath.line_to(dvec2_to_point(first.anchor)), - (None, Some(handle)) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(first.anchor)), - (Some(handle), None) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(first.anchor)), - } + connect_to(&mut bezpath, out_handle, first_anchor, first_in_handle); bezpath.close_path(); } + bezpath } -pub fn bezpath_to_manipulator_groups(bezpath: &BezPath) -> (Vec>, bool) { - let mut manipulator_groups = Vec::>::new(); +pub fn bezpath_from_manipulator_groups(manipulator_groups: &[ManipulatorGroup], closed: bool) -> BezPath { + bezpath_from_anchors_and_handles(manipulator_groups.iter().map(|group| (group.anchor, group.in_handle, group.out_handle)), closed) +} + +pub fn bezpath_to_manipulator_groups(bezpath: &BezPath) -> (Vec, bool) { + let mut manipulator_groups = Vec::::new(); let mut is_closed = false; for element in bezpath.elements() { @@ -257,7 +299,7 @@ pub fn bezpath_to_manipulator_groups(bezpath: &BezPath) -> (Vec bool { - let is_colinear = |a: Point, b: Point, c: Point| -> bool { ((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)).abs() < MAX_ABSOLUTE_DIFFERENCE }; + let is_colinear = |a: Point, b: Point, c: Point| -> bool { ((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)).abs() < MAX_COINCIDENT_POINT_DISTANCE }; match segment { PathSeg::Line(_) => true, @@ -267,7 +309,7 @@ pub fn is_linear(segment: PathSeg) -> bool { } /// Get an vec of all the points in a path segment. -pub fn pathseg_points_vec(segment: PathSeg) -> Vec { +fn pathseg_points_vec(segment: PathSeg) -> Vec { match segment { PathSeg::Line(line) => [line.p0, line.p1].to_vec(), PathSeg::Quad(quad_bez) => [quad_bez.p0, quad_bez.p1, quad_bez.p2].to_vec(), @@ -394,8 +436,8 @@ impl ManipulatorPointId { pub fn get_position(&self, vector: &Vector) -> Option { match self { ManipulatorPointId::Anchor(id) => vector.point_domain.position_from_id(*id), - ManipulatorPointId::PrimaryHandle(id) => vector.segment_from_id(*id).and_then(|bezier| bezier.handle_start()), - ManipulatorPointId::EndHandle(id) => vector.segment_from_id(*id).and_then(|bezier| bezier.handle_end()), + ManipulatorPointId::PrimaryHandle(id) => vector.segment_from_id(*id).and_then(|segment| segment_to_handles(&segment).start()), + ManipulatorPointId::EndHandle(id) => vector.segment_from_id(*id).and_then(|segment| segment_to_handles(&segment).end()), } } @@ -508,9 +550,9 @@ pub struct HandleId { impl std::fmt::Display for HandleId { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self.ty { - // I haven't checked if "out" and "in" are reversed, or are accurate translations of the "primary" and "end" terms used in the `HandleType` enum, so this naming is an assumption. - HandleType::Primary => write!(f, "{} out", self.segment.inner()), - HandleType::End => write!(f, "{} in", self.segment.inner()), + // The primary handle sits at the segment's start anchor and the end handle at its end anchor + HandleType::Primary => write!(f, "Segment {} (start handle)", self.segment.inner()), + HandleType::End => write!(f, "Segment {} (end handle)", self.segment.inner()), } } } @@ -598,3 +640,149 @@ graphene_hash::impl_via_hash!( SpiralType, InterpolationDistribution ); + +/// Structure used to represent a single anchor with up to two optional associated handles along a path. +#[derive(Copy, Clone, PartialEq, graphene_hash::CacheHash)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct ManipulatorGroup { + pub anchor: DVec2, + pub in_handle: Option, + pub out_handle: Option, + pub id: PointId, +} + +impl Debug for ManipulatorGroup { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + f.debug_struct("ManipulatorGroup") + .field("anchor", &self.anchor) + .field("in_handle", &self.in_handle) + .field("out_handle", &self.out_handle) + .finish() + } +} + +impl ManipulatorGroup { + /// Construct a new manipulator group from an anchor, in handle and out handle + pub fn new(anchor: DVec2, in_handle: Option, out_handle: Option) -> Self { + let id = PointId::generate(); + Self { anchor, in_handle, out_handle, id } + } + + /// Apply a transformation to all of the [ManipulatorGroup] points + pub fn apply_transform(&mut self, affine_transform: DAffine2) { + self.anchor = affine_transform.transform_point2(self.anchor); + self.in_handle = self.in_handle.map(|in_handle| affine_transform.transform_point2(in_handle)); + self.out_handle = self.out_handle.map(|out_handle| affine_transform.transform_point2(out_handle)); + } + + /// Are all handles at finite positions + pub fn is_finite(&self) -> bool { + self.anchor.is_finite() && self.in_handle.is_none_or(|handle| handle.is_finite()) && self.out_handle.is_none_or(|handle| handle.is_finite()) + } +} + +/// Representation of the handle point(s) in a bezier segment. +#[derive(Copy, Clone, PartialEq, Debug, graphene_hash::CacheHash)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub enum BezierHandles { + Linear, + /// Handles for a quadratic curve. + Quadratic { + /// Point representing the location of the single handle. + handle: DVec2, + }, + /// Handles for a cubic curve. + Cubic { + /// Point representing the location of the handle associated to the start point. + handle_start: DVec2, + /// Point representing the location of the handle associated to the end point. + handle_end: DVec2, + }, +} + +impl BezierHandles { + pub fn is_finite(&self) -> bool { + match self { + BezierHandles::Linear => true, + BezierHandles::Quadratic { handle } => handle.is_finite(), + BezierHandles::Cubic { handle_start, handle_end } => handle_start.is_finite() && handle_end.is_finite(), + } + } + + /// Get the coordinates of the bezier segment's first handle point. This represents the only handle in a quadratic segment. + pub fn start(&self) -> Option { + match *self { + BezierHandles::Cubic { handle_start, .. } | BezierHandles::Quadratic { handle: handle_start } => Some(handle_start), + _ => None, + } + } + + /// Get the coordinates of the second handle point. This will return `None` for a quadratic segment. + pub fn end(&self) -> Option { + match *self { + BezierHandles::Cubic { handle_end, .. } => Some(handle_end), + _ => None, + } + } + + pub fn move_start(&mut self, delta: DVec2) { + if let BezierHandles::Cubic { handle_start, .. } | BezierHandles::Quadratic { handle: handle_start } = self { + *handle_start += delta + } + } + + pub fn move_end(&mut self, delta: DVec2) { + if let BezierHandles::Cubic { handle_end, .. } = self { + *handle_end += delta + } + } + + /// Returns a Bezier curve that results from applying the transformation function to each handle point in the Bezier. + #[must_use] + pub fn apply_transformation(&self, transformation_function: impl Fn(DVec2) -> DVec2) -> Self { + match *self { + BezierHandles::Linear => Self::Linear, + BezierHandles::Quadratic { handle } => { + let handle = transformation_function(handle); + Self::Quadratic { handle } + } + BezierHandles::Cubic { handle_start, handle_end } => { + let handle_start = transformation_function(handle_start); + let handle_end = transformation_function(handle_end); + Self::Cubic { handle_start, handle_end } + } + } + } + + #[must_use] + pub fn reversed(self) -> Self { + match self { + BezierHandles::Cubic { handle_start, handle_end } => Self::Cubic { + handle_start: handle_end, + handle_end: handle_start, + }, + _ => self, + } + } +} + +pub struct PathSegPoints { + pub p0: DVec2, + pub p1: Option, + pub p2: Option, + pub p3: DVec2, +} + +impl PathSegPoints { + pub fn new(p0: DVec2, p1: Option, p2: Option, p3: DVec2) -> Self { + Self { p0, p1, p2, p3 } + } +} + +pub fn pathseg_points(segment: PathSeg) -> PathSegPoints { + match segment { + PathSeg::Line(line) => PathSegPoints::new(point_to_dvec2(line.p0), None, None, point_to_dvec2(line.p1)), + PathSeg::Quad(quad) => PathSegPoints::new(point_to_dvec2(quad.p0), None, Some(point_to_dvec2(quad.p1)), point_to_dvec2(quad.p2)), + PathSeg::Cubic(cube) => PathSegPoints::new(point_to_dvec2(cube.p0), Some(point_to_dvec2(cube.p1)), Some(point_to_dvec2(cube.p2)), point_to_dvec2(cube.p3)), + } +} diff --git a/node-graph/libraries/vector-types/src/vector/style.rs b/node-graph/libraries/vector-types/src/vector/style.rs index 321828c450..d1b5b51165 100644 --- a/node-graph/libraries/vector-types/src/vector/style.rs +++ b/node-graph/libraries/vector-types/src/vector/style.rs @@ -3,72 +3,71 @@ pub use crate::gradient::*; use core_types::Color; use core_types::color::SRGBA8; +use core_types::list::{Item, List}; use core_types::transform::Transform; use dyn_any::DynAny; use glam::DAffine2; use std::f64::consts::{PI, TAU}; -/// Describes an editable fill choice, storing color or gradient stops without gradient placement metadata. +/// The paint picker's choice of fill, generic over color format: `FillChoice` is the editor's in-memory +/// form, while `FillChoice` is the JS-boundary shape used by the color picker UI. Stores a color or +/// gradient ramp without gradient placement metadata, and is not stored in documents: paint inputs hold the +/// picked value as a plain color, gradient, or no-paint type default. /// -/// Can be None, a solid [Color], or a linear/radial [GradientStops]. +/// Can be None, a solid color, or the [`GradientRamp`] of a linear/radial gradient. /// /// In the future we'll probably also add a pattern fill. -/// -/// Use [`FillChoiceUI`] at the JS boundary. #[repr(C)] -#[derive(Default, Debug, Clone, PartialEq, graphene_hash::CacheHash, DynAny)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub enum FillChoice { - #[default] - None, - Solid(Color), - Gradient(GradientStops), -} - -// TODO: Deprecate [`FillChoice`] and keep this, renamed, as the main widget-controlling type -/// JS-boundary version of [`FillChoice`] where the solid color is [`SRGBA8`] and the gradient is [`GradientStopsUI`]. #[cfg_attr(feature = "wasm", derive(tsify::Tsify), tsify(from_wasm_abi))] -#[derive(Default, Debug, Clone, PartialEq, DynAny)] +#[derive(Default, Debug, Clone, PartialEq, graphene_hash::CacheHash)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub enum FillChoiceUI { +pub enum FillChoice { #[default] None, - Solid(SRGBA8), - Gradient(GradientStopsUI), + Solid(C), + Gradient(GradientRamp), } -impl From<&FillChoice> for FillChoiceUI { +unsafe impl dyn_any::StaticType for FillChoice { + type Static = FillChoice; +} + +impl From<&FillChoice> for FillChoice { fn from(value: &FillChoice) -> Self { match value { FillChoice::None => Self::None, FillChoice::Solid(color) => Self::Solid(SRGBA8::from(*color)), - FillChoice::Gradient(stops) => Self::Gradient(GradientStopsUI::from(stops)), + FillChoice::Gradient(ramp) => Self::Gradient(ramp.into()), } } } -impl From<&FillChoiceUI> for FillChoice { - fn from(value: &FillChoiceUI) -> Self { +impl From<&FillChoice> for FillChoice { + fn from(value: &FillChoice) -> Self { match value { - FillChoiceUI::None => Self::None, - FillChoiceUI::Solid(srgba) => Self::Solid(Color::from(*srgba)), - FillChoiceUI::Gradient(stops) => Self::Gradient(GradientStops::from(stops)), + FillChoice::None => Self::None, + FillChoice::Solid(srgba) => Self::Solid(Color::from(*srgba)), + FillChoice::Gradient(ramp) => Self::Gradient(ramp.into()), } } } -impl FillChoiceUI { - pub fn as_solid(&self) -> Option { - let Self::Solid(c) = self else { return None }; - Some(*c) +impl FillChoice { + pub fn as_solid(&self) -> Option { + let Self::Solid(color) = self else { return None }; + Some(*color) } +} - pub fn as_gradient(&self) -> Option<&GradientStopsUI> { - let Self::Gradient(g) = self else { return None }; - Some(g) +impl FillChoice { + pub fn as_gradient(&self) -> Option<&GradientRamp> { + let Self::Gradient(ramp) = self else { return None }; + Some(ramp) } +} - /// Build a CSS `background-image` string (always a `linear-gradient(...)`) representing this fill, or `None` if the fill is [`FillChoiceUI::None`]. +impl FillChoice { + /// Build a CSS `background-image` string representing this fill, or `None` if the fill is [`FillChoice::None`]. /// Solid colors become a degenerate gradient between the same color so the CSS variable can always be assigned to a `background-image`. pub fn to_css_background_image(&self) -> Option { match self { @@ -77,31 +76,7 @@ impl FillChoiceUI { let hex = srgba.to_rgba_hex(); Some(format!("linear-gradient(#{hex}, #{hex})")) } - Self::Gradient(stops) => Some(stops.to_css_linear_gradient()), - } - } -} - -impl FillChoice { - pub fn as_solid(&self) -> Option { - let Self::Solid(color) = self else { return None }; - Some(*color) - } - - pub fn as_gradient(&self) -> Option<&GradientStops> { - let Self::Gradient(gradient) = self else { return None }; - Some(gradient) - } - - /// Build a CSS `background-image` string (always a `linear-gradient(...)`) representing this fill, or `None` if the fill is [`FillChoice::None`]. Solid colors become a degenerate gradient between the same color so the CSS variable can always be assigned to a `background-image`. - pub fn to_css_background_image(&self) -> Option { - match self { - Self::None => None, - Self::Solid(color) => { - let hex = SRGBA8::from(*color).to_rgba_hex(); - Some(format!("linear-gradient(#{hex}, #{hex})")) - } - Self::Gradient(stops) => Some(stops.to_css_linear_gradient()), + Self::Gradient(ramp) => Some(ramp.stops.to_svg_background_image(ramp.into())), } } } @@ -116,18 +91,18 @@ pub enum StrokeCap { #[default] #[icon("StrokeCapButt")] Butt, - #[icon("StrokeCapRound")] - Round, #[icon("StrokeCapSquare")] Square, + #[icon("StrokeCapRound")] + Round, } impl StrokeCap { pub fn svg_name(&self) -> &'static str { match self { StrokeCap::Butt => "butt", - StrokeCap::Round => "round", StrokeCap::Square => "square", + StrokeCap::Round => "round", } } } @@ -178,6 +153,8 @@ impl StrokeAlign { } } +// Backs the control bar's stroke popover radio and legacy document parsing: the relative order +// of the Fill and Stroke nodes in the chain is what actually determines the paint order #[repr(C)] #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, graphene_hash::CacheHash, DynAny, node_macro::ChoiceType)] @@ -201,6 +178,45 @@ fn daffine2_identity() -> DAffine2 { DAffine2::IDENTITY } +/// A stroke's dash pattern: a sequence of lengths that alternate dash, gap, dash, gap, and so on. An odd-length +/// sequence repeats with the dash and gap roles swapped. +/// +/// Wraps a `List` so the Data panel can introspect its lengths, mirroring how `Artboard` wraps a `List`, +/// while remaining a single rank-0 value on the wire. +#[derive(Default, Debug, Clone, PartialEq, graphene_hash::CacheHash, DynAny)] +pub struct DashPattern(pub List); + +impl DashPattern { + /// Returns the dash lengths with any negative values clamped to zero. + pub fn clamped_lengths(&self) -> Vec { + self.0.iter_element_values().map(|length| length.max(0.)).collect() + } +} + +impl From for DashPattern { + fn from(length: f64) -> Self { + Self(List::new_from_element(length)) + } +} + +impl From> for DashPattern { + fn from(lengths: Vec) -> Self { + Self(lengths.into_iter().map(Item::new_from_element).collect()) + } +} + +impl From<&str> for DashPattern { + fn from(text: &str) -> Self { + Self::from(core_types::misc::parse_f64_list(text)) + } +} + +impl From for DashPattern { + fn from(text: String) -> Self { + Self::from(text.as_str()) + } +} + #[repr(C)] #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Debug, Clone, PartialEq, graphene_hash::CacheHash, DynAny)] @@ -221,8 +237,6 @@ pub struct Stroke { pub align: StrokeAlign, #[cfg_attr(feature = "serde", serde(default = "daffine2_identity"))] pub transform: DAffine2, - #[cfg_attr(feature = "serde", serde(default))] - pub paint_order: PaintOrder, } impl Stroke { @@ -236,7 +250,6 @@ impl Stroke { join_miter_limit: 4., align: StrokeAlign::Center, transform: DAffine2::IDENTITY, - paint_order: PaintOrder::StrokeAbove, } } @@ -273,7 +286,6 @@ impl Stroke { let skew = DAffine2::from_cols_array(&[1., 0., lerp(s_skew, t_skew), 1., 0., 0.]); trs * skew }, - paint_order: if time < 0.5 { self.paint_order } else { other.paint_order }, } } @@ -283,7 +295,7 @@ impl Stroke { } /// Get the effective stroke weight. - pub fn effective_width(&self) -> f64 { + pub(crate) fn effective_width(&self) -> f64 { self.weight * match self.align { StrokeAlign::Center => 1., @@ -330,14 +342,6 @@ impl Stroke { self.dash_offset } - pub fn cap_index(&self) -> u32 { - self.cap as u32 - } - - pub fn join_index(&self) -> u32 { - self.join as u32 - } - pub fn join_miter_limit(&self) -> f32 { self.join_miter_limit as f32 } @@ -347,44 +351,6 @@ impl Stroke { self } - pub fn with_dash_lengths(mut self, dash_lengths: &str) -> Option { - dash_lengths - .split(&[',', ' ']) - .filter(|x| !x.is_empty()) - .map(str::parse::) - .collect::, _>>() - .ok() - .map(|lengths| { - self.dash_lengths = lengths; - self - }) - } - - pub fn with_dash_offset(mut self, dash_offset: f64) -> Self { - self.dash_offset = dash_offset; - self - } - - pub fn with_stroke_cap(mut self, stroke_cap: StrokeCap) -> Self { - self.cap = stroke_cap; - self - } - - pub fn with_stroke_join(mut self, stroke_join: StrokeJoin) -> Self { - self.join = stroke_join; - self - } - - pub fn with_stroke_join_miter_limit(mut self, limit: f64) -> Self { - self.join_miter_limit = limit; - self - } - - pub fn with_stroke_align(mut self, stroke_align: StrokeAlign) -> Self { - self.align = stroke_align; - self - } - pub fn has_renderable_stroke(&self) -> bool { self.weight > 0. } @@ -401,7 +367,6 @@ impl Default for Stroke { join_miter_limit: 4., align: StrokeAlign::Center, transform: DAffine2::IDENTITY, - paint_order: PaintOrder::default(), } } } diff --git a/node-graph/libraries/vector-types/src/vector/vector_attributes.rs b/node-graph/libraries/vector-types/src/vector/vector_attributes.rs index 63f9b87650..023b086a4a 100644 --- a/node-graph/libraries/vector-types/src/vector/vector_attributes.rs +++ b/node-graph/libraries/vector-types/src/vector/vector_attributes.rs @@ -1,11 +1,10 @@ -use crate::subpath::{Bezier, BezierHandles, Identifier, ManipulatorGroup, Subpath}; -use crate::vector::misc::{HandleId, Tangent, dvec2_to_point}; +use crate::vector::misc::{BezierHandles, HandleId, ManipulatorGroup, Tangent, dvec2_to_point}; use crate::vector::vector_types::Vector; use dyn_any::DynAny; use fixedbitset::FixedBitSet; use glam::{DAffine2, DVec2}; -use kurbo::{CubicBez, Line, PathSeg, QuadBez}; -use std::collections::HashMap; +use kurbo::{CubicBez, Line, ParamCurve, PathSeg, QuadBez}; +use std::collections::{HashMap, HashSet}; use std::hash::{Hash, Hasher}; use std::iter::zip; @@ -49,7 +48,7 @@ macro_rules! create_ids { }; } -create_ids! { PointId, SegmentId, RegionId, StrokeId, FillId } +create_ids! { PointId, SegmentId } /// A no-op hasher that allows writing u64s (the id type). #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] @@ -93,18 +92,13 @@ impl PointDomain { Self { id: Vec::new(), position: Vec::new() } } - pub fn clear(&mut self) { - self.id.clear(); - self.position.clear(); - } - #[inline(always)] pub fn reserve(&mut self, additional: usize) { self.id.reserve(additional); self.position.reserve(additional); } - pub fn retain(&mut self, segment_domain: &mut SegmentDomain, f: impl Fn(&PointId) -> bool) { + pub(crate) fn retain(&mut self, segment_domain: &mut SegmentDomain, f: impl Fn(&PointId) -> bool) { let mut keep = self.id.iter().map(&f); self.position.retain(|_| keep.next().unwrap_or_default()); @@ -177,16 +171,16 @@ impl PointDomain { self.id.iter().position(|&check_id| check_id == id) } - pub fn concat(&mut self, other: &Self, transform: DAffine2, id_map: &IdMap) { + pub(crate) fn concat(&mut self, other: &Self, transform: DAffine2, id_map: &IdMap) { self.id.extend(other.id.iter().map(|id| *id_map.point_map.get(id).unwrap_or(id))); self.position.extend(other.position.iter().map(|&pos| transform.transform_point2(pos))); } - pub fn map_ids(&mut self, id_map: &IdMap) { + pub(crate) fn map_ids(&mut self, id_map: &IdMap) { self.id.iter_mut().for_each(|id| *id = *id_map.point_map.get(id).unwrap_or(id)); } - pub fn transform(&mut self, transform: DAffine2) { + pub(crate) fn transform(&mut self, transform: DAffine2) { for pos in &mut self.position { *pos = transform.transform_point2(*pos); } @@ -208,14 +202,13 @@ impl PointDomain { #[derive(Clone, Debug, Default, PartialEq, graphene_hash::CacheHash, DynAny)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -/// Stores data which is per-segment. A segment is a bΓ©zier curve between two end points with a stroke. In future this will be extendable at runtime with custom attributes. +/// Stores data which is per-segment. A segment is a bΓ©zier curve between two end points. In future this will be extendable at runtime with custom attributes. pub struct SegmentDomain { #[cfg_attr(feature = "serde", serde(alias = "ids"))] id: Vec, start_point: Vec, end_point: Vec, handles: Vec, - stroke: Vec, } impl SegmentDomain { @@ -225,28 +218,18 @@ impl SegmentDomain { start_point: Vec::new(), end_point: Vec::new(), handles: Vec::new(), - stroke: Vec::new(), } } - pub fn clear(&mut self) { - self.id.clear(); - self.start_point.clear(); - self.end_point.clear(); - self.handles.clear(); - self.stroke.clear(); - } - #[inline(always)] pub fn reserve(&mut self, additional: usize) { self.id.reserve(additional); self.start_point.reserve(additional); self.end_point.reserve(additional); self.handles.reserve(additional); - self.stroke.reserve(additional); } - pub fn retain(&mut self, f: impl Fn(&SegmentId) -> bool, points_length: usize) { + pub(crate) fn retain(&mut self, f: impl Fn(&SegmentId) -> bool, points_length: usize) { let additional_delete_ids = self .id .iter() @@ -275,8 +258,6 @@ impl SegmentDomain { self.end_point.retain(|_| keep.next().unwrap_or_default()); let mut keep = self.id.iter().map(can_delete()); self.handles.retain(|_| keep.next().unwrap_or_default()); - let mut keep = self.id.iter().map(can_delete()); - self.stroke.retain(|_| keep.next().unwrap_or_default()); let mut delete_iter = additional_delete_ids.iter().peekable(); self.id.retain(move |id| { @@ -321,27 +302,22 @@ impl SegmentDomain { &self.handles } - pub fn stroke(&self) -> &[StrokeId] { - &self.stroke - } - - pub fn push(&mut self, id: SegmentId, start: usize, end: usize, handles: BezierHandles, stroke: StrokeId) { + pub fn push(&mut self, id: SegmentId, start: usize, end: usize, handles: BezierHandles) { #[cfg(debug_assertions)] if self.id.contains(&id) { warn!("Tried to push a duplicate segment to a segment domain"); return; } - self.push_unchecked(id, start, end, handles, stroke); + self.push_unchecked(id, start, end, handles); } #[inline(always)] - pub fn push_unchecked(&mut self, id: SegmentId, start: usize, end: usize, handles: BezierHandles, stroke: StrokeId) { + pub fn push_unchecked(&mut self, id: SegmentId, start: usize, end: usize, handles: BezierHandles) { self.id.push(id); self.start_point.push(start); self.end_point.push(end); self.handles.push(handles); - self.stroke.push(stroke); } pub(crate) fn start_point_mut(&mut self) -> impl Iterator { @@ -362,10 +338,6 @@ impl SegmentDomain { nested.map(|((a, b), c)| (a, b, c)) } - pub fn stroke_mut(&mut self) -> impl Iterator { - self.id.iter().copied().zip(self.stroke.iter_mut()) - } - pub(crate) fn segment_start_from_id(&self, segment: SegmentId) -> Option { self.id_to_index(segment).and_then(|index| self.start_point.get(index)).copied() } @@ -401,29 +373,18 @@ impl SegmentDomain { self.id.iter().position(|&check_id| check_id == id) } - fn resolve_range(&self, range: &std::ops::RangeInclusive) -> Option> { - match (self.id_to_index(*range.start()), self.id_to_index(*range.end())) { - (Some(start), Some(end)) if start.max(end) < self.handles.len().min(self.id.len()).min(self.start_point.len()).min(self.end_point.len()) => Some(start..=end), - _ => { - warn!("Resolving range with invalid id"); - None - } - } - } - - pub fn concat(&mut self, other: &Self, transform: DAffine2, id_map: &IdMap) { + pub(crate) fn concat(&mut self, other: &Self, transform: DAffine2, id_map: &IdMap) { self.id.extend(other.id.iter().map(|id| *id_map.segment_map.get(id).unwrap_or(id))); self.start_point.extend(other.start_point.iter().map(|&index| id_map.point_offset + index)); self.end_point.extend(other.end_point.iter().map(|&index| id_map.point_offset + index)); self.handles.extend(other.handles.iter().map(|handles| handles.apply_transformation(|p| transform.transform_point2(p)))); - self.stroke.extend(&other.stroke); } - pub fn map_ids(&mut self, id_map: &IdMap) { + pub(crate) fn map_ids(&mut self, id_map: &IdMap) { self.id.iter_mut().for_each(|id| *id = *id_map.segment_map.get(id).unwrap_or(id)); } - pub fn transform(&mut self, transform: DAffine2) { + pub(crate) fn transform(&mut self, transform: DAffine2) { for handles in &mut self.handles { *handles = handles.apply_transformation(|p| transform.transform_point2(p)); } @@ -589,134 +550,6 @@ impl SegmentDomain { } } -#[derive(Clone, Debug, Default, PartialEq, Hash, graphene_hash::CacheHash, DynAny)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -/// Stores data which is per-region. A region is an enclosed area composed of a range of segments from the -/// [`SegmentDomain`] that can be given a fill. In future this will be extendable at runtime with custom attributes. -pub struct RegionDomain { - #[cfg_attr(feature = "serde", serde(alias = "ids"))] - id: Vec, - segment_range: Vec>, - fill: Vec, -} - -impl RegionDomain { - pub const fn new() -> Self { - Self { - id: Vec::new(), - segment_range: Vec::new(), - fill: Vec::new(), - } - } - - pub fn clear(&mut self) { - self.id.clear(); - self.segment_range.clear(); - self.fill.clear(); - } - - #[inline(always)] - pub fn reserve(&mut self, additional: usize) { - self.id.reserve(additional); - self.segment_range.reserve(additional); - self.fill.reserve(additional); - } - - pub fn retain(&mut self, f: impl Fn(&RegionId) -> bool) { - let mut keep = self.id.iter().map(&f); - self.segment_range.retain(|_| keep.next().unwrap_or_default()); - let mut keep = self.id.iter().map(&f); - self.fill.retain(|_| keep.next().unwrap_or_default()); - self.id.retain(&f); - } - - /// Like [`Self::retain`] but also gives the function access to the segment range. - /// - /// Note that this function requires an allocation that `retain` avoids. - pub fn retain_with_region(&mut self, f: impl Fn(&RegionId, &std::ops::RangeInclusive) -> bool) { - let keep = self.id.iter().zip(self.segment_range.iter()).map(|(id, range)| f(id, range)).collect::>(); - let mut iter = keep.iter().copied(); - self.segment_range.retain(|_| iter.next().unwrap()); - let mut iter = keep.iter().copied(); - self.fill.retain(|_| iter.next().unwrap()); - let mut iter = keep.iter().copied(); - self.id.retain(|_| iter.next().unwrap()); - } - - pub fn push(&mut self, id: RegionId, segment_range: std::ops::RangeInclusive, fill: FillId) { - #[cfg(debug_assertions)] - if self.id.contains(&id) { - warn!("Tried to push a duplicate region to a region domain"); - return; - } - - self.push_unchecked(id, segment_range, fill); - } - - #[inline(always)] - pub fn push_unchecked(&mut self, id: RegionId, segment_range: std::ops::RangeInclusive, fill: FillId) { - self.id.push(id); - self.segment_range.push(segment_range); - self.fill.push(fill); - } - - fn _resolve_id(&self, id: RegionId) -> Option { - self.id.iter().position(|&check_id| check_id == id) - } - - pub fn next_id(&self) -> RegionId { - self.id.iter().copied().max_by(|a, b| a.0.cmp(&b.0)).map(|mut id| id.next_id()).unwrap_or(RegionId::ZERO) - } - - pub fn segment_range_mut(&mut self) -> impl Iterator)> { - self.id.iter().copied().zip(self.segment_range.iter_mut()) - } - - pub fn fill_mut(&mut self) -> impl Iterator { - self.id.iter().copied().zip(self.fill.iter_mut()) - } - - pub fn ids(&self) -> &[RegionId] { - &self.id - } - - pub fn segment_range(&self) -> &[std::ops::RangeInclusive] { - &self.segment_range - } - - pub fn fill(&self) -> &[FillId] { - &self.fill - } - - pub fn concat(&mut self, other: &Self, _transform: DAffine2, id_map: &IdMap) { - self.id.extend(other.id.iter().map(|id| *id_map.region_map.get(id).unwrap_or(id))); - self.segment_range.extend( - other - .segment_range - .iter() - .map(|range| *id_map.segment_map.get(range.start()).unwrap_or(range.start())..=*id_map.segment_map.get(range.end()).unwrap_or(range.end())), - ); - self.fill.extend(&other.fill); - } - - pub fn map_ids(&mut self, id_map: &IdMap) { - self.id.iter_mut().for_each(|id| *id = *id_map.region_map.get(id).unwrap_or(id)); - self.segment_range - .iter_mut() - .for_each(|range| *range = *id_map.segment_map.get(range.start()).unwrap_or(range.start())..=*id_map.segment_map.get(range.end()).unwrap_or(range.end())); - } - - /// Iterates over regions in the domain. - /// - /// Tuple is: (id, segment_range, fill) - pub fn iter(&self) -> impl Iterator, FillId)> + '_ { - let ids = self.id.iter().copied(); - let segment_range = self.segment_range.iter().cloned(); - let fill = self.fill.iter().copied(); - zip(ids, zip(segment_range, fill)).map(|(id, (segment_range, fill))| (id, segment_range, fill)) - } -} - #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct HalfEdge { pub id: SegmentId, @@ -726,11 +559,11 @@ pub struct HalfEdge { } impl HalfEdge { - pub fn new(id: SegmentId, start: usize, end: usize, reverse: bool) -> Self { + fn new(id: SegmentId, start: usize, end: usize, reverse: bool) -> Self { Self { id, start, end, reverse } } - pub fn reversed(&self) -> Self { + fn reversed(&self) -> Self { Self { id: self.id, start: self.start, @@ -739,7 +572,7 @@ impl HalfEdge { } } - pub fn normalize_direction(&self) -> Self { + fn normalize_direction(&self) -> Self { if self.reverse { Self { id: self.id, @@ -759,36 +592,17 @@ pub struct FoundSubpath { } impl FoundSubpath { - pub fn new(segments: Vec) -> Self { - Self { edges: segments } - } - - pub fn endpoints(&self) -> Option<(&HalfEdge, &HalfEdge)> { + fn endpoints(&self) -> Option<(&HalfEdge, &HalfEdge)> { match (self.edges.first(), self.edges.last()) { (Some(first), Some(last)) => Some((first, last)), _ => None, } } - pub fn push(&mut self, segment: HalfEdge) { + fn push(&mut self, segment: HalfEdge) { self.edges.push(segment); } - pub fn insert(&mut self, index: usize, segment: HalfEdge) { - self.edges.insert(index, segment); - } - - pub fn extend(&mut self, segments: impl IntoIterator) { - self.edges.extend(segments); - } - - pub fn splice(&mut self, range: std::ops::Range, replace_with: I) - where - I: IntoIterator, - { - self.edges.splice(range, replace_with); - } - pub fn is_closed(&self) -> bool { match (self.edges.first(), self.edges.last()) { (Some(first), Some(last)) => first.start == last.end, @@ -796,7 +610,7 @@ impl FoundSubpath { } } - pub fn from_segment(segment: HalfEdge) -> Self { + fn from_segment(segment: HalfEdge) -> Self { Self { edges: vec![segment] } } @@ -811,6 +625,16 @@ struct FaceSide { reversed: bool, } +impl FaceSide { + /// The same segment walked in the opposite direction. + fn mirrored(&self) -> Self { + Self { + segment_index: self.segment_index, + reversed: !self.reversed, + } + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] struct FaceSideSet { set: FixedBitSet, @@ -822,10 +646,14 @@ impl FaceSideSet { } } - fn index(&self, side: FaceSide) -> usize { + fn index_of(side: &FaceSide) -> usize { (side.segment_index << 1) | (side.reversed as usize) } + fn index(&self, side: FaceSide) -> usize { + Self::index_of(&side) + } + fn insert(&mut self, side: FaceSide) { self.set.insert(self.index(side)); } @@ -845,54 +673,25 @@ struct Faces { face_start: Vec, } -#[derive(Debug, Clone, PartialEq)] -pub struct FaceIterator<'a> { - vector: &'a Vector, +/// Every face orbit of the segment graph: the flattened side lists plus each orbit's traced path, +/// signed area (bounded faces are walked clockwise so they come out negative, silhouettes positive), +/// and a lookup from any side to the orbit containing it. +struct FaceOrbits { faces: Faces, - current_face: usize, + paths: Vec, + areas: Vec, + side_to_orbit: Vec, } -impl FaceIterator<'_> { - fn new(faces: Faces, vector: &Vector) -> FaceIterator<'_> { - FaceIterator { vector, faces, current_face: 0 } +impl FaceOrbits { + fn face_count(&self) -> usize { + self.faces.face_start.len() } - fn get_point(&self, point: usize) -> kurbo::Point { - dvec2_to_point(self.vector.point_domain.positions()[point]) - } -} - -impl Iterator for FaceIterator<'_> { - type Item = kurbo::BezPath; - fn next(&mut self) -> Option { - let start_side = self.faces.face_start.get(self.current_face).copied()?; - self.current_face += 1; - let end_side = self.faces.face_start.get(self.current_face).copied().unwrap_or(self.faces.sides.len()); - - let mut path = kurbo::BezPath::new(); - - let segment_domain = &self.vector.segment_domain; - let first_side = self.faces.sides.get(start_side)?; - let start_point_index = if first_side.reversed { - segment_domain.end_point[first_side.segment_index] - } else { - segment_domain.start_point[first_side.segment_index] - }; - path.move_to(self.get_point(start_point_index)); - for side in &self.faces.sides[start_side..end_side] { - let (handle, end_index) = match side.reversed { - false => (segment_domain.handles[side.segment_index], segment_domain.end_point[side.segment_index]), - true => (segment_domain.handles[side.segment_index].reversed(), segment_domain.start_point[side.segment_index]), - }; - let path_element = match handle { - BezierHandles::Linear => kurbo::PathEl::LineTo(self.get_point(end_index)), - BezierHandles::Quadratic { handle } => kurbo::PathEl::QuadTo(dvec2_to_point(handle), self.get_point(end_index)), - BezierHandles::Cubic { handle_start, handle_end } => kurbo::PathEl::CurveTo(dvec2_to_point(handle_start), dvec2_to_point(handle_end), self.get_point(end_index)), - }; - path.push(path_element); - } - - Some(path) + fn face_sides(&self, orbit_index: usize) -> &[FaceSide] { + let start = self.faces.face_start[orbit_index]; + let end = self.faces.face_start.get(orbit_index + 1).copied().unwrap_or(self.faces.sides.len()); + &self.faces.sides[start..end] } } @@ -929,33 +728,26 @@ impl Vector { } } - /// Construct a [`Bezier`] curve spanning from the resolved position of the start and end points with the specified handles. - fn segment_to_bezier_with_index(&self, start: usize, end: usize, handles: BezierHandles) -> Bezier { - let start = self.point_domain.positions()[start]; - let end = self.point_domain.positions()[end]; - Bezier { start, end, handles } + /// Tries to convert a segment with the specified id to a [`PathSeg`], returning None if the id is invalid. + pub fn segment_from_id(&self, id: SegmentId) -> Option { + self.segment_points_from_id(id).map(|(_, _, segment)| segment) } - /// Tries to convert a segment with the specified id to a [`Bezier`], returning None if the id is invalid. - pub fn segment_from_id(&self, id: SegmentId) -> Option { - self.segment_points_from_id(id).map(|(_, _, bezier)| bezier) - } - - /// Tries to convert a segment with the specified id to the start and end points and a [`Bezier`], returning None if the id is invalid. - pub fn segment_points_from_id(&self, id: SegmentId) -> Option<(PointId, PointId, Bezier)> { + /// Tries to convert a segment with the specified id to the start and end points and a [`PathSeg`], returning None if the id is invalid. + pub fn segment_points_from_id(&self, id: SegmentId) -> Option<(PointId, PointId, PathSeg)> { Some(self.segment_points_from_index(self.segment_domain.id_to_index(id)?)) } - /// Tries to convert a segment with the specified index to the start and end points and a [`Bezier`]. - pub fn segment_points_from_index(&self, index: usize) -> (PointId, PointId, Bezier) { + /// Converts a segment with the specified index to the start and end points and a [`PathSeg`]. + pub fn segment_points_from_index(&self, index: usize) -> (PointId, PointId, PathSeg) { let start = self.segment_domain.start_point[index]; let end = self.segment_domain.end_point[index]; let start_id = self.point_domain.ids()[start]; let end_id = self.point_domain.ids()[end]; - (start_id, end_id, self.segment_to_bezier_with_index(start, end, self.segment_domain.handles[index])) + (start_id, end_id, self.path_segment_from_index(start, end, self.segment_domain.handles[index])) } - /// Iterator over all of the [`Bezier`] following the order that they are stored in the segment domain, skipping invalid segments. + /// Iterator over all of the [`PathSeg`]s following the order that they are stored in the segment domain, skipping invalid segments. pub fn segment_iter(&self) -> impl Iterator { let to_segment = |(((&handles, &id), &start), &end)| (id, self.path_segment_from_index(start, end, handles), self.point_domain.ids()[start], self.point_domain.ids()[end]); @@ -968,18 +760,6 @@ impl Vector { .map(to_segment) } - /// Iterator over all of the [`Bezier`] following the order that they are stored in the segment domain, skipping invalid segments. - pub fn segment_bezier_iter(&self) -> impl Iterator + '_ { - let to_bezier = |(((&handles, &id), &start), &end)| (id, self.segment_to_bezier_with_index(start, end, handles), self.point_domain.ids()[start], self.point_domain.ids()[end]); - self.segment_domain - .handles - .iter() - .zip(&self.segment_domain.id) - .zip(self.segment_domain.start_point()) - .zip(self.segment_domain.end_point()) - .map(to_bezier) - } - pub fn auto_join_paths(&self) -> Vec { let segments = self.segment_domain.iter().map(|(id, start, end, _)| HalfEdge::new(id, start, end, false)); @@ -1051,8 +831,8 @@ impl Vector { } } - /// Construct a [`Bezier`] curve from an iterator of segments with (handles, start point, end point) independently of discontinuities. - pub fn subpath_from_segments_ignore_discontinuities(&self, segments: impl Iterator) -> Option> { + /// Construct a [`kurbo::BezPath`] from an iterator of segments with (handles, start point, end point) independently of discontinuities. + pub fn bezpath_from_segments_ignore_discontinuities(&self, segments: impl Iterator) -> Option { let mut first_point = None; let mut manipulators_list = Vec::new(); let mut last: Option<(usize, BezierHandles)> = None; @@ -1085,50 +865,7 @@ impl Vector { } } - Some(Subpath::new(manipulators_list, closed)) - } - - /// Construct a [`Bezier`] curve for each region, skipping invalid regions. - pub fn region_manipulator_groups(&self) -> impl Iterator>)> + '_ { - self.region_domain - .id - .iter() - .zip(&self.region_domain.segment_range) - .filter_map(|(&id, segment_range)| self.segment_domain.resolve_range(segment_range).map(|range| (id, range))) - .filter_map(|(id, range)| { - let segments_iter = self - .segment_domain - .handles - .get(range.clone())? - .iter() - .zip(self.segment_domain.start_point.get(range.clone())?) - .zip(self.segment_domain.end_point.get(range)?) - .map(|((&handles, &start), &end)| (handles, start, end)); - - let mut manipulator_groups = Vec::new(); - let mut in_handle = None; - - for segment in segments_iter { - let (handles, start_point_index, _end_point_index) = segment; - let start_point_id = self.point_domain.id[start_point_index]; - let start_point = self.point_domain.position[start_point_index]; - - let (manipulator_group, next_in_handle) = match handles { - BezierHandles::Linear => (ManipulatorGroup::new_with_id(start_point, in_handle, None, start_point_id), None), - BezierHandles::Quadratic { handle } => (ManipulatorGroup::new_with_id(start_point, in_handle, Some(handle), start_point_id), None), - BezierHandles::Cubic { handle_start, handle_end } => (ManipulatorGroup::new_with_id(start_point, in_handle, Some(handle_start), start_point_id), Some(handle_end)), - }; - - in_handle = next_in_handle; - manipulator_groups.push(manipulator_group); - } - - if let Some(first) = manipulator_groups.first_mut() { - first.in_handle = in_handle; - } - - Some((id, manipulator_groups)) - }) + Some(crate::vector::misc::bezpath_from_manipulator_groups(&manipulators_list, closed)) } pub fn build_stroke_path_iter(&self) -> StrokePathIter<'_> { @@ -1146,58 +883,16 @@ impl Vector { } } - /// Construct a [`Bezier`] curve for stroke. - pub fn stroke_bezier_paths(&self) -> impl Iterator> { - self.build_stroke_path_iter().map(|(manipulators_list, closed)| Subpath::new(manipulators_list, closed)) - } - - /// Construct and return an iterator of Vec of `(ManipulatorGroup], bool)` for stroke. + /// Construct and return an iterator of `(Vec, bool)` for each stroke. /// The boolean in the tuple indicates if the path is closed. - pub fn stroke_manipulator_groups(&self) -> impl Iterator>, bool)> { + pub fn stroke_manipulator_groups(&self) -> impl Iterator, bool)> { self.build_stroke_path_iter() } /// Construct a [`kurbo::BezPath`] curve for stroke. pub fn stroke_bezpath_iter(&self) -> impl Iterator { - self.build_stroke_path_iter().map(|(manipulators_list, closed)| { - let mut bezpath = kurbo::BezPath::new(); - let mut out_handle; - - let Some(first) = manipulators_list.first() else { return bezpath }; - bezpath.move_to(dvec2_to_point(first.anchor)); - out_handle = first.out_handle; - - for manipulator in manipulators_list.iter().skip(1) { - match (out_handle, manipulator.in_handle) { - (Some(handle_start), Some(handle_end)) => bezpath.curve_to(dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(manipulator.anchor)), - (None, None) => bezpath.line_to(dvec2_to_point(manipulator.anchor)), - (None, Some(handle)) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(manipulator.anchor)), - (Some(handle), None) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(manipulator.anchor)), - } - out_handle = manipulator.out_handle; - } - - if closed { - match (out_handle, first.in_handle) { - (Some(handle_start), Some(handle_end)) => bezpath.curve_to(dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(first.anchor)), - (None, None) => bezpath.line_to(dvec2_to_point(first.anchor)), - (None, Some(handle)) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(first.anchor)), - (Some(handle), None) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(first.anchor)), - } - bezpath.close_path(); - } - bezpath - }) - } - - /// Construct an iterator [`ManipulatorGroup`] for stroke. - pub fn manipulator_groups(&self) -> impl Iterator> + '_ { - self.stroke_bezier_paths().flat_map(|mut path| std::mem::take(path.manipulator_groups_mut())) - } - - pub fn manipulator_group_id(&self, id: impl Into) -> Option> { - let id = id.into(); - self.manipulator_groups().find(|manipulators| manipulators.id == id) + self.build_stroke_path_iter() + .map(|(manipulators_list, closed)| crate::vector::misc::bezpath_from_manipulator_groups(&manipulators_list, closed)) } pub fn transform(&mut self, transform: DAffine2) { @@ -1208,18 +903,15 @@ impl Vector { pub fn vector_new_ids_from_hash(&mut self, node_id: u64) { let point_map = self.point_domain.ids().iter().map(|&old| (old, old.generate_from_hash(node_id))).collect::>(); let segment_map = self.segment_domain.ids().iter().map(|&old| (old, old.generate_from_hash(node_id))).collect::>(); - let region_map = self.region_domain.ids().iter().map(|&old| (old, old.generate_from_hash(node_id))).collect::>(); let id_map = IdMap { point_offset: self.point_domain.ids().len(), point_map, segment_map, - region_map, }; self.point_domain.map_ids(&id_map); self.segment_domain.map_ids(&id_map); - self.region_domain.map_ids(&id_map); } pub fn is_branching(&self) -> bool { @@ -1234,20 +926,77 @@ impl Vector { false } - pub fn has_regions(&self) -> bool { - !self.region_domain.id.is_empty() - } - - /// Determines if face-by-face fill rendering should be used. - /// Branching vectors without regions (e.g. mesh grids) need face-by-face fill rendering. - /// Branching vectors with regions (e.g. boolean operation results) use even-odd fill - /// on the main stroke path instead, since face decomposition can't determine which - /// bounded faces should vs. shouldn't be filled in boolean results. + /// Determines if face-by-face fill rendering should be used. Branching vectors are meshes, whose + /// bounded faces are found and filled individually rather than filling the stroke path directly. pub fn use_face_fill(&self) -> bool { - self.is_branching() && !self.has_regions() + self.is_branching() } - pub fn construct_faces(&self) -> FaceIterator<'_> { + /// Returns the fillable faces of the segment graph: bounded regions, skipping the unbounded + /// silhouette orbits and any face classified as deliberate negative space by its boundary winding. + /// Negative space loops are subtracted from any separately-bounded face covering them, so a + /// reverse-wound contour still punches its hole when it shares no points with what surrounds it. + pub fn construct_faces(&self) -> Vec { + let orbits = self.face_orbits(); + let (core_degree, ..) = self.two_core(); + + // Split the bounded orbits (negative area) into fillable faces and deliberate negative space + let mut kept_faces: Vec<(kurbo::BezPath, HashSet)> = Vec::new(); + let mut negative_regions: Vec<(kurbo::BezPath, HashSet)> = Vec::new(); + for orbit_index in 0..orbits.face_count() { + if orbits.areas[orbit_index] > 0. { + continue; + } + let sides = orbits.face_sides(orbit_index); + + let side_set: HashSet = sides.iter().map(FaceSideSet::index_of).collect(); + let non_spur_sides: Vec = sides.iter().copied().filter(|side| !side_set.contains(&FaceSideSet::index_of(&side.mirrored()))).collect(); + if non_spur_sides.is_empty() { + continue; + } + + let path = orbits.paths[orbit_index].clone(); + let segment_set: HashSet = sides.iter().map(|side| side.segment_index).collect(); + if non_spur_sides.iter().any(|side| side.reversed) { + kept_faces.push((path, segment_set)); + continue; + } + + // An all-forward face is a reverse-wound loop's interior. It only counts as deliberate negative + // space when it is a standalone simple loop or a single face surrounds it, the cases where its + // contour was drawn as one unit. Walls shared among several faces are mesh and stay filled. + let is_standalone_loop = non_spur_sides + .iter() + .all(|side| core_degree[self.segment_domain.start_point[side.segment_index]] == 2 && core_degree[self.segment_domain.end_point[side.segment_index]] == 2); + let mut mirror_orbits = non_spur_sides.iter().map(|side| orbits.side_to_orbit[FaceSideSet::index_of(&side.mirrored())]); + let first_mirror_orbit = mirror_orbits.next().unwrap_or(usize::MAX); + let surrounded_by_one_face = first_mirror_orbit != usize::MAX && orbits.areas[first_mirror_orbit] <= 0. && mirror_orbits.all(|orbit| orbit == first_mirror_orbit); + if is_standalone_loop || surrounded_by_one_face { + negative_regions.push((path, segment_set)); + } else { + kept_faces.push((path, segment_set)); + } + } + + // Subtract each negative space loop from the kept faces that cover it. Faces sharing segments with the loop + // already exclude it through their own boundary, and the winding test naturally skips faces it lies outside of. + for (negative_path, negative_segments) in &negative_regions { + // A segment midpoint is a safe winding sample, whereas snapping can place a vertex exactly on the covering contour + let Some(first_segment) = negative_path.segments().next() else { continue }; + let sample = first_segment.eval(0.5); + let reversed_negative = negative_path.reverse_subpaths(); + for (face_path, face_segments) in kept_faces.iter_mut() { + if face_segments.is_disjoint(negative_segments) && kurbo::Shape::winding(face_path, sample) != 0 { + face_path.extend(reversed_negative.clone()); + } + } + } + + kept_faces.into_iter().map(|(path, _)| path).collect() + } + + /// Walks every face orbit of the segment graph and traces each one's path and signed area. + fn face_orbits(&self) -> FaceOrbits { let mut adjacency: Vec> = vec![Vec::new(); self.point_domain.len()]; for (segment_index, (&start, &end)) in self.segment_domain.start_point.iter().zip(&self.segment_domain.end_point).enumerate() { adjacency[start].push(FaceSide { segment_index, reversed: false }); @@ -1292,7 +1041,89 @@ impl Vector { } } - FaceIterator::new(faces, self) + let mut paths = Vec::with_capacity(faces.face_start.len()); + let mut areas = Vec::with_capacity(faces.face_start.len()); + let mut side_to_orbit = vec![usize::MAX; self.segment_domain.id.len() * 2]; + for orbit_index in 0..faces.face_start.len() { + let start = faces.face_start[orbit_index]; + let end = faces.face_start.get(orbit_index + 1).copied().unwrap_or(faces.sides.len()); + let sides = &faces.sides[start..end]; + + for side in sides { + side_to_orbit[FaceSideSet::index_of(side)] = orbit_index; + } + let path = self.face_path(sides); + areas.push(kurbo::Shape::area(&path)); + paths.push(path); + } + + FaceOrbits { faces, paths, areas, side_to_orbit } + } + + /// Computes each point's degree in the two-core: the graph left after iteratively stripping dead-end segments. + /// Returns the degrees and which segments were pruned as spurs. + fn two_core(&self) -> (Vec, Vec, Vec>) { + let segment_count = self.segment_domain.id.len(); + let point_count = self.point_domain.len(); + + let mut degree = vec![0_usize; point_count]; + let mut adjacency: Vec> = vec![Vec::new(); point_count]; + for (segment_index, (&start, &end)) in self.segment_domain.start_point.iter().zip(&self.segment_domain.end_point).enumerate() { + degree[start] += 1; + degree[end] += 1; + adjacency[start].push(segment_index); + adjacency[end].push(segment_index); + } + + let mut pruned = vec![false; segment_count]; + let mut leaf_points: Vec = (0..point_count).filter(|&point| degree[point] == 1).collect(); + while let Some(point) = leaf_points.pop() { + if degree[point] != 1 { + continue; + } + let Some(&segment_index) = adjacency[point].iter().find(|&&segment_index| !pruned[segment_index]) else { + continue; + }; + + pruned[segment_index] = true; + for endpoint in [self.segment_domain.start_point[segment_index], self.segment_domain.end_point[segment_index]] { + degree[endpoint] -= 1; + if degree[endpoint] == 1 { + leaf_points.push(endpoint); + } + } + } + + (degree, pruned, adjacency) + } + + /// Traces one face orbit's sides into a path, reversing each segment walked against its drawn direction. + fn face_path(&self, sides: &[FaceSide]) -> kurbo::BezPath { + let mut path = kurbo::BezPath::new(); + let Some(first_side) = sides.first() else { return path }; + + let get_point = |point: usize| dvec2_to_point(self.point_domain.positions()[point]); + let start_point_index = if first_side.reversed { + self.segment_domain.end_point[first_side.segment_index] + } else { + self.segment_domain.start_point[first_side.segment_index] + }; + path.move_to(get_point(start_point_index)); + + for side in sides { + let (handle, end_index) = match side.reversed { + false => (self.segment_domain.handles[side.segment_index], self.segment_domain.end_point[side.segment_index]), + true => (self.segment_domain.handles[side.segment_index].reversed(), self.segment_domain.start_point[side.segment_index]), + }; + let path_element = match handle { + BezierHandles::Linear => kurbo::PathEl::LineTo(get_point(end_index)), + BezierHandles::Quadratic { handle } => kurbo::PathEl::QuadTo(dvec2_to_point(handle), get_point(end_index)), + BezierHandles::Cubic { handle_start, handle_end } => kurbo::PathEl::CurveTo(dvec2_to_point(handle_start), dvec2_to_point(handle_end), get_point(end_index)), + }; + path.push(path_element); + } + + path } fn construct_face(&self, adjacency: &[Vec], first: FaceSide, faces: &mut Faces, seen: &mut FaceSideSet) -> Option<()> { @@ -1324,6 +1155,129 @@ impl Vector { } None } + + /// Normalizes the winding direction of every simple closed loop so nesting depth alone decides fill: + /// loops at even depth wind positive and loops nested inside them wind negative, regardless of the direction they happened + /// to be drawn in. Loops passing through branch points, and open runs including dead-end spurs, are left untouched. + pub fn normalize_winding_directions(&mut self) { + let segment_count = self.segment_domain.id.len(); + + // Strip dead-end spurs first so a spur hanging off a loop doesn't disguise it + let (degree, pruned, adjacency) = self.two_core(); + + // Walk out each simple loop: a chain of surviving segments passing only through degree-2 points. + // Chains that reach a branch point are mesh or welded structure and keep their drawn directions. + let mut visited = pruned.clone(); + let mut loops: Vec> = Vec::new(); + for first_segment in 0..segment_count { + if visited[first_segment] { + continue; + } + let start = self.segment_domain.start_point[first_segment]; + let end = self.segment_domain.end_point[first_segment]; + if degree[start] != 2 || degree[end] != 2 { + visited[first_segment] = true; + continue; + } + + let mut loop_sides = vec![(first_segment, false)]; + let mut current_point = end; + let mut is_simple_loop = false; + for _ in 0..segment_count { + if current_point == start { + is_simple_loop = true; + break; + } + if degree[current_point] != 2 { + break; + } + let previous_segment = loop_sides.last().unwrap().0; + let Some(&next_segment) = adjacency[current_point].iter().find(|&&candidate| !pruned[candidate] && candidate != previous_segment) else { + break; + }; + + let walked_reversed = self.segment_domain.end_point[next_segment] == current_point; + current_point = if walked_reversed { + self.segment_domain.start_point[next_segment] + } else { + self.segment_domain.end_point[next_segment] + }; + loop_sides.push((next_segment, walked_reversed)); + } + + for &(segment_index, _) in &loop_sides { + visited[segment_index] = true; + } + if is_simple_loop { + loops.push(loop_sides); + } + } + + // Trace each loop as a path so area gives its winding and other loops' winding gives containment + let loop_paths: Vec = loops + .iter() + .map(|loop_sides| { + let mut path = kurbo::BezPath::new(); + let (first_segment, first_reversed) = loop_sides[0]; + let start_point = if first_reversed { + self.segment_domain.end_point[first_segment] + } else { + self.segment_domain.start_point[first_segment] + }; + path.move_to(dvec2_to_point(self.point_domain.positions()[start_point])); + for &(segment_index, walked_reversed) in loop_sides { + let (handle, end_index) = match walked_reversed { + false => (self.segment_domain.handles[segment_index], self.segment_domain.end_point[segment_index]), + true => (self.segment_domain.handles[segment_index].reversed(), self.segment_domain.start_point[segment_index]), + }; + let end = dvec2_to_point(self.point_domain.positions()[end_index]); + let path_element = match handle { + BezierHandles::Linear => kurbo::PathEl::LineTo(end), + BezierHandles::Quadratic { handle } => kurbo::PathEl::QuadTo(dvec2_to_point(handle), end), + BezierHandles::Cubic { handle_start, handle_end } => kurbo::PathEl::CurveTo(dvec2_to_point(handle_start), dvec2_to_point(handle_end), end), + }; + path.push(path_element); + } + path.close_path(); + path + }) + .collect(); + + // Nesting depth counts the bounded face regions covering each loop, so containment still registers when the + // surrounding contour is branching mesh structure rather than a simple loop. The bounding box check keeps + // the containment tests from being `O(loops Γ— faces Γ— segments)` on many-loop paths like converted text. + let orbits = self.face_orbits(); + let bounded_orbits: Vec<(&kurbo::BezPath, kurbo::Rect, HashSet)> = (0..orbits.face_count()) + .filter(|&orbit_index| orbits.areas[orbit_index] <= 0.) + .map(|orbit_index| { + let path = &orbits.paths[orbit_index]; + let segment_set = orbits.face_sides(orbit_index).iter().map(|side| side.segment_index).collect(); + (path, kurbo::Shape::bounding_box(path), segment_set) + }) + .collect(); + + // Reverse the segments of each loop whose drawn winding disagrees with its nesting parity + for (loop_index, loop_sides) in loops.iter().enumerate() { + // A segment midpoint is a safe winding sample, as in `construct_faces` + let Some(first_segment) = loop_paths[loop_index].segments().next() else { continue }; + let sample = first_segment.eval(0.5); + let loop_segments: HashSet = loop_sides.iter().map(|&(segment_index, _)| segment_index).collect(); + let depth = bounded_orbits + .iter() + .filter(|(path, bounding_box, segment_set)| segment_set.is_disjoint(&loop_segments) && bounding_box.contains(sample) && kurbo::Shape::winding(*path, sample) != 0) + .count(); + + let area = kurbo::Shape::area(&loop_paths[loop_index]); + let wants_positive = depth % 2 == 0; + if area != 0. && (area > 0.) != wants_positive { + for &(segment_index, _) in loop_sides { + let segment_domain = &mut self.segment_domain; + std::mem::swap(&mut segment_domain.start_point[segment_index], &mut segment_domain.end_point[segment_index]); + segment_domain.handles[segment_index] = segment_domain.handles[segment_index].reversed(); + } + } + } + } } #[derive(Clone, Copy, PartialEq, Eq, Debug, Default)] @@ -1377,7 +1331,7 @@ pub struct StrokePathIter<'a> { } impl Iterator for StrokePathIter<'_> { - type Item = (Vec>, bool); + type Item = (Vec, bool); fn next(&mut self) -> Option { let mut current_start = None; @@ -1446,16 +1400,321 @@ impl Iterator for StrokePathIter<'_> { } } -impl Identifier for PointId { - fn new() -> Self { - Self::generate() - } -} - /// Represents the conversion of IDs used when concatenating vector paths with conflicting IDs. -pub struct IdMap { +pub(crate) struct IdMap { pub point_offset: usize, pub point_map: HashMap, pub segment_map: HashMap, - pub region_map: HashMap, +} + +#[cfg(test)] +mod tests { + use super::*; + use kurbo::Shape; + + fn build_vector(points: &[DVec2], segments: &[(usize, usize)]) -> Vector { + let mut vector = Vector::default(); + let mut point_id = PointId::ZERO; + for &position in points { + vector.point_domain.push(point_id.next_id(), position); + } + let mut segment_id = SegmentId::ZERO; + for &(start, end) in segments { + vector.segment_domain.push(segment_id.next_id(), start, end, BezierHandles::Linear); + } + vector + } + + /// Square wound positively with a reverse-wound triangle welded to its corner: + /// the triangle's interior face is deliberate negative space, so only the surrounding face is filled. + #[test] + fn reverse_wound_loop_is_negative_space() { + let points = [ + DVec2::new(0., 0.), + DVec2::new(10., 0.), + DVec2::new(10., 10.), + DVec2::new(0., 10.), + DVec2::new(2., 4.), + DVec2::new(4., 2.), + ]; + let segments = [(0, 1), (1, 2), (2, 3), (3, 0), (0, 4), (4, 5), (5, 0)]; + let vector = build_vector(&points, &segments); + assert!(vector.is_branching()); + + let faces = vector.construct_faces(); + assert_eq!(faces.len(), 1); + assert_ne!(faces[0].winding(kurbo::Point::new(8., 8.)), 0, "the region around the triangle should be filled"); + assert_eq!(faces[0].winding(kurbo::Point::new(1.5, 1.5)), 0, "the reverse-wound triangle interior should stay empty"); + } + + /// The same welded triangle wound the same way as the square reads as positive space, so both faces fill. + #[test] + fn same_wound_loop_is_positive_space() { + let points = [ + DVec2::new(0., 0.), + DVec2::new(10., 0.), + DVec2::new(10., 10.), + DVec2::new(0., 10.), + DVec2::new(2., 4.), + DVec2::new(4., 2.), + ]; + let segments = [(0, 1), (1, 2), (2, 3), (3, 0), (0, 5), (5, 4), (4, 0)]; + let vector = build_vector(&points, &segments); + + let faces = vector.construct_faces(); + assert_eq!(faces.len(), 2); + assert!( + faces.iter().any(|face| face.winding(kurbo::Point::new(1.5, 1.5)) != 0), + "the same-wound triangle interior should be filled" + ); + assert!(faces.iter().any(|face| face.winding(kurbo::Point::new(8., 8.)) != 0), "the region around the triangle should be filled"); + } + + /// A diamond-in-square mesh with every wall emitted once in index-canonical direction: + /// every cell is mixed-direction, so all five cells fill even though every point has even degree. + #[test] + fn mesh_cells_fill_regardless_of_wall_direction() { + let points = [ + DVec2::new(0., 0.), + DVec2::new(10., 0.), + DVec2::new(10., 10.), + DVec2::new(0., 10.), + DVec2::new(5., 0.), + DVec2::new(10., 5.), + DVec2::new(5., 10.), + DVec2::new(0., 5.), + ]; + let segments = [(0, 4), (1, 4), (1, 5), (2, 5), (2, 6), (3, 6), (3, 7), (0, 7), (4, 5), (5, 6), (6, 7), (4, 7)]; + let vector = build_vector(&points, &segments); + assert!(vector.use_face_fill()); + + let faces = vector.construct_faces(); + assert_eq!(faces.len(), 5); + assert!(faces.iter().any(|face| face.winding(kurbo::Point::new(5., 5.)) != 0), "the center diamond cell should be filled"); + assert!(faces.iter().any(|face| face.winding(kurbo::Point::new(1., 1.)) != 0), "the corner cells should be filled"); + } + + /// A boolean-style donut whose hole shares no points with the outer contour, + /// made branching by a pen-drawn spur: the hole must be subtracted from the disc face that covers it. + #[test] + fn disjoint_negative_loop_is_subtracted_from_covering_face() { + let points = [ + DVec2::new(0., 0.), + DVec2::new(10., 0.), + DVec2::new(10., 10.), + DVec2::new(0., 10.), + DVec2::new(3., 3.), + DVec2::new(3., 7.), + DVec2::new(7., 7.), + DVec2::new(7., 3.), + DVec2::new(1., 5.), + ]; + let segments = [(0, 1), (1, 2), (2, 3), (3, 0), (4, 5), (5, 6), (6, 7), (7, 4), (0, 8)]; + let vector = build_vector(&points, &segments); + assert!(vector.is_branching()); + + let faces = vector.construct_faces(); + assert_eq!(faces.len(), 1); + assert_ne!(faces[0].winding(kurbo::Point::new(1., 1.)), 0, "the ring around the hole should be filled"); + assert_eq!(faces[0].winding(kurbo::Point::new(5., 5.)), 0, "the reverse-wound hole should stay empty"); + } + + /// The disjoint hole again, but with a vertex snapped exactly onto the covering contour, + /// where a winding test sampled at that vertex would be unreliable. + #[test] + fn hole_with_a_vertex_snapped_onto_the_covering_contour_still_subtracts() { + let points = [ + DVec2::new(0., 0.), + DVec2::new(10., 0.), + DVec2::new(10., 10.), + DVec2::new(0., 10.), + DVec2::new(5., 10.), + DVec2::new(7., 6.), + DVec2::new(3., 6.), + DVec2::new(1., 5.), + ]; + let segments = [(0, 1), (1, 2), (2, 3), (3, 0), (4, 5), (5, 6), (6, 4), (0, 7)]; + let vector = build_vector(&points, &segments); + assert!(vector.is_branching()); + + let faces = vector.construct_faces(); + assert_eq!(faces.len(), 1); + assert_ne!(faces[0].winding(kurbo::Point::new(1., 1.)), 0, "the region around the hole should be filled"); + assert_eq!(faces[0].winding(kurbo::Point::new(5., 7.5)), 0, "the snapped hole should stay empty"); + } + + /// A pen mesh of two cells sharing a wall, with the first cell's loop happening to be drawn in the + /// reverse direction: both cells must fill, since mesh users don't control shared wall winding. + #[test] + fn reverse_drawn_mesh_cell_still_fills() { + let points = [ + DVec2::new(0., 0.), + DVec2::new(0., 10.), + DVec2::new(10., 10.), + DVec2::new(10., 0.), + DVec2::new(20., 0.), + DVec2::new(20., 10.), + ]; + let segments = [(0, 1), (1, 2), (2, 3), (3, 0), (3, 4), (4, 5), (5, 2)]; + let vector = build_vector(&points, &segments); + assert!(vector.is_branching()); + + let faces = vector.construct_faces(); + assert_eq!(faces.len(), 2); + assert!(faces.iter().any(|face| face.winding(kurbo::Point::new(5., 5.)) != 0), "the reverse-drawn left cell should be filled"); + assert!(faces.iter().any(|face| face.winding(kurbo::Point::new(15., 5.)) != 0), "the right cell should be filled"); + } + + /// A hub-and-spokes mesh whose hub cell happens to be drawn in the reverse direction: its walls + /// are shared with several sector cells, so it is mesh structure and must still fill. + #[test] + fn fully_enclosed_reverse_drawn_mesh_cell_still_fills() { + let points = [DVec2::new(4., 3.), DVec2::new(6., 3.), DVec2::new(5., 5.), DVec2::new(0., 0.), DVec2::new(10., 0.), DVec2::new(5., 10.)]; + let segments = [(0, 2), (2, 1), (1, 0), (3, 4), (4, 5), (5, 3), (0, 3), (1, 4), (2, 5)]; + let vector = build_vector(&points, &segments); + assert!(vector.is_branching()); + assert!(drawn_signed_area(&vector, 0..3) < 0.); + + let faces = vector.construct_faces(); + assert_eq!(faces.len(), 4); + assert!(faces.iter().any(|face| face.winding(kurbo::Point::new(5., 4.)) != 0), "the enclosed hub cell should be filled"); + } + + /// A donut whose hole is bridged to the outer contour: every hole wall faces the single + /// surrounding ring, so its reverse winding still reads as a deliberate hole. + #[test] + fn bridged_donut_hole_stays_empty() { + let points = [ + DVec2::new(0., 0.), + DVec2::new(10., 0.), + DVec2::new(10., 10.), + DVec2::new(0., 10.), + DVec2::new(3., 3.), + DVec2::new(3., 7.), + DVec2::new(7., 7.), + DVec2::new(7., 3.), + ]; + let segments = [(0, 1), (1, 2), (2, 3), (3, 0), (4, 5), (5, 6), (6, 7), (7, 4), (0, 4)]; + let vector = build_vector(&points, &segments); + assert!(vector.is_branching()); + assert!(drawn_signed_area(&vector, 4..8) < 0.); + + let faces = vector.construct_faces(); + assert_eq!(faces.len(), 1); + assert_ne!(faces[0].winding(kurbo::Point::new(8., 5.)), 0, "the ring should be filled"); + assert_eq!(faces[0].winding(kurbo::Point::new(5., 5.)), 0, "the bridged hole should stay empty"); + } + + /// A boolean-style hole nested under a contour that a pen-drawn chord has turned into a mesh: + /// the hole must survive normalization (its container is no longer a simple loop) and still subtract. + #[test] + fn hole_survives_when_its_container_becomes_a_mesh() { + let points = [ + DVec2::new(0., 0.), + DVec2::new(10., 0.), + DVec2::new(10., 10.), + DVec2::new(0., 10.), + DVec2::new(1., 1.), + DVec2::new(1., 3.), + DVec2::new(3., 3.), + DVec2::new(3., 1.), + ]; + let segments = [(0, 1), (1, 2), (2, 3), (3, 0), (1, 3), (4, 5), (5, 6), (6, 7), (7, 4)]; + let mut vector = build_vector(&points, &segments); + assert!(drawn_signed_area(&vector, 5..9) < 0.); + + vector.normalize_winding_directions(); + assert!(drawn_signed_area(&vector, 5..9) < 0., "normalization must not flip a hole nested under mesh structure"); + + let faces = vector.construct_faces(); + assert_eq!(faces.len(), 2); + assert!(faces.iter().all(|face| face.winding(kurbo::Point::new(2., 2.)) == 0), "the hole should stay empty"); + assert!(faces.iter().any(|face| face.winding(kurbo::Point::new(0.5, 0.5)) != 0), "the triangle around the hole should be filled"); + assert!(faces.iter().any(|face| face.winding(kurbo::Point::new(8., 8.)) != 0), "the other triangle should be filled"); + } + + /// A spur walked out and back within a face bounds no area, so it can neither fill a reverse-wound + /// loop's interior nor punch anything out of it. + #[test] + fn spur_does_not_rescue_a_negative_space_loop() { + let points = [DVec2::new(0., 0.), DVec2::new(0., 10.), DVec2::new(10., 10.), DVec2::new(10., 0.), DVec2::new(5., 5.)]; + let segments = [(0, 1), (1, 2), (2, 3), (3, 0), (0, 4)]; + let vector = build_vector(&points, &segments); + + let faces = vector.construct_faces(); + assert!(faces.is_empty(), "a reverse-wound loop with an interior spur should produce no filled faces"); + } + + /// Shoelace sum over the drawn direction of a range of line segments, so tests can read the + /// stored winding directly rather than through a path walker that may pick its own direction. + fn drawn_signed_area(vector: &Vector, segment_range: std::ops::Range) -> f64 { + segment_range + .map(|segment_index| { + let start = vector.point_domain.positions()[vector.segment_domain.start_point()[segment_index]]; + let end = vector.point_domain.positions()[vector.segment_domain.end_point()[segment_index]]; + start.perp_dot(end) + }) + .sum::() + / 2. + } + + #[test] + fn normalization_flips_a_reverse_wound_loop() { + let points = [DVec2::new(0., 0.), DVec2::new(0., 10.), DVec2::new(10., 10.), DVec2::new(10., 0.)]; + let mut vector = build_vector(&points, &[(0, 1), (1, 2), (2, 3), (3, 0)]); + assert!(drawn_signed_area(&vector, 0..4) < 0.); + vector.normalize_winding_directions(); + + assert!(drawn_signed_area(&vector, 0..4) > 0., "a lone loop should wind positively after normalization"); + } + + #[test] + fn normalization_gives_nested_loops_alternating_winding() { + let points = [ + DVec2::new(0., 0.), + DVec2::new(10., 0.), + DVec2::new(10., 10.), + DVec2::new(0., 10.), + DVec2::new(3., 3.), + DVec2::new(7., 3.), + DVec2::new(7., 7.), + DVec2::new(3., 7.), + ]; + let segments = [(0, 1), (1, 2), (2, 3), (3, 0), (4, 5), (5, 6), (6, 7), (7, 4)]; + let mut vector = build_vector(&points, &segments); + vector.normalize_winding_directions(); + + assert!(drawn_signed_area(&vector, 0..4) > 0., "the outer loop should wind positively"); + assert!(drawn_signed_area(&vector, 4..8) < 0., "the nested loop should wind negatively"); + } + + /// Loops passing through a branch point are welded or mesh structure whose drawn winding is meaningful, + /// so normalization must not touch them. + #[test] + fn normalization_leaves_branching_structure_untouched() { + let points = [DVec2::new(0., 0.), DVec2::new(4., 0.), DVec2::new(2., 3.), DVec2::new(-4., 0.), DVec2::new(-2., -3.)]; + let segments = [(0, 1), (1, 2), (2, 0), (0, 3), (3, 4), (4, 0)]; + let mut vector = build_vector(&points, &segments); + + let starts_before = vector.segment_domain.start_point().to_vec(); + let ends_before = vector.segment_domain.end_point().to_vec(); + vector.normalize_winding_directions(); + + assert_eq!(vector.segment_domain.start_point(), starts_before.as_slice()); + assert_eq!(vector.segment_domain.end_point(), ends_before.as_slice()); + } + + /// Pruning dead-end spurs first lets the loop they hang off still be found and flipped, + /// while the spur segment itself keeps its direction. + #[test] + fn normalization_flips_a_loop_with_a_spur_attached() { + let points = [DVec2::new(0., 0.), DVec2::new(0., 10.), DVec2::new(10., 10.), DVec2::new(10., 0.), DVec2::new(5., 5.)]; + let segments = [(0, 1), (1, 2), (2, 3), (3, 0), (0, 4)]; + let mut vector = build_vector(&points, &segments); + vector.normalize_winding_directions(); + + assert_eq!(vector.segment_domain.start_point()[0], 1, "the reverse-wound loop should be flipped"); + assert_eq!(vector.segment_domain.start_point()[4], 0, "the spur should keep its drawn direction"); + assert_eq!(vector.segment_domain.end_point()[4], 4); + } } diff --git a/node-graph/libraries/vector-types/src/vector/vector_modification.rs b/node-graph/libraries/vector-types/src/vector/vector_modification.rs index 2e5f0f4e39..fc7f6f498a 100644 --- a/node-graph/libraries/vector-types/src/vector/vector_modification.rs +++ b/node-graph/libraries/vector-types/src/vector/vector_modification.rs @@ -1,10 +1,10 @@ use super::*; -use crate::subpath::BezierHandles; -use crate::vector::misc::{HandleId, HandleType, point_to_dvec2}; +use crate::vector::misc::BezierHandles; +use crate::vector::misc::{HandleId, HandleType, point_to_dvec2, segment_to_handles}; use core_types::uuid::generate_uuid; use dyn_any::DynAny; use glam::DVec2; -use kurbo::{BezPath, PathEl, Point}; +use kurbo::{BezPath, ParamCurve, PathEl, Point}; use serde::de::{SeqAccess, Visitor}; use serde::ser::SerializeSeq; use serde::{Deserialize, Deserializer, Serialize, Serializer}; @@ -16,7 +16,7 @@ use std::hash::Hash; /// Represents a procedural change to the [`PointDomain`] in [`Vector`]. #[derive(Clone, Debug, Default, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct PointModification { +pub(crate) struct PointModification { add: Vec, #[cfg_attr(feature = "serde", serde(serialize_with = "serialize_hashset"))] remove: HashSet, @@ -83,7 +83,7 @@ impl PointModification { /// Represents a procedural change to the [`SegmentDomain`] in [`Vector`]. #[derive(Clone, Debug, Default, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct SegmentModification { +pub(crate) struct SegmentModification { add: Vec, #[cfg_attr(feature = "serde", serde(serialize_with = "serialize_hashset"))] remove: HashSet, @@ -95,8 +95,6 @@ pub struct SegmentModification { handle_primary: HashMap>, #[cfg_attr(feature = "serde", serde(serialize_with = "serialize_hashmap", deserialize_with = "deserialize_hashmap"))] handle_end: HashMap>, - #[cfg_attr(feature = "serde", serde(serialize_with = "serialize_hashmap", deserialize_with = "deserialize_hashmap"))] - stroke: HashMap, } impl SegmentModification { @@ -167,17 +165,11 @@ impl SegmentModification { }; } - for (id, stroke) in segment_domain.stroke_mut() { - let Some(&new) = self.stroke.get(&id) else { continue }; - *stroke = new; - } - for &add_id in &self.add { let Some(&start) = self.start_point.get(&add_id) else { continue }; let Some(&end) = self.end_point.get(&add_id) else { continue }; let Some(&handle_start) = self.handle_primary.get(&add_id) else { continue }; let Some(&handle_end) = self.handle_end.get(&add_id) else { continue }; - let Some(&stroke) = self.stroke.get(&add_id) else { continue }; let Some(start_index) = point_domain.resolve_id(start) else { warn!("invalid start id: {start:#?}"); @@ -204,7 +196,7 @@ impl SegmentModification { continue; } - segment_domain.push(add_id, start_index, end_index, handles, stroke); + segment_domain.push(add_id, start_index, end_index, handles); } assert!( @@ -225,20 +217,24 @@ impl SegmentModification { remove: HashSet::new(), start_point: vector.segment_domain.ids().iter().zip(vector.segment_domain.start_point()).map(point_id).collect(), end_point: vector.segment_domain.ids().iter().zip(vector.segment_domain.end_point()).map(point_id).collect(), - handle_primary: vector.segment_bezier_iter().map(|(id, b, _, _)| (id, b.handle_start().map(|handle| handle - b.start))).collect(), - handle_end: vector.segment_bezier_iter().map(|(id, b, _, _)| (id, b.handle_end().map(|handle| handle - b.end))).collect(), - stroke: vector.segment_domain.ids().iter().copied().zip(vector.segment_domain.stroke().iter().cloned()).collect(), + handle_primary: vector + .segment_iter() + .map(|(id, segment, _, _)| (id, segment_to_handles(&segment).start().map(|handle| handle - point_to_dvec2(segment.start())))) + .collect(), + handle_end: vector + .segment_iter() + .map(|(id, segment, _, _)| (id, segment_to_handles(&segment).end().map(|handle| handle - point_to_dvec2(segment.end())))) + .collect(), } } - fn push(&mut self, id: SegmentId, points: [PointId; 2], handles: [Option; 2], stroke: StrokeId) { + fn push(&mut self, id: SegmentId, points: [PointId; 2], handles: [Option; 2]) { self.remove.remove(&id); self.add.push(id); self.start_point.insert(id, points[0]); self.end_point.insert(id, points[1]); self.handle_primary.insert(id, handles[0]); self.handle_end.insert(id, handles[1]); - self.stroke.insert(id, stroke); } fn remove(&mut self, id: SegmentId) { @@ -248,53 +244,6 @@ impl SegmentModification { self.end_point.remove(&id); self.handle_primary.remove(&id); self.handle_end.remove(&id); - self.stroke.remove(&id); - } -} - -/// Represents a procedural change to the [`RegionDomain`] in [`Vector`]. -#[derive(Clone, Debug, Default, PartialEq)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct RegionModification { - add: Vec, - #[cfg_attr(feature = "serde", serde(serialize_with = "serialize_hashset"))] - remove: HashSet, - #[cfg_attr(feature = "serde", serde(serialize_with = "serialize_hashmap", deserialize_with = "deserialize_hashmap"))] - segment_range: HashMap>, - #[cfg_attr(feature = "serde", serde(serialize_with = "serialize_hashmap", deserialize_with = "deserialize_hashmap"))] - fill: HashMap, -} - -impl RegionModification { - /// Apply this modification to the specified [`RegionDomain`]. - pub fn apply(&self, region_domain: &mut RegionDomain) { - region_domain.retain(|id| !self.remove.contains(id)); - - for (id, segment_range) in region_domain.segment_range_mut() { - let Some(new) = self.segment_range.get(&id) else { continue }; - *segment_range = new.clone(); // Range inclusive is not copy - } - - for (id, fill) in region_domain.fill_mut() { - let Some(&new) = self.fill.get(&id) else { continue }; - *fill = new; - } - - for &add_id in &self.add { - let Some(segment_range) = self.segment_range.get(&add_id) else { continue }; - let Some(&fill) = self.fill.get(&add_id) else { continue }; - region_domain.push(add_id, segment_range.clone(), fill); - } - } - - /// Create a new modification that will convert an empty [`Vector`] into the target [`Vector`]. - pub fn create_from_vector(vector: &Vector) -> Self { - Self { - add: vector.region_domain.ids().to_vec(), - remove: HashSet::new(), - segment_range: vector.region_domain.ids().iter().copied().zip(vector.region_domain.segment_range().iter().cloned()).collect(), - fill: vector.region_domain.ids().iter().copied().zip(vector.region_domain.fill().iter().cloned()).collect(), - } } } @@ -304,7 +253,6 @@ impl RegionModification { pub struct VectorModification { points: PointModification, segments: SegmentModification, - regions: RegionModification, #[cfg_attr(feature = "serde", serde(serialize_with = "serialize_hashset"))] add_g1_continuous: HashSet<[HandleId; 2]>, #[cfg_attr(feature = "serde", serde(serialize_with = "serialize_hashset"))] @@ -337,7 +285,6 @@ pub enum VectorModificationType { struct ModificationCategoryCounts { points: [usize; 3], segments: [usize; 3], - regions: [usize; 3], smooth_handles: [usize; 3], } @@ -345,7 +292,7 @@ impl ModificationCategoryCounts { /// Returns the `[added, removed, modified]` totals across all categories. fn totals(&self) -> [usize; 3] { let mut totals = [0; 3]; - for [a, r, m] in [self.points, self.segments, self.regions, self.smooth_handles] { + for [a, r, m] in [self.points, self.segments, self.smooth_handles] { totals[0] += a; totals[1] += r; totals[2] += m; @@ -355,7 +302,7 @@ impl ModificationCategoryCounts { /// Iterates over each named category and its `[added, removed, modified]` counts. fn iter_categories(&self) -> impl Iterator { - [("Points", self.points), ("Segments", self.segments), ("Regions", self.regions), ("Smooth Handles", self.smooth_handles)].into_iter() + [("Points", self.points), ("Segments", self.segments), ("Smooth Handles", self.smooth_handles)].into_iter() } } @@ -365,7 +312,6 @@ impl VectorModification { // Build sets of added IDs so we can distinguish true modifications from initial values stored for newly added items let add_points: HashSet<_> = self.points.add.iter().copied().collect(); let add_segments: HashSet<_> = self.segments.add.iter().copied().collect(); - let add_regions: HashSet<_> = self.regions.add.iter().copied().collect(); let point_modifications = self.points.delta.keys().filter(|id| !add_points.contains(id)).count(); @@ -376,18 +322,10 @@ impl VectorModification { modified_segments.extend(self.segments.end_point.keys().filter(not_added_segment)); modified_segments.extend(self.segments.handle_primary.keys().filter(not_added_segment)); modified_segments.extend(self.segments.handle_end.keys().filter(not_added_segment)); - modified_segments.extend(self.segments.stroke.keys().filter(not_added_segment)); - - // Count unique modified region IDs across all field maps - let mut modified_regions: HashSet<&RegionId> = HashSet::with_capacity(self.regions.segment_range.len()); - let not_added_region = |id: &&RegionId| !add_regions.contains(id); - modified_regions.extend(self.regions.segment_range.keys().filter(not_added_region)); - modified_regions.extend(self.regions.fill.keys().filter(not_added_region)); ModificationCategoryCounts { points: [self.points.add.len(), self.points.remove.len(), point_modifications], segments: [self.segments.add.len(), self.segments.remove.len(), modified_segments.len()], - regions: [self.regions.add.len(), self.regions.remove.len(), modified_regions.len()], smooth_handles: [self.add_g1_continuous.len(), self.remove_g1_continuous.len(), 0], } } @@ -439,7 +377,6 @@ impl VectorModification { pub fn apply(&self, vector: &mut Vector) { self.points.apply(&mut vector.point_domain, &mut vector.segment_domain); self.segments.apply(&mut vector.segment_domain, &vector.point_domain); - self.regions.apply(&mut vector.region_domain); let valid = |val: &[HandleId; 2]| vector.segment_domain.ids().contains(&val[0].segment) && vector.segment_domain.ids().contains(&val[1].segment); vector @@ -456,7 +393,7 @@ impl VectorModification { /// Add a [`VectorModificationType`] to this modification. pub fn modify(&mut self, vector_modification: &VectorModificationType) { match vector_modification { - VectorModificationType::InsertSegment { id, points, handles } => self.segments.push(*id, *points, *handles, StrokeId::ZERO), + VectorModificationType::InsertSegment { id, points, handles } => self.segments.push(*id, *points, *handles), VectorModificationType::InsertPoint { id, position } => self.points.push(*id, *position), VectorModificationType::RemoveSegment { id } => self.segments.remove(*id), @@ -513,7 +450,6 @@ impl VectorModification { Self { points: PointModification::create_from_vector(vector), segments: SegmentModification::create_from_vector(vector), - regions: RegionModification::create_from_vector(vector), add_g1_continuous: vector.colinear_manipulators.iter().copied().collect(), remove_g1_continuous: HashSet::new(), } @@ -573,7 +509,7 @@ where } /// Serializes as sorted `[value, ...]` (JSON array) -pub fn serialize_hashset(set: &HashSet, serializer: S) -> Result +pub(crate) fn serialize_hashset(set: &HashSet, serializer: S) -> Result where T: Serialize + Eq + Hash + Ord, S: Serializer, @@ -629,13 +565,15 @@ where deserializer.deserialize_seq(visitor) } -pub struct AppendBezpath<'a> { +/// Distance below which a path's closing point is treated as coincident with its start point. +/// Matches Kurbo's default path accuracy, so points within an offset operation's own precision are not split into separate anchors. +const CLOSE_POINT_TOLERANCE: f64 = 1e-6; + +pub(crate) struct AppendBezpath<'a> { first_point: Option, last_point: Option, first_point_index: Option, last_point_index: Option, - first_segment_id: Option, - last_segment_id: Option, point_id: PointId, segment_id: SegmentId, vector: &'a mut Vector, @@ -648,8 +586,6 @@ impl<'a> AppendBezpath<'a> { last_point: None, first_point_index: None, last_point_index: None, - first_segment_id: None, - last_segment_id: None, point_id: vector.point_domain.next_id(), segment_id: vector.segment_domain.next_id(), vector, @@ -657,7 +593,11 @@ impl<'a> AppendBezpath<'a> { } fn append_segment_and_close_path(&mut self, point: Point, handle: BezierHandles) { - let handle = if self.first_point.unwrap() != point { + // A path's final point may return to approximately (but not bit-exactly) its start before closing, e.g. a contour + // produced by Kurbo's path offsetting. Treat a near-coincident final point as already on the start so we don't + // introduce a redundant duplicate anchor and a zero-length closing segment. + let endpoints_coincide = (self.first_point.unwrap() - point).hypot2() <= CLOSE_POINT_TOLERANCE * CLOSE_POINT_TOLERANCE; + let handle = if !endpoints_coincide { // If the first point is not the same as the last point of the path then we append the segment // with given handle and point and then close the path with linear handle. self.append_segment(point, handle); @@ -671,14 +611,7 @@ impl<'a> AppendBezpath<'a> { let next_segment_id = self.segment_id.next_id(); self.vector .segment_domain - .push(next_segment_id, self.last_point_index.unwrap(), self.first_point_index.unwrap(), handle, StrokeId::ZERO); - - // Create a new region. - let next_region_id = self.vector.region_domain.next_id(); - let first_segment_id = self.first_segment_id.unwrap_or(next_segment_id); - let last_segment_id = next_segment_id; - - self.vector.region_domain.push(next_region_id, first_segment_id..=last_segment_id, FillId::ZERO); + .push(next_segment_id, self.last_point_index.unwrap(), self.first_point_index.unwrap(), handle); } fn append_segment(&mut self, end_point: Point, handle: BezierHandles) { @@ -690,16 +623,11 @@ impl<'a> AppendBezpath<'a> { // Append the segment. let next_segment_id = self.segment_id.next_id(); - self.vector - .segment_domain - .push(next_segment_id, self.last_point_index.unwrap(), next_point_index, handle, StrokeId::ZERO); + self.vector.segment_domain.push(next_segment_id, self.last_point_index.unwrap(), next_point_index, handle); // Update the states. self.last_point = Some(end_point); self.last_point_index = Some(next_point_index); - - self.first_segment_id = Some(self.first_segment_id.unwrap_or(next_segment_id)); - self.last_segment_id = Some(next_segment_id); } fn append_first_point(&mut self, point: Point) { @@ -720,8 +648,6 @@ impl<'a> AppendBezpath<'a> { self.last_point = None; self.first_point_index = None; self.last_point_index = None; - self.first_segment_id = None; - self.last_segment_id = None; } pub fn append_bezpath(vector: &'a mut Vector, bezpath: BezPath) { @@ -732,7 +658,11 @@ impl<'a> AppendBezpath<'a> { let close_path = elements.peek().is_some_and(|elm| **elm == PathEl::ClosePath); match *element { - PathEl::MoveTo(point) => this.append_first_point(point), + PathEl::MoveTo(point) => { + // Clear any segment state left by a preceding open contour so its segments don't leak into this contour's region + this.reset(); + this.append_first_point(point); + } PathEl::LineTo(point) => { let handle = BezierHandles::Linear; if close_path { @@ -798,15 +728,15 @@ impl HandleExt for HandleId { #[cfg(test)] mod tests { - use kurbo::{PathSeg, QuadBez}; - use super::*; - use crate::subpath::{Bezier, Subpath}; + use crate::vector::algorithms::shapes::{ellipse_bezpath, rectangle_bezpath}; + use kurbo::{PathSeg, QuadBez}; #[test] fn modify_new() { - let vector: Vector = Vector::from_subpaths([Subpath::new_ellipse(DVec2::ZERO, DVec2::ONE), Subpath::new_rectangle(DVec2::NEG_ONE, DVec2::ZERO)], false); + let mut vector = Vector::from_bezpath(ellipse_bezpath(DVec2::ZERO, DVec2::ONE)); + vector.append_bezpath(rectangle_bezpath(DVec2::NEG_ONE, DVec2::ZERO)); let modify = VectorModification::create_from_vector(&vector); @@ -817,18 +747,14 @@ mod tests { #[test] fn modify_existing() { - let subpaths = [ - Subpath::new_ellipse(DVec2::ZERO, DVec2::ONE), - Subpath::new_rectangle(DVec2::NEG_ONE, DVec2::ZERO), - Subpath::from_beziers( - &[ - PathSeg::Quad(QuadBez::new(Point::new(0., 0.), Point::new(5., 10.), Point::new(10., 0.))), - PathSeg::Quad(QuadBez::new(Point::new(10., 0.), Point::new(15., 10.), Point::new(20., 0.))), - ], - false, - ), - ]; - let mut vector: Vector = Vector::from_subpaths(subpaths, false); + let mut open_quads = BezPath::new(); + open_quads.move_to(Point::new(0., 0.)); + open_quads.quad_to(Point::new(5., 10.), Point::new(10., 0.)); + open_quads.quad_to(Point::new(15., 10.), Point::new(20., 0.)); + + let mut vector = Vector::from_bezpath(ellipse_bezpath(DVec2::ZERO, DVec2::ONE)); + vector.append_bezpath(rectangle_bezpath(DVec2::NEG_ONE, DVec2::ZERO)); + vector.append_bezpath(open_quads); let mut modify_new = VectorModification::create_from_vector(&vector); let mut modify_original = VectorModification::default(); @@ -849,12 +775,12 @@ mod tests { assert_eq!(vector.point_domain.positions()[0], DVec2::X); assert_eq!(vector.point_domain.positions()[9], DVec2::new(11., 0.)); assert_eq!( - vector.segment_bezier_iter().nth(8).unwrap().1, - Bezier::from_quadratic_dvec2(DVec2::new(0., 0.), DVec2::new(5., 10.), DVec2::new(11., 0.)) + vector.segment_iter().nth(8).unwrap().1, + PathSeg::Quad(QuadBez::new(Point::new(0., 0.), Point::new(5., 10.), Point::new(11., 0.))) ); assert_eq!( - vector.segment_bezier_iter().nth(9).unwrap().1, - Bezier::from_quadratic_dvec2(DVec2::new(11., 0.), DVec2::new(16., 10.), DVec2::new(20., 0.)) + vector.segment_iter().nth(9).unwrap().1, + PathSeg::Quad(QuadBez::new(Point::new(11., 0.), Point::new(16., 10.), Point::new(20., 0.))) ); } } diff --git a/node-graph/libraries/vector-types/src/vector/vector_types.rs b/node-graph/libraries/vector-types/src/vector/vector_types.rs index 38809ae5f5..62367f05b6 100644 --- a/node-graph/libraries/vector-types/src/vector/vector_types.rs +++ b/node-graph/libraries/vector-types/src/vector/vector_types.rs @@ -1,14 +1,11 @@ use super::misc::dvec2_to_point; use super::style::{Stroke, StrokeAlign, StrokeCap, StrokeJoin}; -pub use super::vector_attributes::*; -use crate::subpath::{BezierHandles, ManipulatorGroup, Subpath}; -use crate::vector::click_target::{ClickTargetType, FreePoint}; +use super::vector_attributes::*; +use crate::vector::misc::{BezierHandles, ManipulatorGroup}; use crate::vector::misc::{HandleId, ManipulatorPointId}; use crate::vector::vector_modification::VectorExt; -use core::borrow::Borrow; use core_types::bounds::{BoundingBox, RenderBoundingBox}; use core_types::render_complexity::RenderComplexity; -use core_types::transform::Transform; use dyn_any::StaticType; use glam::{DAffine2, DVec2}; use kurbo::{Affine, BezPath, Rect, Shape}; @@ -18,15 +15,12 @@ use std::collections::HashMap; #[derive(Clone, Debug, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct Vector { - pub stroke: Option, - /// A list of all manipulator groups (referenced in `subpaths`) that have colinear handles (where they're locked at 180Β° angles from one another). /// This gets read in `graph_operation_message_handler.rs` by calling `inputs.as_mut_slice()` (search for the string `"Shape does not have both `subpath` and `colinear_manipulators` inputs"` to find it). pub colinear_manipulators: Vec<[HandleId; 2]>, pub point_domain: PointDomain, pub segment_domain: SegmentDomain, - pub region_domain: RegionDomain, } unsafe impl StaticType for Vector { type Static = Self; @@ -35,11 +29,9 @@ unsafe impl StaticType for Vector { impl Default for Vector { fn default() -> Self { Self { - stroke: Some(Stroke::new(0.)), colinear_manipulators: Vec::new(), point_domain: PointDomain::new(), segment_domain: SegmentDomain::new(), - region_domain: RegionDomain::new(), } } } @@ -48,8 +40,6 @@ impl graphene_hash::CacheHash for Vector { fn cache_hash(&self, state: &mut H) { self.point_domain.cache_hash(state); self.segment_domain.cache_hash(state); - self.region_domain.cache_hash(state); - self.stroke.cache_hash(state); self.colinear_manipulators.cache_hash(state); } } @@ -63,33 +53,38 @@ impl core_types::ops::FromAnchorPosition for Vector { } } -// Identity item conversion so `List` satisfies the blanket `Convert, ()> for List`, letting its -// auto-inserted input wrapper be a `ConvertNode` (which also accepts a `DVec2` anchor position) rather than an `IntoNode`. -impl core_types::ops::ListConvert for Vector { - fn convert_item(self) -> Vector { - self +// Lets a position wire feed a ranked vector connector through the input adapter's element conversion +impl From for Vector { + fn from(position: DVec2) -> Self { + ::from_anchor_position(position) + } +} + +impl core_types::transform::BakeTransform for Vector { + fn bake_transform(&mut self, transform: &glam::DAffine2) { + for (_, point) in self.point_domain.positions_mut() { + *point = transform.transform_point2(*point); + } + self.segment_domain.transform(*transform); } } impl Vector { - /// Add a subpath to this vector path. - pub fn append_subpath(&mut self, subpath: impl Borrow>, preserve_id: bool) { - let subpath: &Subpath = subpath.borrow(); - let stroke_id = StrokeId::ZERO; + /// Add a path of manipulator groups to this vector path. + pub fn append_manipulator_groups(&mut self, manipulator_groups: &[ManipulatorGroup], closed: bool, preserve_id: bool) { let mut point_id = self.point_domain.next_id(); - let handles = |a: &ManipulatorGroup<_>, b: &ManipulatorGroup<_>| match (a.out_handle, b.in_handle) { + let handles = |a: &ManipulatorGroup, b: &ManipulatorGroup| match (a.out_handle, b.in_handle) { (None, None) => BezierHandles::Linear, (Some(handle), None) | (None, Some(handle)) => BezierHandles::Quadratic { handle }, (Some(handle_start), Some(handle_end)) => BezierHandles::Cubic { handle_start, handle_end }, }; - let [mut first_seg, mut last_seg] = [None, None]; let mut segment_id = self.segment_domain.next_id(); let mut last_point = None; let mut first_point = None; // Construct a bezier segment from the two manipulators on the subpath. - for pair in subpath.manipulator_groups().windows(2) { + for pair in manipulator_groups.windows(2) { let start = last_point.unwrap_or_else(|| { let id = if preserve_id && !self.point_domain.ids().contains(&pair[0].id) { pair[0].id @@ -109,46 +104,17 @@ impl Vector { self.point_domain.push(end, pair[1].anchor); let id = segment_id.next_id(); - first_seg = Some(first_seg.unwrap_or(id)); - last_seg = Some(id); - self.segment_domain.push(id, start, end_index, handles(&pair[0], &pair[1]), stroke_id); + self.segment_domain.push(id, start, end_index, handles(&pair[0], &pair[1])); last_point = Some(end_index); } - let fill_id = FillId::ZERO; - - if subpath.closed() { - if let (Some(last), Some(first), Some(first_id), Some(last_id)) = (subpath.manipulator_groups().last(), subpath.manipulator_groups().first(), first_point, last_point) { - let id = segment_id.next_id(); - first_seg = Some(first_seg.unwrap_or(id)); - last_seg = Some(id); - self.segment_domain.push(id, last_id, first_id, handles(last, first), stroke_id); - } - - if let [Some(first_seg), Some(last_seg)] = [first_seg, last_seg] { - self.region_domain.push(self.region_domain.next_id(), first_seg..=last_seg, fill_id); - } + if closed && let (Some(last), Some(first), Some(first_id), Some(last_id)) = (manipulator_groups.last(), manipulator_groups.first(), first_point, last_point) { + let id = segment_id.next_id(); + self.segment_domain.push(id, last_id, first_id, handles(last, first)); } } - pub fn append_free_point(&mut self, point: &FreePoint, preserve_id: bool) { - let mut point_id = self.point_domain.next_id(); - - // Use the current point ID if it's not already in the domain, otherwise generate a new one - let id = if preserve_id && !self.point_domain.ids().contains(&point.id) { - point.id - } else { - point_id.next_id() - }; - self.point_domain.push(id, point.position); - } - - /// Construct some new vector path from a single subpath with an identity transform and black fill. - pub fn from_subpath(subpath: impl Borrow>) -> Self { - Self::from_subpaths([subpath], false) - } - /// Construct some new vector path from a single [`BezPath`] with an identity transform and black fill. pub fn from_bezpath(bezpath: BezPath) -> Self { let mut vector = Self::default(); @@ -156,35 +122,6 @@ impl Vector { vector } - /// Construct some new vector path from subpaths with an identity transform and black fill. - pub fn from_subpaths(subpaths: impl IntoIterator>>, preserve_id: bool) -> Self { - let mut vector = Self::default(); - - for subpath in subpaths.into_iter() { - vector.append_subpath(subpath, preserve_id); - } - - vector - } - - pub fn from_target_types(target_types: impl IntoIterator>, preserve_id: bool) -> Self { - let mut vector = Self::default(); - - for target_type in target_types.into_iter() { - match target_type.borrow() { - ClickTargetType::Subpath(subpath) => vector.append_subpath(subpath, preserve_id), - ClickTargetType::FreePoint(point) => vector.append_free_point(point, preserve_id), - ClickTargetType::CompoundPath(subpaths) => { - for subpath in subpaths { - vector.append_subpath(subpath, preserve_id); - } - } - } - } - - vector - } - /// Compute the bounding boxes of the bezpaths without any transform pub fn bounding_box_rect(&self) -> Option { self.bounding_box_with_transform_rect(DAffine2::IDENTITY) @@ -203,7 +140,7 @@ impl Vector { for (start, end) in segments_to_add { let segment_id = self.segment_domain.next_id().next_id(); - self.segment_domain.push(segment_id, start, end, BezierHandles::Linear, StrokeId::ZERO); + self.segment_domain.push(segment_id, start, end, BezierHandles::Linear); } } @@ -220,7 +157,7 @@ impl Vector { } /// Compute the bounding boxes of the bezpaths with the specified transform - pub fn bounding_box_with_transform_rect(&self, transform: DAffine2) -> Option { + fn bounding_box_with_transform_rect(&self, transform: DAffine2) -> Option { let combine = |r1: Rect, r2: Rect| r1.union(r2); self.stroke_bezpath_iter() .map(|mut bezpath| { @@ -239,13 +176,13 @@ impl Vector { /// identity (`Inside` = 0, `Outside` = 2Γ—weight): the renderer masks half of a centered double-width /// stroke, so its AABB matches the unmasked centered stroke's. For open paths the renderer always /// draws a centered `weight`-wide stroke regardless of the align attribute, so we mirror that here. - pub fn stroke_inclusive_bounding_box_with_transform(&self, transform: DAffine2) -> Option<[DVec2; 2]> { + pub fn stroke_inclusive_bounding_box_with_transform(&self, transform: DAffine2, stroke: Option<&Stroke>) -> Option<[DVec2; 2]> { let path_bounds = self.bounding_box_with_transform(transform); - let Some(stroke) = self.stroke.as_ref() else { return path_bounds }; + let Some(stroke) = stroke else { return path_bounds }; // Stroke alignment is only honored by the renderer when every subpath is closed; open paths fall // back to drawing a Center-aligned `weight`-wide stroke. Match that behavior to keep bounds in sync. - let aligned_renders = stroke.align != StrokeAlign::Center && self.stroke_bezier_paths().all(|p| p.closed()); + let aligned_renders = stroke.align != StrokeAlign::Center && self.stroke_bezpath_iter().all(|path| matches!(path.elements().last(), Some(kurbo::PathEl::ClosePath))); let kurbo_width = if aligned_renders { stroke.effective_width() } else { stroke.weight }; // `Inside`-aligned strokes never expand beyond the path bounds; a zero-weight stroke is invisible if kurbo_width <= 0. { @@ -318,13 +255,6 @@ impl Vector { [bounds_min, bounds_max] } - /// Compute the pivot of the layer in layerspace (the coordinates of the subpaths) - pub fn layerspace_pivot(&self, normalized_pivot: DVec2) -> DVec2 { - let [bounds_min, bounds_max] = self.nonzero_bounding_box(); - let bounds_size = bounds_max - bounds_min; - bounds_min + bounds_size * normalized_pivot - } - pub fn start_point(&self) -> impl Iterator + '_ { self.segment_domain.start_point().iter().map(|&index| self.point_domain.ids()[index]) } @@ -333,7 +263,7 @@ impl Vector { self.segment_domain.end_point().iter().map(|&index| self.point_domain.ids()[index]) } - pub fn push(&mut self, id: SegmentId, start: PointId, end: PointId, handles: (Option, Option), stroke: StrokeId) { + pub fn push(&mut self, id: SegmentId, start: PointId, end: PointId, handles: (Option, Option)) { let [Some(start), Some(end)] = [start, end].map(|id| self.point_domain.resolve_id(id)) else { return; }; @@ -342,7 +272,7 @@ impl Vector { (None, Some(handle)) | (Some(handle), None) => BezierHandles::Quadratic { handle }, (Some(handle_start), Some(handle_end)) => BezierHandles::Cubic { handle_start, handle_end }, }; - self.segment_domain.push(id, start, end, handles, stroke) + self.segment_domain.push(id, start, end, handles) } pub fn handles_mut(&mut self) -> impl Iterator { @@ -359,11 +289,6 @@ impl Vector { self.segment_domain.segment_end_from_id(segment).map(|index| self.point_domain.ids()[index]) } - /// Returns an array for the start and end points of a segment. - pub fn points_from_id(&self, segment: SegmentId) -> Option<[PointId; 2]> { - self.segment_domain.points_from_id(segment).map(|val| val.map(|index| self.point_domain.ids()[index])) - } - /// Attempts to find another point in the segment that is not the one passed in. pub fn other_point(&self, segment: SegmentId, current: PointId) -> Option { let index = self.point_domain.resolve_id(current); @@ -378,8 +303,8 @@ impl Vector { /// Returns the number of linear segments connected to the given point. pub fn connected_linear_segments(&self, point_id: PointId) -> usize { - self.segment_bezier_iter() - .filter(|(_, bez, start, end)| (*start == point_id || *end == point_id) && matches!(bez.handles, BezierHandles::Linear)) + self.segment_iter() + .filter(|(_, segment, start, end)| (*start == point_id || *end == point_id) && matches!(segment, kurbo::PathSeg::Line(_))) .count() } @@ -441,7 +366,15 @@ impl Vector { /// Anchor points at the ends of open subpaths. These are points with exactly one connection by a segment to another anchor. pub fn anchor_endpoints(&self) -> impl Iterator + '_ { - self.anchor_points().enumerate().filter(|&(index, _)| self.segment_domain.connected_count(index) == 1).map(|(_, id)| id) + // O(points + segments): tally every point's connections in a single pass + let mut connected_counts = vec![0_usize; self.point_domain.ids().len()]; + for &point_index in self.segment_domain.start_point().iter().chain(self.segment_domain.end_point()) { + if let Some(count) = connected_counts.get_mut(point_index) { + *count += 1; + } + } + + self.anchor_points().zip(connected_counts).filter(|&(_, count)| count == 1).map(|(id, _)| id) } /// Computes if all the connected handles are colinear for an anchor, or if that handle is colinear for a handle. @@ -511,59 +444,25 @@ impl Vector { .map(|&old| (old, old.generate_from_hash(collision_hash_seed))) .collect::>(); - let region_map = additional - .region_domain - .ids() - .iter() - .filter(|id| self.region_domain.ids().contains(id)) - .map(|&old| (old, old.generate_from_hash(collision_hash_seed))) - .collect::>(); - let id_map = IdMap { point_offset: self.point_domain.ids().len(), point_map, segment_map, - region_map, }; self.point_domain.concat(&additional.point_domain, transform_of_additional, &id_map); self.segment_domain.concat(&additional.segment_domain, transform_of_additional, &id_map); - self.region_domain.concat(&additional.region_domain, transform_of_additional, &id_map); - - // TODO: properly deal with fills such as gradients - self.stroke = additional.stroke.clone(); self.colinear_manipulators.extend(additional.colinear_manipulators.iter().copied()); } - - pub fn set_stroke_transform(&mut self, transform: DAffine2) { - if let Some(stroke) = &mut self.stroke { - stroke.transform = transform; - } - } } +// The element sees only geometry; stroke inflation is applied at the row level by `vector_list_bounding_box` +// in graphic-types, which can read the appearance attribute the stroke parameters live on. impl BoundingBox for Vector { - fn bounding_box(&self, transform: DAffine2, include_stroke: bool) -> RenderBoundingBox { - if !include_stroke { - // Just use the path bounds without stroke - return match self.bounding_box_with_transform(transform) { - Some(bounds) => RenderBoundingBox::Rectangle(bounds), - None => RenderBoundingBox::None, - }; - } - - // Include stroke by adding offset based on stroke width - let stroke = self.stroke.clone(); - let stroke_width = stroke.as_ref().map(|s| s.weight()).unwrap_or_default(); - let miter_limit = stroke.as_ref().map(|s| s.join_miter_limit).unwrap_or(1.); - let scale = transform.scale_magnitudes(); - - // Use the full line width to account for different styles of stroke caps - let offset = DVec2::splat(stroke_width * scale.x.max(scale.y) * miter_limit); - + fn bounding_box(&self, transform: DAffine2, _include_stroke: bool) -> RenderBoundingBox { match self.bounding_box_with_transform(transform) { - Some([a, b]) => RenderBoundingBox::Rectangle([a - offset, b + offset]), + Some(bounds) => RenderBoundingBox::Rectangle(bounds), None => RenderBoundingBox::None, } } @@ -583,64 +482,68 @@ impl RenderComplexity for Vector { #[cfg(test)] mod tests { + use crate::vector::algorithms::shapes::ellipse_bezpath; use kurbo::{CubicBez, PathSeg, Point}; use super::*; - fn assert_subpath_eq(generated: &[Subpath], expected: &[Subpath]) { - assert_eq!(generated.len(), expected.len()); - for (generated, expected) in generated.iter().zip(expected) { - assert_eq!(generated.manipulator_groups().len(), expected.manipulator_groups().len()); - assert_eq!(generated.closed(), expected.closed()); - for (generated, expected) in generated.manipulator_groups().iter().zip(expected.manipulator_groups()) { - assert_eq!(generated.in_handle, expected.in_handle); - assert_eq!(generated.out_handle, expected.out_handle); - assert_eq!(generated.anchor, expected.anchor); - } - } + fn open_curve_bezpath() -> BezPath { + let mut bezpath = BezPath::new(); + bezpath.move_to(Point::ZERO); + bezpath.curve_to(Point::new(-1., -1.), Point::new(1., 1.), Point::new(1., 0.)); + bezpath } #[test] - fn construct_closed_subpath() { - let circle = Subpath::new_ellipse(DVec2::NEG_ONE, DVec2::ONE); - let vector: Vector = Vector::from_subpath(&circle); + fn construct_closed_path() { + let circle = ellipse_bezpath(DVec2::NEG_ONE, DVec2::ONE); + let vector = Vector::from_bezpath(circle.clone()); assert_eq!(vector.point_domain.ids().len(), 4); - let bezier_paths = vector.segment_iter().map(|(_, bezier, _, _)| bezier).collect::>(); - assert_eq!(bezier_paths.len(), 4); - assert!(bezier_paths.iter().all(|&bezier| circle.iter().any(|original_bezier| original_bezier == bezier))); - let generated = vector.stroke_bezier_paths().collect::>(); - assert_subpath_eq(&generated, &[circle]); + let segments = vector.segment_iter().map(|(_, bezier, _, _)| bezier).collect::>(); + assert_eq!(segments.len(), 4); + assert!(segments.iter().all(|&segment| circle.segments().any(|original| original == segment))); + + let generated = vector.stroke_bezpath_iter().collect::>(); + assert_eq!(generated.len(), 1); + assert_eq!(generated[0].elements(), circle.elements()); } #[test] - fn construct_open_subpath() { - let bezier = PathSeg::Cubic(CubicBez::new(Point::ZERO, Point::new(-1., -1.), Point::new(1., 1.), Point::new(1., 0.))); - let subpath = Subpath::from_bezier(bezier); - let vector: Vector = Vector::from_subpath(&subpath); + fn construct_open_path() { + let curve = open_curve_bezpath(); + let vector = Vector::from_bezpath(curve.clone()); assert_eq!(vector.point_domain.ids().len(), 2); - let bezier_paths = vector.segment_iter().map(|(_, bezier, _, _)| bezier).collect::>(); - assert_eq!(bezier_paths, vec![bezier]); - let generated = vector.stroke_bezier_paths().collect::>(); - assert_subpath_eq(&generated, &[subpath]); + let segments = vector.segment_iter().map(|(_, bezier, _, _)| bezier).collect::>(); + assert_eq!(segments, vec![PathSeg::Cubic(CubicBez::new(Point::ZERO, Point::new(-1., -1.), Point::new(1., 1.), Point::new(1., 0.)))]); + + let generated = vector.stroke_manipulator_groups().collect::>(); + assert_eq!(generated.len(), 1); + let (groups, closed) = &generated[0]; + assert!(!closed); + assert_eq!(groups.len(), 2); + assert_eq!((groups[0].anchor, groups[0].in_handle, groups[0].out_handle), (DVec2::ZERO, None, Some(DVec2::new(-1., -1.)))); + assert_eq!((groups[1].anchor, groups[1].in_handle, groups[1].out_handle), (DVec2::new(1., 0.), Some(DVec2::new(1., 1.)), None)); } #[test] - fn construct_many_subpath() { - let curve = PathSeg::Cubic(CubicBez::new(Point::ZERO, Point::new(-1., -1.), Point::new(1., 1.), Point::new(1., 0.))); - let curve = Subpath::from_bezier(curve); - let circle = Subpath::new_ellipse(DVec2::NEG_ONE, DVec2::ONE); + fn construct_many_paths() { + let curve = open_curve_bezpath(); + let circle = ellipse_bezpath(DVec2::NEG_ONE, DVec2::ONE); - let vector: Vector = Vector::from_subpaths([&curve, &circle], false); + let mut vector = Vector::from_bezpath(curve.clone()); + vector.append_bezpath(circle.clone()); assert_eq!(vector.point_domain.ids().len(), 6); - let bezier_paths = vector.segment_iter().map(|(_, bezier, _, _)| bezier).collect::>(); - assert_eq!(bezier_paths.len(), 5); - assert!(bezier_paths.iter().all(|&bezier| circle.iter().chain(curve.iter()).any(|original_bezier| original_bezier == bezier))); + let segments = vector.segment_iter().map(|(_, bezier, _, _)| bezier).collect::>(); + assert_eq!(segments.len(), 5); + assert!(segments.iter().all(|&segment| circle.segments().chain(curve.segments()).any(|original| original == segment))); - let generated = vector.stroke_bezier_paths().collect::>(); - assert_subpath_eq(&generated, &[curve, circle]); + let generated = vector.stroke_bezpath_iter().collect::>(); + assert_eq!(generated.len(), 2); + assert_eq!(generated[0].elements(), curve.elements()); + assert_eq!(generated[1].elements(), circle.elements()); } // Verifies the `DVec2 -> List` conversion that replaced the former "Vec2 to Point" node yields a path diff --git a/node-graph/libraries/wgpu-executor/src/buffer.rs b/node-graph/libraries/wgpu-executor/src/buffer.rs new file mode 100644 index 0000000000..b6f58a323b --- /dev/null +++ b/node-graph/libraries/wgpu-executor/src/buffer.rs @@ -0,0 +1,34 @@ +use std::ops::Deref; +use std::sync::Arc; + +#[derive(Clone, Debug)] +pub struct Buffer(Arc); + +#[derive(Debug)] +struct BufferInner(wgpu::Buffer); + +impl Drop for BufferInner { + fn drop(&mut self) { + self.0.destroy(); + } +} + +impl Deref for Buffer { + type Target = wgpu::Buffer; + + fn deref(&self) -> &Self::Target { + &self.0.0 + } +} + +impl AsRef for Buffer { + fn as_ref(&self) -> &wgpu::Buffer { + &self.0.0 + } +} + +impl From for Buffer { + fn from(buffer: wgpu::Buffer) -> Self { + Self(Arc::new(BufferInner(buffer))) + } +} diff --git a/node-graph/libraries/wgpu-executor/src/lib.rs b/node-graph/libraries/wgpu-executor/src/lib.rs index 15ba51c99a..a70df1cc8a 100644 --- a/node-graph/libraries/wgpu-executor/src/lib.rs +++ b/node-graph/libraries/wgpu-executor/src/lib.rs @@ -1,3 +1,4 @@ +mod buffer; mod context; mod pipeline; pub mod shader_runtime; @@ -11,16 +12,18 @@ use core_types::Color; use core_types::color::SRGBA8; use glam::UVec2; use graphene_application_io::{ApplicationIo, EditorApi}; -use raster_types::Texture; use std::sync::Arc; use std::sync::Mutex; use vello::{AaConfig, AaSupport, RenderParams, Renderer, RendererOptions, Scene}; +use wgpu::util::DeviceExt; use wgpu::{Origin3d, TextureAspect}; +pub use buffer::Buffer; pub use context::Context as WgpuContext; pub use context::ContextBuilder as WgpuContextBuilder; pub use pipeline::Pipeline as WgpuPipeline; pub use pipeline::PipelineCache as WgpuPipelineCache; +pub use raster_types::Texture; pub use rendering::RenderContext; pub use wgpu::Backends as WgpuBackends; pub use wgpu::Features as WgpuFeatures; @@ -29,7 +32,10 @@ pub use wgpu_sync::Instance as WgpuInstance; pub use wgpu_sync::Queue as WgpuQueue; pub use wgpu_sync::Surface as WgpuSurface; -const TEXTURE_CACHE_SIZE: u64 = 256 * 1024 * 1024; // 256 MiB +#[cfg(not(target_family = "wasm"))] +const TEXTURE_CACHE_SIZE: u64 = 1024 * 1024 * 1024; // 1GB +#[cfg(target_family = "wasm")] +const TEXTURE_CACHE_SIZE: u64 = 512 * 1024 * 1024; // 512MB #[derive(dyn_any::DynAny, Clone)] pub struct WgpuExecutor { @@ -40,16 +46,12 @@ impl WgpuExecutor { pub fn context(&self) -> &WgpuContext { &self.inner.context } - - pub fn shader_runtime(&self) -> &ShaderRuntime { - &self.inner.shader_runtime - } } #[derive(dyn_any::DynAny)] pub struct WgpuExecutorInner { context: WgpuContext, - texture_cache: Mutex, + texture_cache: std::sync::Mutex, vello_renderer: Mutex, shader_runtime: ShaderRuntime, } @@ -121,7 +123,19 @@ impl WgpuExecutor { } pub fn request_texture(&self, size: UVec2) -> Texture { - self.inner.texture_cache.lock().unwrap().request_texture(&self.context().device, size) + self.request_texture_with_format(size, wgpu::TextureFormat::Rgba8Unorm) + } + + pub fn request_texture_with_format(&self, size: UVec2, format: wgpu::TextureFormat) -> Texture { + self.inner.texture_cache.lock().unwrap().request_texture(&self.context().device, size, format) + } + + pub fn create_buffer(&self, desc: &wgpu::BufferDescriptor) -> Buffer { + self.context().device.create_buffer(desc).into() + } + + pub fn create_buffer_init(&self, desc: &wgpu::util::BufferInitDescriptor) -> Buffer { + self.context().device.create_buffer_init(desc).into() } } @@ -145,7 +159,7 @@ impl WgpuExecutor { let texture_cache = TextureCache::new(TEXTURE_CACHE_SIZE); - let shader_runtime = ShaderRuntime::new(&context); + let shader_runtime = ShaderRuntime::default(); Some(Self { inner: Arc::new(WgpuExecutorInner { diff --git a/node-graph/libraries/wgpu-executor/src/shader_runtime/mod.rs b/node-graph/libraries/wgpu-executor/src/shader_runtime/mod.rs index a32e17aabb..540ddf8c8a 100644 --- a/node-graph/libraries/wgpu-executor/src/shader_runtime/mod.rs +++ b/node-graph/libraries/wgpu-executor/src/shader_runtime/mod.rs @@ -1,20 +1,10 @@ -use crate::WgpuContext; use crate::shader_runtime::per_pixel_adjust_runtime::PerPixelAdjustShaderRuntime; pub mod per_pixel_adjust_runtime; pub const FULLSCREEN_VERTEX_SHADER_NAME: &str = "fullscreen_vertex_fullscreen_vertex"; +#[derive(Default)] pub struct ShaderRuntime { - context: WgpuContext, per_pixel_adjust: PerPixelAdjustShaderRuntime, } - -impl ShaderRuntime { - pub fn new(context: &WgpuContext) -> Self { - Self { - context: context.clone(), - per_pixel_adjust: PerPixelAdjustShaderRuntime::new(), - } - } -} diff --git a/node-graph/libraries/wgpu-executor/src/shader_runtime/per_pixel_adjust_runtime.rs b/node-graph/libraries/wgpu-executor/src/shader_runtime/per_pixel_adjust_runtime.rs index ef62a9de46..266d0887ad 100644 --- a/node-graph/libraries/wgpu-executor/src/shader_runtime/per_pixel_adjust_runtime.rs +++ b/node-graph/libraries/wgpu-executor/src/shader_runtime/per_pixel_adjust_runtime.rs @@ -1,16 +1,17 @@ -use crate::WgpuContext; -use crate::shader_runtime::{FULLSCREEN_VERTEX_SHADER_NAME, ShaderRuntime}; +use crate::shader_runtime::FULLSCREEN_VERTEX_SHADER_NAME; +use crate::{Buffer, WgpuContext, WgpuExecutor}; use core_types::list::{Item, List}; use core_types::shaders::buffer_struct::BufferStruct; +use glam::UVec2; use raster_types::{GPU, Raster}; use std::borrow::Cow; use std::collections::HashMap; use std::sync::{Mutex, PoisonError}; -use wgpu::util::{BufferInitDescriptor, DeviceExt}; +use wgpu::util::BufferInitDescriptor; use wgpu::{ - BindGroupDescriptor, BindGroupEntry, BindGroupLayoutDescriptor, BindGroupLayoutEntry, BindingResource, BindingType, Buffer, BufferBinding, BufferBindingType, BufferUsages, ColorTargetState, Face, + BindGroupDescriptor, BindGroupEntry, BindGroupLayoutDescriptor, BindGroupLayoutEntry, BindingResource, BindingType, BufferBinding, BufferBindingType, BufferUsages, ColorTargetState, Face, FragmentState, FrontFace, LoadOp, Operations, PipelineLayoutDescriptor, PolygonMode, PrimitiveState, PrimitiveTopology, RenderPassColorAttachment, RenderPassDescriptor, RenderPipelineDescriptor, - ShaderModuleDescriptor, ShaderSource, ShaderStages, StoreOp, TextureDescriptor, TextureDimension, TextureFormat, TextureSampleType, TextureViewDescriptor, TextureViewDimension, VertexState, + ShaderModuleDescriptor, ShaderSource, ShaderStages, StoreOp, TextureFormat, TextureSampleType, TextureViewDescriptor, TextureViewDimension, VertexState, }; pub struct PerPixelAdjustShaderRuntime { @@ -32,22 +33,21 @@ impl PerPixelAdjustShaderRuntime { } } -impl ShaderRuntime { +impl WgpuExecutor { pub fn run_per_pixel_adjust(&self, shaders: &Shaders<'_>, textures: List>, args: Option<&T>) -> List> { - let mut cache = self.per_pixel_adjust.pipeline_cache.lock().unwrap_or_else(PoisonError::into_inner); + let mut cache = self.inner.shader_runtime.per_pixel_adjust.pipeline_cache.lock().unwrap_or_else(PoisonError::into_inner); let pipeline = cache .entry(shaders.fragment_shader_name.to_owned()) - .or_insert_with(|| PerPixelAdjustGraphicsPipeline::new(&self.context, shaders)); + .or_insert_with(|| PerPixelAdjustGraphicsPipeline::new(self.context(), shaders)); let arg_buffer = args.map(|args| { - let device = &self.context.device; - device.create_buffer_init(&BufferInitDescriptor { + self.create_buffer_init(&BufferInitDescriptor { label: Some(&format!("{} arg buffer", pipeline.name.as_str())), usage: BufferUsages::STORAGE, contents: bytemuck::bytes_of(&T::write(*args)), }) }); - pipeline.dispatch(&self.context, textures, arg_buffer) + pipeline.dispatch(self, textures, arg_buffer) } } @@ -160,9 +160,9 @@ impl PerPixelAdjustGraphicsPipeline { } } - pub fn dispatch(&self, context: &WgpuContext, textures: List>, arg_buffer: Option) -> List> { + pub fn dispatch(&self, executor: &WgpuExecutor, textures: List>, arg_buffer: Option) -> List> { assert_eq!(self.has_uniform, arg_buffer.is_some()); - let device = &context.device; + let device = &executor.context().device; let name = self.name.as_str(); let mut cmd = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { @@ -203,16 +203,7 @@ impl PerPixelAdjustGraphicsPipeline { entries, }); - let tex_out = device.create_texture(&TextureDescriptor { - label: Some(&format!("{name} texture out")), - size: tex_in.size(), - mip_level_count: 1, - sample_count: 1, - dimension: TextureDimension::D2, - format, - usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST | wgpu::TextureUsages::COPY_SRC | wgpu::TextureUsages::RENDER_ATTACHMENT, - view_formats: &[format], - }); + let tex_out = executor.request_texture_with_format(UVec2::new(tex_in.width(), tex_in.height()), format); let view_out = tex_out.create_view(&TextureViewDescriptor::default()); let mut rp = cmd.begin_render_pass(&RenderPassDescriptor { @@ -237,7 +228,7 @@ impl PerPixelAdjustGraphicsPipeline { Item::from_parts(Raster::new_gpu(tex_out), attributes) }) .collect::>(); - context.queue.submit([cmd.finish()]); + executor.context().queue.submit([cmd.finish()]); out } } diff --git a/node-graph/libraries/wgpu-executor/src/texture_cache.rs b/node-graph/libraries/wgpu-executor/src/texture_cache.rs index aba3784f78..4b8c85671b 100644 --- a/node-graph/libraries/wgpu-executor/src/texture_cache.rs +++ b/node-graph/libraries/wgpu-executor/src/texture_cache.rs @@ -1,11 +1,10 @@ use glam::UVec2; use raster_types::Texture; use std::collections::VecDeque; -use std::sync::Arc; pub(crate) struct TextureCache { /// Always sorted oldest-first by insertion/last-use order. - textures: VecDeque>, + textures: VecDeque, max_free_bytes: u64, } @@ -17,49 +16,53 @@ impl TextureCache { } } - pub fn request_texture(&mut self, device: &wgpu::Device, size: UVec2) -> Texture { + pub fn request_texture(&mut self, device: &wgpu::Device, size: UVec2, format: wgpu::TextureFormat) -> Texture { let size = size.max(UVec2::ONE); if let Some(pos) = self .textures .iter() - .position(|texture| UVec2::new(texture.width(), texture.height()) == size && Arc::strong_count(texture) == 1) + .position(|texture| UVec2::new(texture.width(), texture.height()) == size && texture.format() == format && !texture.is_shared() && !texture.is_weakly_shared()) { let entry = self.textures.remove(pos).unwrap(); let texture = entry.clone(); self.textures.push_back(entry); - return texture.into(); + return texture; } - let incoming_bytes = size.x as u64 * size.y as u64 * 4; + let incoming_bytes = size.x as u64 * size.y as u64 * format.block_copy_size(None).unwrap_or(4) as u64; self.evict_until_fits(incoming_bytes); - let texture = Arc::new(device.create_texture(&wgpu::TextureDescriptor { - label: Some(&format!("cached_texture_{}x{}", size.x, size.y)), - size: wgpu::Extent3d { - width: size.x, - height: size.y, - depth_or_array_layers: 1, - }, - mip_level_count: 1, - sample_count: 1, - dimension: wgpu::TextureDimension::D2, - format: wgpu::TextureFormat::Rgba8Unorm, - usage: wgpu::TextureUsages::COPY_SRC | wgpu::TextureUsages::COPY_DST | wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::STORAGE_BINDING | wgpu::TextureUsages::RENDER_ATTACHMENT, - view_formats: &[], - })); + let texture: Texture = device + .create_texture(&wgpu::TextureDescriptor { + label: Some(&format!("cached_{}x{}", size.x, size.y)), + size: wgpu::Extent3d { + width: size.x, + height: size.y, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format, + usage: { + let common = wgpu::TextureUsages::COPY_SRC | wgpu::TextureUsages::COPY_DST | wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::RENDER_ATTACHMENT; + match format { + wgpu::TextureFormat::Rgba8Unorm => common | wgpu::TextureUsages::STORAGE_BINDING, + _ => common, + } + }, + view_formats: &[], + }) + .into(); self.textures.push_back(texture.clone()); - texture.into() + texture } fn total_free_bytes(&self) -> u64 { - self.textures - .iter() - .filter(|texture| Arc::strong_count(texture) == 1) - .map(|texture| texture.memory_size_estimate()) - .sum() + self.textures.iter().filter(|texture| !texture.is_shared()).map(|texture| texture.memory_size_estimate()).sum() } fn evict_until_fits(&mut self, incoming_bytes: u64) { @@ -70,18 +73,19 @@ impl TextureCache { return; } - self.textures.retain(|texture| { - if free_bytes + incoming_bytes <= max_free_bytes { - return true; - } - if Arc::strong_count(texture) == 1 { - free_bytes -= texture.memory_size_estimate(); - texture.destroy(); - false - } else { - true - } - }); + for parked in [false, true] { + self.textures.retain(|texture| { + if free_bytes + incoming_bytes <= max_free_bytes { + return true; + } + if !texture.is_shared() && texture.is_weakly_shared() == parked { + free_bytes -= texture.memory_size_estimate(); + false + } else { + true + } + }); + } } } @@ -91,6 +95,6 @@ trait TextureMemoryCostEstimateExt { impl TextureMemoryCostEstimateExt for wgpu::Texture { fn memory_size_estimate(&self) -> u64 { - self.width() as u64 * self.height() as u64 * 4 + self.width() as u64 * self.height() as u64 * self.format().block_copy_size(None).unwrap_or(4) as u64 } } diff --git a/node-graph/libraries/wgpu-executor/src/texture_conversion.rs b/node-graph/libraries/wgpu-executor/src/texture_conversion.rs index c4e8eefca0..e699c317b4 100644 --- a/node-graph/libraries/wgpu-executor/src/texture_conversion.rs +++ b/node-graph/libraries/wgpu-executor/src/texture_conversion.rs @@ -1,4 +1,4 @@ -use crate::WgpuExecutorHandle; +use crate::{Buffer, WgpuExecutor, WgpuExecutorHandle}; use core_types::Color; use core_types::Ctx; use core_types::color::SRGBA8; @@ -7,36 +7,29 @@ use core_types::ops::{Convert, ConvertAsync}; use core_types::runtime::SourceFuture; use core_types::transform::Footprint; use raster_types::Image; -use raster_types::{CPU, GPU, Raster}; -use wgpu::util::{DeviceExt, TextureDataOrder}; -use wgpu::{Extent3d, TextureDescriptor, TextureDimension, TextureFormat, TextureUsages}; +use raster_types::{CPU, GPU, Raster, Texture}; +use wgpu::{Extent3d, TextureFormat}; /// Uploads CPU image data to a GPU texture -/// -/// Creates a new WGPU texture with RGBA8UnormSrgb format and uploads the provided -/// image data. The texture is configured for binding, copying, and source operations. -fn upload_to_texture(device: &wgpu::Device, queue: &wgpu::Queue, image: &Raster) -> wgpu::Texture { +fn upload_to_texture(executor: &WgpuExecutor, queue: &wgpu::Queue, image: &Raster) -> Texture { let rgba8_data: Vec = image.data.iter().map(|x| (*x).into()).collect(); - device.create_texture_with_data( - queue, - &TextureDescriptor { - label: Some("upload_texture node texture"), - size: Extent3d { - width: image.width, - height: image.height, - depth_or_array_layers: 1, - }, - mip_level_count: 1, - sample_count: 1, - dimension: TextureDimension::D2, - format: TextureFormat::Rgba8UnormSrgb, - usage: TextureUsages::TEXTURE_BINDING | TextureUsages::COPY_DST | TextureUsages::COPY_SRC, - view_formats: &[], - }, - TextureDataOrder::LayerMajor, + let texture = executor.request_texture_with_format(glam::UVec2::new(image.width, image.height), TextureFormat::Rgba8UnormSrgb); + queue.write_texture( + texture.as_image_copy(), bytemuck::cast_slice(rgba8_data.as_slice()), - ) + wgpu::TexelCopyBufferLayout { + offset: 0, + bytes_per_row: Some(4 * image.width), + rows_per_image: Some(image.height), + }, + Extent3d { + width: image.width, + height: image.height, + depth_or_array_layers: 1, + }, + ); + texture } /// Passthrough conversion for GPU `List`s - no conversion needed @@ -49,13 +42,12 @@ impl Convert>, WgpuExecutorHandle> for List> { /// Converts a `List>` to `List>` by uploading each image to a texture impl Convert>, WgpuExecutorHandle> for List> { fn convert(self, _: Footprint, executor: WgpuExecutorHandle) -> List> { - let device = &executor.context().device; let queue = executor.context().queue.lock(); let list = self .into_iter() .map(|row| { let (image, attributes) = row.into_parts(); - let texture = upload_to_texture(device, &queue, &image); + let texture = upload_to_texture(&executor, &queue, &image); Item::from_parts(Raster::new_gpu(texture), attributes) }) @@ -69,9 +61,8 @@ impl Convert>, WgpuExecutorHandle> for List> { /// Converts single CPU raster to GPU by uploading to texture impl Convert, WgpuExecutorHandle> for Raster { fn convert(self, _: Footprint, executor: WgpuExecutorHandle) -> Raster { - let device = &executor.context().device; let queue = executor.context().queue.lock(); - let texture = upload_to_texture(device, &queue, &self); + let texture = upload_to_texture(&executor, &queue, &self); queue.submit([]); Raster::new_gpu(texture) @@ -92,7 +83,7 @@ impl Convert>, WgpuExecutorHandle> for List> { /// - 4 bytes-per-pixel RGBA8 /// - Texture has COPY_SRC usage struct RasterGpuToRasterCpuConverter { - buffer: wgpu::Buffer, + buffer: Buffer, width: u32, height: u32, unpadded_bytes_per_row: u32, @@ -100,7 +91,7 @@ struct RasterGpuToRasterCpuConverter { _source: raster_types::Texture, } impl RasterGpuToRasterCpuConverter { - fn new(device: &wgpu::Device, encoder: &mut wgpu::CommandEncoder, data_gpu: Raster) -> Self { + fn new(executor: &WgpuExecutor, encoder: &mut wgpu::CommandEncoder, data_gpu: Raster) -> Self { let texture = data_gpu.data(); let width = texture.width(); let height = texture.height(); @@ -110,7 +101,7 @@ impl RasterGpuToRasterCpuConverter { let padded_bytes_per_row = unpadded_bytes_per_row.div_ceil(align) * align; let buffer_size = padded_bytes_per_row as u64 * height as u64; - let buffer = device.create_buffer(&wgpu::BufferDescriptor { + let buffer = executor.create_buffer(&wgpu::BufferDescriptor { label: Some("texture_download_buffer"), size: buffer_size, usage: wgpu::BufferUsages::COPY_DST | wgpu::BufferUsages::MAP_READ, @@ -204,7 +195,7 @@ impl ConvertAsync>, WgpuExecutorHandle> for List> { for row in self { let (element, attributes) = row.into_parts(); - converters.push(RasterGpuToRasterCpuConverter::new(&device, &mut encoder, element)); + converters.push(RasterGpuToRasterCpuConverter::new(&executor, &mut encoder, element)); rows_meta.push(Item::from_parts((), attributes)); } @@ -243,7 +234,7 @@ impl ConvertAsync, WgpuExecutorHandle> for Raster { label: Some("single_texture_download_encoder"), }); - let converter = RasterGpuToRasterCpuConverter::new(&device, &mut encoder, self); + let converter = RasterGpuToRasterCpuConverter::new(&executor, &mut encoder, self); queue.submit([encoder.finish()]); diff --git a/node-graph/node-macro/Cargo.toml b/node-graph/node-macro/Cargo.toml index b110e66cbf..89e88a1380 100644 --- a/node-graph/node-macro/Cargo.toml +++ b/node-graph/node-macro/Cargo.toml @@ -8,7 +8,7 @@ edition = "2024" readme = "../../README.md" homepage = "https://graphite.art" repository = "https://github.com/GraphiteEditor/Graphite" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [lib] proc-macro = true diff --git a/node-graph/node-macro/src/codegen.rs b/node-graph/node-macro/src/codegen.rs index 2cdba195bf..f12e8920f6 100644 --- a/node-graph/node-macro/src/codegen.rs +++ b/node-graph/node-macro/src/codegen.rs @@ -306,6 +306,20 @@ pub(crate) fn generate_node_code(crate_ident: &CrateIdent, parsed: &ParsedNodeFn }) .collect(); + let default_colors: Vec<_> = regular_fields + .iter() + .map(|field| match &field.ty { + ParsedFieldType::Regular(RegularParsedField { + value_source: ParsedValueSource::Default(data), + .. + }) => match color_constant_paths(data) { + Some(paths) => quote!(Some(&[#(#paths),*])), + None => quote!(None), + }, + _ => quote!(None), + }) + .collect(); + let value_sources: Vec<_> = regular_fields .iter() .map(|field| match &field.ty { @@ -667,6 +681,7 @@ pub(crate) fn generate_node_code(crate_ident: &CrateIdent, parsed: &ParsedNodeFn hidden: #input_hidden, exposed: #exposed, value_source: #value_sources, + default_colors: #default_colors, default_type: #default_types, number_soft_min: #number_soft_min_values, number_soft_max: #number_soft_max_values, @@ -2815,3 +2830,23 @@ pub(crate) fn generate_node_impl(crate_ident: &CrateIdent, parsed: &ParsedNodeFn ..Default::default() }) } + +/// The colors of a `#[default(..)]` expression, when every element of it is a `Color::*` constant. +fn color_constant_paths(tokens: &TokenStream2) -> Option> { + use syn::parse::Parser; + + let expressions = Punctuated::::parse_terminated.parse2(tokens.clone()).ok()?; + if expressions.is_empty() { + return None; + } + + expressions + .into_iter() + .map(|expression| { + let syn::Expr::Path(path) = expression else { return None }; + let segments = &path.path.segments; + let is_color_constant = path.qself.is_none() && segments.len() == 2 && segments[0].ident == "Color" && segments.iter().all(|segment| segment.arguments.is_none()); + is_color_constant.then_some(path) + }) + .collect() +} diff --git a/node-graph/nodes/brush/Cargo.toml b/node-graph/nodes/brush/Cargo.toml index e48a52e85a..dcc767238e 100644 --- a/node-graph/nodes/brush/Cargo.toml +++ b/node-graph/nodes/brush/Cargo.toml @@ -8,19 +8,24 @@ license = "MIT OR Apache-2.0" [features] default = ["serde"] -serde = ["dep:serde", "core-types/serde", "raster-types/serde", "raster-nodes/serde"] +serde = ["dep:serde", "core-types/serde", "raster-types/serde"] [dependencies] # Local dependencies dyn-any = { workspace = true } +brush-types = { workspace = true } core-types = { workspace = true } graphene-hash = { workspace = true } -raster-types = { workspace = true } -raster-nodes = { workspace = true } +graphic-types = { workspace = true } +raster-types = { workspace = true, features = ["wgpu"] } +wgpu-executor = { workspace = true } node-macro = { workspace = true } # Workspace dependencies glam = { workspace = true } +half = { workspace = true } +bytemuck = { workspace = true } +wgpu = { workspace = true } # Optional workspace dependencies serde = { workspace = true, optional = true, features = ["derive"] } diff --git a/node-graph/nodes/brush/src/basic_brush/consts.rs b/node-graph/nodes/brush/src/basic_brush/consts.rs new file mode 100644 index 0000000000..5805eb38ed --- /dev/null +++ b/node-graph/nodes/brush/src/basic_brush/consts.rs @@ -0,0 +1,8 @@ +pub(super) const SIGMA_CUTOFF: f32 = 3.; +pub(super) const SIGMA_PER_DIAMETER: f64 = 1. / 4.; +pub(super) const RIDGE_GAIN: f32 = 5.075688; + +pub(super) const LUT_SIZE: u32 = 256; +pub(super) const LUT_V_MAX: f64 = 7.5; +pub(super) const LUT_T_MAX: f64 = 7.5; +pub(super) const LUT_CACHE_SIZE: usize = 64; diff --git a/node-graph/nodes/brush/src/basic_brush/convert.rs b/node-graph/nodes/brush/src/basic_brush/convert.rs new file mode 100644 index 0000000000..ab3e4a94f2 --- /dev/null +++ b/node-graph/nodes/brush/src/basic_brush/convert.rs @@ -0,0 +1,80 @@ +pub(super) struct Convert { + pipeline: wgpu::RenderPipeline, + layout: wgpu::BindGroupLayout, +} + +impl Convert { + pub(super) fn new(device: &wgpu::Device) -> Self { + let shader = device.create_shader_module(wgpu::include_wgsl!("convert.wgsl")); + let layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + label: Some("basic_brush_convert_bind_group_layout"), + entries: &[wgpu::BindGroupLayoutEntry { + binding: 0, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Texture { + sample_type: wgpu::TextureSampleType::Float { filterable: false }, + view_dimension: wgpu::TextureViewDimension::D2, + multisampled: false, + }, + count: None, + }], + }); + let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + label: Some("basic_brush_convert_pipeline_layout"), + bind_group_layouts: &[Some(&layout)], + immediate_size: 0, + }); + let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { + label: Some("basic_brush_convert_pipeline"), + layout: Some(&pipeline_layout), + vertex: wgpu::VertexState { + module: &shader, + entry_point: Some("vs_main"), + compilation_options: Default::default(), + buffers: &[], + }, + fragment: Some(wgpu::FragmentState { + module: &shader, + entry_point: Some("fs_main"), + compilation_options: Default::default(), + targets: &[Some(wgpu::TextureFormat::Rgba8Unorm.into())], + }), + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + ..Default::default() + }, + depth_stencil: None, + multisample: wgpu::MultisampleState::default(), + multiview_mask: None, + cache: None, + }); + Self { pipeline, layout } + } + + pub(super) fn encode(&self, device: &wgpu::Device, encoder: &mut wgpu::CommandEncoder, source: &wgpu::TextureView, target: &wgpu::TextureView) { + let bind = device.create_bind_group(&wgpu::BindGroupDescriptor { + label: Some("basic_brush_convert_bind_group"), + layout: &self.layout, + entries: &[wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::TextureView(source), + }], + }); + let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("basic_brush_convert_pass"), + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: target, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT), + store: wgpu::StoreOp::Store, + }, + depth_slice: None, + })], + ..Default::default() + }); + pass.set_pipeline(&self.pipeline); + pass.set_bind_group(0, &bind, &[]); + pass.draw(0..3, 0..1); + } +} diff --git a/node-graph/nodes/brush/src/basic_brush/convert.wgsl b/node-graph/nodes/brush/src/basic_brush/convert.wgsl new file mode 100644 index 0000000000..a92aa5d383 --- /dev/null +++ b/node-graph/nodes/brush/src/basic_brush/convert.wgsl @@ -0,0 +1,37 @@ +// ============= +// VERTEX SHADER +// ============= + +@vertex +fn vs_main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4 { + let pos = array( + vec2f(-1.0, -1.0), + vec2f(3.0, -1.0), + vec2f(-1.0, 3.0), + ); + return vec4f(pos[vertex_index], 0.0, 1.0); +} + +// =============== +// FRAGMENT SHADER +// =============== + +@group(0) @binding(0) +var t_composite: texture_2d; + +fn linear_to_srgb(channel: f32) -> f32 { + if (channel <= 0.0031308) { + return channel * 12.92; + } + return 1.055 * pow(channel, 1.0 / 2.4) - 0.055; +} + +@fragment +fn fs_main(@builtin(position) frag: vec4) -> @location(0) vec4 { + let premultiplied = textureLoad(t_composite, vec2(frag.xy), 0); + var straight = vec3(0.0); + if (premultiplied.a > 0.0) { + straight = premultiplied.rgb / premultiplied.a; + } + return vec4(linear_to_srgb(straight.r), linear_to_srgb(straight.g), linear_to_srgb(straight.b), premultiplied.a); +} diff --git a/node-graph/nodes/brush/src/basic_brush/kernel.rs b/node-graph/nodes/brush/src/basic_brush/kernel.rs new file mode 100644 index 0000000000..b00a1dcb76 --- /dev/null +++ b/node-graph/nodes/brush/src/basic_brush/kernel.rs @@ -0,0 +1,163 @@ +//! Brush kernel baking + caching. +//! +//! Kernel is a super-Gaussian `exp(-((v^2 + s^2) / 2)^p)`: p = 1 plain Gaussian, higher p +//! flattens center + steepens edge. Hardness controls p. Sweep along a segment has no +//! closed form, so baked numerically into a texture: row per perpendicular distance, +//! columns accumulate the along-axis integral. Segment = two LUT samples, +//! `F(v, t) - F(v, t - len)`. Normalized so a long stroke's interior settles at 1. +//! +//! Calibration defines diameter: find where resolved alpha crosses EDGE_ALPHA, scale so +//! that contour lands on `diameter / 2`. Painted width matches the setting, hard or soft. +//! p clamped so the edge stays >= MIN_EDGE_TEXELS on screen. +//! +//! Baked kernels: small LRU keyed by quantized p. Textures from the global pool, held +//! weakly; evicted under pressure -> bake again. + +use super::consts::{LUT_CACHE_SIZE, LUT_SIZE, LUT_T_MAX, LUT_V_MAX, RIDGE_GAIN, SIGMA_PER_DIAMETER}; +use super::stroke::StyledStroke; +use glam::UVec2; +use raster_types::{Texture, TextureWeakRef}; +use std::sync::Mutex; +use wgpu_executor::WgpuExecutor; + +const INTEGRATE_END: f64 = 12.; +const FINE_STEPS: usize = 4096; +const MIN_EDGE_TEXELS: f64 = 1.5; + +const EDGE_WIDTH_FACTOR: f64 = 3.09; + +const KEY_STEPS_PER_LN: f64 = 24.; + +const SOFTEST: f64 = 0.7; +const HARDEST: f64 = 48.; + +const EDGE_ALPHA: f64 = 0.05; + +pub(super) struct Kernel { + pub(super) texture: Texture, + pub(super) scale: f32, + pub(super) exponent: f32, + pub(super) section_scale: f32, +} + +struct Baked { + scale: f32, + exponent: f32, + section_scale: f32, + texture: TextureWeakRef, +} + +#[derive(Default)] +pub(super) struct KernelCache { + entries: Mutex>, +} + +impl KernelCache { + pub(super) fn get(&self, executor: &WgpuExecutor, stroke: &StyledStroke, scale: f64) -> Kernel { + let sigma_texels = stroke.diameter.max(0.) * SIGMA_PER_DIAMETER * scale; + let sharpest = (EDGE_WIDTH_FACTOR * sigma_texels / (2. * MIN_EDGE_TEXELS)).max(1.); + let exponent = (SOFTEST * (HARDEST / SOFTEST).powf(stroke.hardness.clamp(0., 1.))).min(sharpest); + let key = (exponent.ln() * KEY_STEPS_PER_LN).round() as i32; + let mut entries = self.entries.lock().unwrap(); + if let Some(index) = entries.iter().position(|(cached, _)| *cached == key) { + if let Some(texture) = entries[index].1.texture.upgrade() { + let entry = entries.remove(index); + let kernel = Kernel { + texture, + scale: entry.1.scale, + exponent: entry.1.exponent, + section_scale: entry.1.section_scale, + }; + entries.insert(0, entry); + return kernel; + } + entries.remove(index); + } + let kernel = bake(executor, (key as f64 / KEY_STEPS_PER_LN).exp()); + let baked = Baked { + scale: kernel.scale, + exponent: kernel.exponent, + section_scale: kernel.section_scale, + texture: kernel.texture.downgrade(), + }; + entries.insert(0, (key, baked)); + entries.truncate(LUT_CACHE_SIZE); + kernel + } +} + +fn kernel(v: f64, s: f64, exponent: f64) -> f64 { + (-((v * v + s * s) / 2.).powf(exponent)).exp() +} + +fn sweep_row(v: f64, exponent: f64) -> (Vec, f64) { + let ds = 2. * INTEGRATE_END / FINE_STEPS as f64; + let mut cumulative = Vec::with_capacity(FINE_STEPS + 1); + let mut total = 0.; + let mut previous = kernel(v, -INTEGRATE_END, exponent); + cumulative.push(0.); + for i in 1..=FINE_STEPS { + let value = kernel(v, -INTEGRATE_END + i as f64 * ds, exponent); + total += (previous + value) / 2. * ds; + previous = value; + cumulative.push(total); + } + let samples = (0..LUT_SIZE) + .map(|j| { + let t = -LUT_T_MAX + j as f64 * 2. * LUT_T_MAX / (LUT_SIZE - 1) as f64; + let x = (t + INTEGRATE_END) / ds; + let i = (x.floor() as usize).min(FINE_STEPS - 1); + cumulative[i] + (cumulative[i + 1] - cumulative[i]) * (x - i as f64) + }) + .collect(); + (samples, total) +} + +fn calibrate(ridge: &[f64], target: f64) -> f64 { + let step = LUT_V_MAX / (LUT_SIZE - 1) as f64; + let Some(i) = ridge.iter().position(|&r| r < target).filter(|&i| i > 0) else { + return LUT_V_MAX; + }; + let (above, below) = (ridge[i - 1], ridge[i]); + step * ((i - 1) as f64 + (above - target) / (above - below)) +} + +fn bake(executor: &WgpuExecutor, exponent: f64) -> Kernel { + let mut rows = Vec::with_capacity((LUT_SIZE * LUT_SIZE) as usize); + let mut ridge = Vec::with_capacity(LUT_SIZE as usize); + let mut norm = 1.; + for row in 0..LUT_SIZE { + let v = row as f64 * LUT_V_MAX / (LUT_SIZE - 1) as f64; + if kernel(v, 0., exponent) < 1e-9 { + rows.resize(rows.len() + LUT_SIZE as usize, half::f16::ZERO); + ridge.push(0.); + continue; + } + let (samples, total) = sweep_row(v, exponent); + if row == 0 { + norm = 1. / total; + } + rows.extend(samples.into_iter().map(|value| half::f16::from_f64(value * norm))); + ridge.push(total * norm); + } + let texture = executor.request_texture_with_format(UVec2::splat(LUT_SIZE), wgpu::TextureFormat::R16Float); + executor.context().queue.write_texture( + texture.as_image_copy(), + bytemuck::cast_slice(&rows), + wgpu::TexelCopyBufferLayout { + offset: 0, + bytes_per_row: Some(LUT_SIZE * 2), + rows_per_image: Some(LUT_SIZE), + }, + texture.size(), + ); + let gain = RIDGE_GAIN as f64; + let target = -(1. - EDGE_ALPHA * (1. - (-gain).exp())).ln() / gain; + let a = calibrate(&ridge, target); + Kernel { + texture, + scale: (a / 2.) as f32, + exponent: exponent as f32, + section_scale: ((2. * (1. / target).ln().powf(1. / exponent)).sqrt() / 2.) as f32, + } +} diff --git a/node-graph/nodes/brush/src/basic_brush/mod.rs b/node-graph/nodes/brush/src/basic_brush/mod.rs new file mode 100644 index 0000000000..b3ea5a4382 --- /dev/null +++ b/node-graph/nodes/brush/src/basic_brush/mod.rs @@ -0,0 +1,74 @@ +mod consts; +mod convert; +mod kernel; +mod pipeline; +mod region; +mod render; +mod stroke; + +use brush_types::BrushCache; +use core_types::list::{ATTR_COLOR, ATTR_DIAMETER, ATTR_FLOW, ATTR_HARDNESS, Item, List}; +use core_types::{ATTR_TRANSFORM, Ctx, ExtractFootprint}; +use graphic_types::Graphic; +use pipeline::{BasicBrushPipeline, BasicBrushPipelineArgs}; +use raster_types::{GPU, Raster}; +use wgpu_executor::{WgpuExecutor, WgpuPipelineCache}; + +#[node_macro::node(category("Raster: Brush"))] +pub async fn basic_brush<'a: 'n>( + ctx: impl Ctx + ExtractFootprint, + strokes: List, + #[widget(ParsedWidgetOverride::Hidden)] cache: Item, + #[scope(basic_brush_pipeline::IDENTIFIER)] pipeline: Item, +) -> List> { + let (cache, pipeline) = (cache.into_element(), pipeline.into_element()); + let mut stack = vec![strokes.into_iter()]; + let mut strokes = Vec::new(); + while let Some(top) = stack.last_mut() { + let Some(item) = top.next() else { + stack.pop(); + continue; + }; + let color = item.attribute_cloned_or(ATTR_COLOR, crate::DEFAULT_COLOR); + let diameter = item.attribute_cloned_or(ATTR_DIAMETER, crate::DEFAULT_DIAMETER); + let hardness = item.attribute_cloned_or(ATTR_HARDNESS, crate::DEFAULT_HARDNESS / 100.); + let flow = item.attribute_cloned_or(ATTR_FLOW, crate::DEFAULT_FLOW / 100.); + match item.into_element() { + Graphic::StrokeList(list) => strokes.extend( + list.into_iter() + .map(Item::into_element) + .filter(|stroke| !stroke.is_empty() && stroke.is_valid()) + .map(|stroke| stroke::StyledStroke { + color, + diameter, + hardness, + flow, + stroke, + }), + ), + Graphic::GraphicList(nested) => stack.push(nested.into_iter()), + _ => {} + } + } + + let args = BasicBrushPipelineArgs { + footprint: *ctx.footprint(), + strokes: &strokes, + cache: &cache, + }; + let Some((texture, transform)) = pipeline.run::(&args).await else { + return List::new(); + }; + let raster = Raster::::new_gpu(texture); + List::new_from_item(Item::new_from_element(raster).with_attribute(ATTR_TRANSFORM, transform)) +} + +#[node_macro::node(category(""), inject_scope)] +async fn basic_brush_pipeline<'a: 'n>( + _ctx: impl Ctx, + #[scope(ProtoNodeIdentifier::new("graphene_std::platform_application_io::WgpuExecutorNode"))] executor: Item<&'a WgpuExecutor>, + #[data] pipeline: WgpuPipelineCache, +) -> Item { + executor.into_element().pipeline_init::(pipeline); + Item::new_from_element(pipeline.clone()) +} diff --git a/node-graph/nodes/brush/src/basic_brush/pipeline.rs b/node-graph/nodes/brush/src/basic_brush/pipeline.rs new file mode 100644 index 0000000000..b103f3fb61 --- /dev/null +++ b/node-graph/nodes/brush/src/basic_brush/pipeline.rs @@ -0,0 +1,543 @@ +use super::consts::{LUT_SIZE, LUT_T_MAX, LUT_V_MAX, RIDGE_GAIN, SIGMA_CUTOFF}; +use super::convert::Convert; +use super::kernel::{Kernel, KernelCache}; +use super::region::{Crop, Region}; +use super::stroke::{Edge, StyledStroke}; +use brush_types::BrushCache; +use bytemuck::{Pod, Zeroable}; +use core_types::Color; +use core_types::transform::Footprint; +use glam::{DAffine2, UVec2}; +use raster_types::Texture; +use wgpu_executor::{AsyncWgpuPipeline, Buffer, WgpuExecutor}; + +pub(super) const DENSITY_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::R16Float; +pub(super) const COMPOSITE_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rgba16Float; + +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +struct ScatterUniforms { + frame_size: [f32; 2], + kernel_scale: f32, + kernel_exponent: f32, + kernel_section_scale: f32, + _pad: f32, +} + +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +struct ResolveUniforms { + color: [f32; 4], + density_offset: [f32; 2], + _pad: [f32; 2], +} + +pub struct BasicBrushPipeline { + scatter: Scatter, + resolve: Resolve, + convert: Convert, + kernels: KernelCache, +} + +pub(super) struct Field { + pub(super) density: Texture, + pub(super) stamp: Texture, +} + +impl Field { + pub(super) fn request(executor: &WgpuExecutor, size: UVec2) -> Self { + Self { + density: executor.request_texture_with_format(size, DENSITY_FORMAT), + stamp: executor.request_texture_with_format(size, DENSITY_FORMAT), + } + } + + pub(super) fn views(&self) -> FieldViews { + FieldViews { + density: self.density.create_view(&wgpu::TextureViewDescriptor::default()), + stamp: self.stamp.create_view(&wgpu::TextureViewDescriptor::default()), + } + } +} + +pub(super) struct FieldViews { + pub(super) density: wgpu::TextureView, + pub(super) stamp: wgpu::TextureView, +} + +pub struct BasicBrushPipelineArgs<'a> { + pub(super) footprint: Footprint, + pub(super) strokes: &'a [StyledStroke], + pub(super) cache: &'a BrushCache, +} + +impl AsyncWgpuPipeline for BasicBrushPipeline { + type Args<'a> = BasicBrushPipelineArgs<'a>; + type Out = Option<(Texture, DAffine2)>; + + fn create(executor: &WgpuExecutor) -> Self { + let device = &executor.context().device; + Self { + scatter: Scatter::new(device), + resolve: Resolve::new(device), + convert: Convert::new(device), + kernels: KernelCache::default(), + } + } + + async fn run<'a>(&'a self, executor: &'a WgpuExecutor, args: &'a Self::Args<'_>) -> Self::Out { + let frame = super::render::Frame::new(args.strokes)?; + let region = Region::new(&args.footprint)?; + let state = args.cache.take(&args.footprint).unwrap_or_default(); + let rendered = super::render::render(self, executor, frame, region, state)?; + args.cache.store(&args.footprint, rendered.state); + Some((rendered.texture, rendered.transform)) + } +} + +struct Scatter { + pipeline: wgpu::RenderPipeline, + layout: wgpu::BindGroupLayout, + sampler: wgpu::Sampler, +} + +impl Scatter { + fn new(device: &wgpu::Device) -> Self { + let shader = device.create_shader_module(wgpu::include_wgsl!("scatter.wgsl")); + let layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + label: Some("basic_brush_density_bind_group_layout"), + entries: &[ + uniform_entry(0, wgpu::ShaderStages::VERTEX_FRAGMENT), + wgpu::BindGroupLayoutEntry { + binding: 1, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Texture { + sample_type: wgpu::TextureSampleType::Float { filterable: true }, + view_dimension: wgpu::TextureViewDimension::D2, + multisampled: false, + }, + count: None, + }, + wgpu::BindGroupLayoutEntry { + binding: 2, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering), + count: None, + }, + ], + }); + let sampler = device.create_sampler(&wgpu::SamplerDescriptor { + label: Some("basic_brush_kernel_sampler"), + address_mode_u: wgpu::AddressMode::ClampToEdge, + address_mode_v: wgpu::AddressMode::ClampToEdge, + mag_filter: wgpu::FilterMode::Linear, + min_filter: wgpu::FilterMode::Linear, + ..Default::default() + }); + let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + label: Some("basic_brush_density_pipeline_layout"), + bind_group_layouts: &[Some(&layout)], + immediate_size: 0, + }); + let instance_layout = wgpu::VertexBufferLayout { + array_stride: std::mem::size_of::() as wgpu::BufferAddress, + step_mode: wgpu::VertexStepMode::Instance, + attributes: &[ + wgpu::VertexAttribute { + offset: 0, + shader_location: 0, + format: wgpu::VertexFormat::Float32x2, + }, + wgpu::VertexAttribute { + offset: 8, + shader_location: 1, + format: wgpu::VertexFormat::Float32x2, + }, + wgpu::VertexAttribute { + offset: 16, + shader_location: 2, + format: wgpu::VertexFormat::Float32, + }, + wgpu::VertexAttribute { + offset: 20, + shader_location: 3, + format: wgpu::VertexFormat::Float32, + }, + ], + }; + let additive = wgpu::BlendComponent { + src_factor: wgpu::BlendFactor::One, + dst_factor: wgpu::BlendFactor::One, + operation: wgpu::BlendOperation::Add, + }; + let union = wgpu::BlendComponent { + src_factor: wgpu::BlendFactor::One, + dst_factor: wgpu::BlendFactor::One, + operation: wgpu::BlendOperation::Max, + }; + let options = wgpu::PipelineCompilationOptions { + constants: &[("CUTOFF_SIGMA", SIGMA_CUTOFF as f64), ("LUT_SIZE", LUT_SIZE as f64), ("LUT_V_MAX", LUT_V_MAX), ("LUT_T_MAX", LUT_T_MAX)], + ..Default::default() + }; + let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { + label: Some("basic_brush_density_pipeline"), + layout: Some(&pipeline_layout), + vertex: wgpu::VertexState { + module: &shader, + entry_point: Some("vs_main"), + compilation_options: options.clone(), + buffers: &[instance_layout], + }, + fragment: Some(wgpu::FragmentState { + module: &shader, + entry_point: Some("fs_main"), + compilation_options: options, + targets: &[ + Some(wgpu::ColorTargetState { + format: DENSITY_FORMAT, + blend: Some(wgpu::BlendState { color: additive, alpha: additive }), + write_mask: wgpu::ColorWrites::ALL, + }), + Some(wgpu::ColorTargetState { + format: DENSITY_FORMAT, + blend: Some(wgpu::BlendState { color: union, alpha: union }), + write_mask: wgpu::ColorWrites::ALL, + }), + ], + }), + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleStrip, + ..Default::default() + }, + depth_stencil: None, + multisample: wgpu::MultisampleState::default(), + multiview_mask: None, + cache: None, + }); + Self { pipeline, layout, sampler } + } + + fn bind(&self, device: &wgpu::Device, globals: &wgpu::Buffer, kernel: &wgpu::TextureView) -> wgpu::BindGroup { + device.create_bind_group(&wgpu::BindGroupDescriptor { + label: Some("basic_brush_density_bind_group"), + layout: &self.layout, + entries: &[ + wgpu::BindGroupEntry { + binding: 0, + resource: globals.as_entire_binding(), + }, + wgpu::BindGroupEntry { + binding: 1, + resource: wgpu::BindingResource::TextureView(kernel), + }, + wgpu::BindGroupEntry { + binding: 2, + resource: wgpu::BindingResource::Sampler(&self.sampler), + }, + ], + }) + } + + fn encode(&self, encoder: &mut wgpu::CommandEncoder, target: &FieldViews, bind: &wgpu::BindGroup, buffer: &wgpu::Buffer, instances: u32) { + let attachment = |view| { + Some(wgpu::RenderPassColorAttachment { + view, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Load, + store: wgpu::StoreOp::Store, + }, + depth_slice: None, + }) + }; + let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("basic_brush_density_pass"), + color_attachments: &[attachment(&target.density), attachment(&target.stamp)], + ..Default::default() + }); + pass.set_pipeline(&self.pipeline); + pass.set_bind_group(0, bind, &[]); + pass.set_vertex_buffer(0, buffer.slice(..)); + pass.draw(0..4, 0..instances); + } +} + +struct Resolve { + pipeline: wgpu::RenderPipeline, + layout: wgpu::BindGroupLayout, +} + +impl Resolve { + fn new(device: &wgpu::Device) -> Self { + let shader = device.create_shader_module(wgpu::include_wgsl!("resolve.wgsl")); + let layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + label: Some("basic_brush_resolve_bind_group_layout"), + entries: &[uniform_entry(0, wgpu::ShaderStages::FRAGMENT), texture_entry(1), texture_entry(2)], + }); + let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + label: Some("basic_brush_resolve_pipeline_layout"), + bind_group_layouts: &[Some(&layout)], + immediate_size: 0, + }); + let options = wgpu::PipelineCompilationOptions { + constants: &[("RIDGE_GAIN", RIDGE_GAIN as f64), ("RIDGE_NORM", 1. / (1. - (-RIDGE_GAIN as f64).exp()))], + ..Default::default() + }; + let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { + label: Some("basic_brush_resolve_pipeline"), + layout: Some(&pipeline_layout), + vertex: wgpu::VertexState { + module: &shader, + entry_point: Some("vs_main"), + compilation_options: options.clone(), + buffers: &[], + }, + fragment: Some(wgpu::FragmentState { + module: &shader, + entry_point: Some("fs_main"), + compilation_options: options, + targets: &[Some(wgpu::ColorTargetState { + format: COMPOSITE_FORMAT, + blend: Some(wgpu::BlendState::PREMULTIPLIED_ALPHA_BLENDING), + write_mask: wgpu::ColorWrites::ALL, + })], + }), + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + ..Default::default() + }, + depth_stencil: None, + multisample: wgpu::MultisampleState::default(), + multiview_mask: None, + cache: None, + }); + Self { pipeline, layout } + } + + fn bind(&self, device: &wgpu::Device, globals: &wgpu::Buffer, source: &FieldViews) -> wgpu::BindGroup { + device.create_bind_group(&wgpu::BindGroupDescriptor { + label: Some("basic_brush_resolve_bind_group"), + layout: &self.layout, + entries: &[ + wgpu::BindGroupEntry { + binding: 0, + resource: globals.as_entire_binding(), + }, + wgpu::BindGroupEntry { + binding: 1, + resource: wgpu::BindingResource::TextureView(&source.density), + }, + wgpu::BindGroupEntry { + binding: 2, + resource: wgpu::BindingResource::TextureView(&source.stamp), + }, + ], + }) + } + + fn encode(&self, encoder: &mut wgpu::CommandEncoder, target: &wgpu::TextureView, bind: &wgpu::BindGroup, scissor: (UVec2, UVec2)) { + let (origin, size) = scissor; + if !size.cmpgt(UVec2::ZERO).all() { + return; + } + let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("basic_brush_resolve_pass"), + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: target, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Load, + store: wgpu::StoreOp::Store, + }, + depth_slice: None, + })], + ..Default::default() + }); + pass.set_pipeline(&self.pipeline); + pass.set_bind_group(0, bind, &[]); + pass.set_scissor_rect(origin.x, origin.y, size.x, size.y); + pass.draw(0..3, 0..1); + } +} + +pub(super) struct Recorder<'a> { + pipeline: &'a BasicBrushPipeline, + executor: &'a WgpuExecutor, + encoder: wgpu::CommandEncoder, + region: Region, + buffers: Vec, + textures: Vec, +} + +impl<'a> Recorder<'a> { + pub(super) fn new(pipeline: &'a BasicBrushPipeline, executor: &'a WgpuExecutor, region: &Region) -> Self { + let device = &executor.context().device; + let encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: Some("basic_brush_encoder") }); + Self { + pipeline, + executor, + encoder, + region: *region, + buffers: Vec::new(), + textures: Vec::new(), + } + } + + pub(super) fn kernel(&self, stroke: &StyledStroke) -> Kernel { + self.pipeline.kernels.get(self.executor, stroke, self.region.scale) + } + + pub(super) fn clear(&mut self, target: &wgpu::TextureView) { + self.encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("basic_brush_clear_pass"), + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: target, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT), + store: wgpu::StoreOp::Store, + }, + depth_slice: None, + })], + ..Default::default() + }); + } + + pub(super) fn clear_field(&mut self, target: &FieldViews) { + let attachment = |view| { + Some(wgpu::RenderPassColorAttachment { + view, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT), + store: wgpu::StoreOp::Store, + }, + depth_slice: None, + }) + }; + self.encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("basic_brush_clear_pass"), + color_attachments: &[attachment(&target.density), attachment(&target.stamp)], + ..Default::default() + }); + } + + pub(super) fn scatter(&mut self, target: &FieldViews, edges: &[Edge], kernel: &Kernel) { + if edges.is_empty() { + return; + } + let globals = self.executor.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("basic_brush_scatter_uniform"), + contents: bytemuck::bytes_of(&ScatterUniforms { + frame_size: [self.region.size.x as f32, self.region.size.y as f32], + kernel_scale: kernel.scale, + kernel_exponent: kernel.exponent, + kernel_section_scale: kernel.section_scale, + _pad: 0., + }), + usage: wgpu::BufferUsages::UNIFORM, + }); + let view = kernel.texture.create_view(&wgpu::TextureViewDescriptor::default()); + let bind = self.pipeline.scatter.bind(&self.executor.context().device, &globals, &view); + let buffer = self.executor.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("basic_brush_segment_buffer"), + contents: bytemuck::cast_slice(edges), + usage: wgpu::BufferUsages::VERTEX, + }); + self.pipeline.scatter.encode(&mut self.encoder, target, &bind, &buffer, edges.len() as u32); + self.buffers.push(globals); + self.buffers.push(buffer); + self.textures.push(kernel.texture.clone()); + } + + pub(super) fn resolve(&mut self, color: Color, crop: &Crop, source: &FieldViews, target: &wgpu::TextureView, scissor: (UVec2, UVec2)) { + let globals = resolve_uniform(self.executor, color, crop); + let bind = self.pipeline.resolve.bind(&self.executor.context().device, &globals, source); + self.pipeline.resolve.encode(&mut self.encoder, target, &bind, scissor); + self.buffers.push(globals); + } + + pub(super) fn copy(&mut self, from: &Texture, from_origin: UVec2, to: &Texture, to_origin: UVec2) { + copy_placed(&mut self.encoder, from, from_origin, to, to_origin); + } + + pub(super) fn copy_texture(&mut self, from: &Texture, to: &Texture) { + self.encoder.copy_texture_to_texture(from.as_image_copy(), to.as_image_copy(), from.size()); + } + + pub(super) fn convert(&mut self, source: &wgpu::TextureView, target: &wgpu::TextureView) { + self.pipeline.convert.encode(&self.executor.context().device, &mut self.encoder, source, target); + } + + pub(super) fn keep(&mut self, texture: Texture) { + self.textures.push(texture); + } + + pub(super) fn submit(self) { + let command = self.encoder.finish(); + self.executor.context().queue.submit([command]); + } +} + +fn uniform_entry(binding: u32, visibility: wgpu::ShaderStages) -> wgpu::BindGroupLayoutEntry { + wgpu::BindGroupLayoutEntry { + binding, + visibility, + ty: wgpu::BindingType::Buffer { + ty: wgpu::BufferBindingType::Uniform, + has_dynamic_offset: false, + min_binding_size: None, + }, + count: None, + } +} + +fn texture_entry(binding: u32) -> wgpu::BindGroupLayoutEntry { + wgpu::BindGroupLayoutEntry { + binding, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Texture { + sample_type: wgpu::TextureSampleType::Float { filterable: false }, + view_dimension: wgpu::TextureViewDimension::D2, + multisampled: false, + }, + count: None, + } +} + +fn resolve_uniform(executor: &WgpuExecutor, color: Color, crop: &Crop) -> Buffer { + let uniforms = ResolveUniforms { + color: [color.r(), color.g(), color.b(), color.a()], + density_offset: [crop.origin.x as f32, crop.origin.y as f32], + _pad: [0.; 2], + }; + executor.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("basic_brush_resolve_uniform"), + contents: bytemuck::bytes_of(&uniforms), + usage: wgpu::BufferUsages::UNIFORM, + }) +} + +fn copy_placed(encoder: &mut wgpu::CommandEncoder, from: &wgpu::Texture, from_origin: UVec2, to: &wgpu::Texture, to_origin: UVec2) { + let start = from_origin.max(to_origin); + let end = (from_origin + UVec2::new(from.width(), from.height())).min(to_origin + UVec2::new(to.width(), to.height())); + if !end.cmpgt(start).all() { + return; + } + let info = |texture, origin: UVec2| wgpu::TexelCopyTextureInfo { + texture, + mip_level: 0, + origin: wgpu::Origin3d { x: origin.x, y: origin.y, z: 0 }, + aspect: wgpu::TextureAspect::All, + }; + let extent = end - start; + encoder.copy_texture_to_texture( + info(from, start - from_origin), + info(to, start - to_origin), + wgpu::Extent3d { + width: extent.x, + height: extent.y, + depth_or_array_layers: 1, + }, + ); +} diff --git a/node-graph/nodes/brush/src/basic_brush/region.rs b/node-graph/nodes/brush/src/basic_brush/region.rs new file mode 100644 index 0000000000..54c78be392 --- /dev/null +++ b/node-graph/nodes/brush/src/basic_brush/region.rs @@ -0,0 +1,67 @@ +use core_types::math::bbox::AxisAlignedBbox; +use core_types::transform::Footprint; +use glam::{DAffine2, DVec2, UVec2}; + +const MAX_RESOLUTION: u32 = 8192; + +const CROP_STEP: u32 = 256; + +#[derive(Clone, Copy, PartialEq)] +pub(crate) struct Region { + pub(crate) min: DVec2, + pub(crate) scale: f64, + pub(crate) size: UVec2, +} + +impl Region { + pub(crate) fn new(footprint: &Footprint) -> Option { + let margin = DVec2::splat(2. / footprint.scale().max_element()); + let viewport = footprint.viewport_bounds_in_local_space(); + let bounds = AxisAlignedBbox { + start: viewport.start - margin, + end: viewport.end + margin, + }; + if !bounds.size().cmpgt(DVec2::ZERO).all() { + return None; + } + // -2 leaves room for the floor/ceil below to add a texel per side at the cap. + let scale = footprint.scale().max_element().min((MAX_RESOLUTION as f64 - 2.) / bounds.size().max_element()); + if !scale.is_finite() || scale <= 0. { + return None; + } + let start = (bounds.start * scale).floor(); + let end = (bounds.end * scale).ceil(); + let size = (end - start).as_uvec2().max(UVec2::ONE); + Some(Self { min: start / scale, scale, size }) + } +} + +#[derive(Clone, Copy, PartialEq)] +pub(crate) struct Crop { + pub(crate) origin: UVec2, + pub(crate) size: UVec2, +} + +impl Crop { + pub(crate) fn new(content: AxisAlignedBbox, region: &Region) -> Option { + let start = ((content.start - region.min) * region.scale).floor().max(DVec2::ZERO); + let end = ((content.end - region.min) * region.scale).ceil().min(region.size.as_dvec2()); + if !(end - start).cmpgt(DVec2::ZERO).all() { + return None; + } + let origin = start.as_uvec2() / CROP_STEP * CROP_STEP; + let end = ((end.as_uvec2() + UVec2::splat(CROP_STEP - 1)) / CROP_STEP * CROP_STEP).min(region.size); + Some(Self { origin, size: end - origin }) + } + + pub(crate) fn transform(&self, region: &Region) -> DAffine2 { + DAffine2::from_translation(region.min + self.origin.as_dvec2() / region.scale) * DAffine2::from_scale(self.size.as_dvec2() / region.scale) + } + + pub(crate) fn scissor(&self, region: &Region, bounds: AxisAlignedBbox) -> (UVec2, UVec2) { + let clamp = |texels: UVec2| texels.max(self.origin).min(self.origin + self.size) - self.origin; + let min = ((bounds.start - region.min) * region.scale).floor().max(DVec2::ZERO).as_uvec2().min(region.size); + let max = ((bounds.end - region.min) * region.scale).ceil().max(DVec2::ZERO).as_uvec2().min(region.size); + (clamp(min), clamp(max) - clamp(min)) + } +} diff --git a/node-graph/nodes/brush/src/basic_brush/render.rs b/node-graph/nodes/brush/src/basic_brush/render.rs new file mode 100644 index 0000000000..92704103fa --- /dev/null +++ b/node-graph/nodes/brush/src/basic_brush/render.rs @@ -0,0 +1,450 @@ +use super::pipeline::{BasicBrushPipeline, COMPOSITE_FORMAT, Field, Recorder}; +use super::region::{Crop, Region}; +use super::stroke::{self, StyledStroke, Walk}; + +use core_types::CacheHash; +use core_types::math::bbox::AxisAlignedBbox; +use glam::{DAffine2, UVec2}; +use raster_types::{Texture, TextureWeakRef}; +use std::hash::{Hash, Hasher}; +use wgpu_executor::WgpuExecutor; + +#[derive(Clone, Copy, PartialEq, Eq)] +struct StrokeKey(u64); + +#[derive(Clone, Copy, PartialEq, Eq)] +struct DensityKey(u64); + +#[derive(Clone, Copy, PartialEq, Eq)] +struct PrefixKey(u64); + +#[derive(PartialEq, Eq)] +struct FrameKey { + finished: Vec, + active: StrokeKey, +} + +pub(super) struct Frame<'a> { + finished: &'a [StyledStroke], + active: &'a StyledStroke, +} +impl<'a> Frame<'a> { + pub(super) fn new(strokes: &'a [StyledStroke]) -> Option { + let (active, finished) = strokes.split_last()?; + Some(Self { finished, active }) + } +} + +#[derive(Default)] +pub(super) struct State { + finished: Finished, + pending: Option, + output: Option, +} + +#[derive(Default)] +struct Finished { + strokes: Vec, + image: Option>, +} + +struct Record { + key: StrokeKey, + bounds: AxisAlignedBbox, +} + +struct Placed { + texture: T, + origin: UVec2, +} + +struct CachedOutput { + key: FrameKey, + texture: TextureWeakRef, +} + +struct Pending { + key: PendingKey, + walk: Walk, + density: TextureWeakRef, + stamp: TextureWeakRef, +} + +struct LivePending { + key: PendingKey, + walk: Walk, + field: Field, +} + +#[derive(Clone, Copy)] +struct PendingKey { + seed: u64, + density: DensityKey, + prefix: PrefixKey, +} + +impl PendingKey { + fn new(stroke: &StyledStroke, consumed: usize) -> Self { + Self { + seed: stroke.stroke.seed, + density: density_key(stroke), + prefix: prefix_key(stroke, consumed), + } + } + + fn matches(&self, stroke: &StyledStroke, consumed: usize) -> bool { + self.seed == stroke.stroke.seed && self.density == density_key(stroke) && self.prefix == prefix_key(stroke, consumed) + } +} + +impl Pending { + fn upgrade(self, region: &Region) -> Option { + let density = self.density.upgrade()?; + let stamp = self.stamp.upgrade()?; + if density.width() != region.size.x || density.height() != region.size.y { + return None; + } + Some(LivePending { + key: self.key, + walk: self.walk, + field: Field { density, stamp }, + }) + } +} + +impl LivePending { + fn matches(&self, stroke: &StyledStroke) -> bool { + self.walk.consumed > 0 && self.walk.consumed <= stroke.stroke.len() && self.key.matches(stroke, self.walk.consumed) + } + + fn park(self) -> Pending { + Pending { + key: self.key, + walk: self.walk, + density: self.field.density.downgrade(), + stamp: self.field.stamp.downgrade(), + } + } +} + +pub(super) struct Rendered { + pub(super) texture: Texture, + pub(super) transform: DAffine2, + pub(super) state: State, +} + +pub(super) fn render(pipeline: &BasicBrushPipeline, executor: &WgpuExecutor, frame: Frame<'_>, region: Region, mut state: State) -> Option { + let keys: Vec<_> = frame.finished.iter().map(stroke_key).collect(); + let active_key = stroke_key(frame.active); + let frame_key = frame_key(&keys, active_key); + let prefix = state.finished.strokes.len() <= keys.len() && state.finished.strokes.iter().zip(&keys).all(|(cached, current)| cached.key == *current); + let known = if prefix { state.finished.strokes.len() } else { 0 }; + let mut bounds: Vec<_> = if prefix { + state.finished.strokes.iter().map(|record| record.bounds.clone()).collect() + } else { + Vec::new() + }; + bounds.extend(frame.finished[known..].iter().map(|stroke| stroke::bounds(stroke, region.scale))); + let active_bounds = stroke::bounds(frame.active, region.scale); + let mut content = None; + for bounds in &bounds { + stroke::union(&mut content, bounds.clone()); + } + stroke::union(&mut content, active_bounds.clone()); + let crop = Crop::new(content?, ®ion)?; + + if let Some(texture) = state.output.as_ref().filter(|output| output.key == frame_key).and_then(|output| output.texture.upgrade()) { + return Some(Rendered { + texture, + transform: crop.transform(®ion), + state, + }); + } + + let base = state + .finished + .image + .take() + .and_then(|placed| { + Some(Placed { + texture: placed.texture.upgrade()?, + origin: placed.origin, + }) + }) + .filter(|placed| prefix && (placed.origin + UVec2::new(placed.texture.width(), placed.texture.height())).cmple(region.size).all()); + let covered = if base.is_some() { state.finished.strokes.len() } else { 0 }; + let missing = &frame.finished[covered..]; + let pending = state.pending.take().and_then(|pending| pending.upgrade(®ion)); + let (active_pending, mut finished_pending) = match pending { + Some(pending) if pending.matches(frame.active) => (Some(pending), None), + pending => (None, pending), + }; + + let updated = (!missing.is_empty()).then(|| executor.request_texture_with_format(crop.size, COMPOSITE_FORMAT)); + let composite = executor.request_texture_with_format(crop.size, COMPOSITE_FORMAT); + let scratch = Field::request(executor, region.size); + let output = executor.request_texture(crop.size); + let mut recorder = Recorder::new(pipeline, executor, ®ion); + + if let Some(updated) = &updated { + let target = updated.create_view(&wgpu::TextureViewDescriptor::default()); + recorder.clear(&target); + if let Some(base) = &base { + recorder.copy(&base.texture, base.origin, updated, crop.origin); + } + let mut strokes = StrokeRenderer { + recorder: &mut recorder, + executor, + region: ®ion, + crop: &crop, + scratch: &scratch, + }; + for (index, stroke) in missing.iter().enumerate() { + let scissor = crop.scissor(®ion, bounds[covered + index].clone()); + if !scissor.1.cmpgt(UVec2::ZERO).all() { + continue; + } + let previous = if finished_pending.as_ref().is_some_and(|pending| pending.matches(stroke)) { + finished_pending.take() + } else { + None + }; + strokes.render(stroke, previous, Tail::Commit, Target { view: &target, scissor }); + } + } + + let composite_view = composite.create_view(&wgpu::TextureViewDescriptor::default()); + match (&updated, &base) { + (Some(updated), _) => recorder.copy_texture(updated, &composite), + (None, Some(base)) => { + recorder.clear(&composite_view); + recorder.copy(&base.texture, base.origin, &composite, crop.origin); + } + (None, None) => recorder.clear(&composite_view), + } + let active_scissor = crop.scissor(®ion, active_bounds); + let pending = StrokeRenderer { + recorder: &mut recorder, + executor, + region: ®ion, + crop: &crop, + scratch: &scratch, + } + .render( + frame.active, + active_pending, + Tail::Preview, + Target { + view: &composite_view, + scissor: active_scissor, + }, + )?; + + let output_view = output.create_view(&wgpu::TextureViewDescriptor::default()); + recorder.convert(&composite_view, &output_view); + recorder.submit(); + + let image = updated + .map(|texture| Placed { + texture: texture.downgrade(), + origin: crop.origin, + }) + .or_else(|| { + base.map(|placed| Placed { + texture: placed.texture.downgrade(), + origin: placed.origin, + }) + }); + let state = State { + finished: Finished { + strokes: keys.into_iter().zip(bounds).map(|(key, bounds)| Record { key, bounds }).collect(), + image, + }, + pending: Some(pending.park()), + output: Some(CachedOutput { + key: frame_key, + texture: output.downgrade(), + }), + }; + Some(Rendered { + texture: output, + transform: crop.transform(®ion), + state, + }) +} + +#[derive(Clone, Copy)] +enum Tail { + Commit, + Preview, +} + +enum Density<'a> { + Temporary(&'a Field), + Owned(Field), +} + +impl Density<'_> { + fn field(&self) -> &Field { + match self { + Self::Temporary(field) => field, + Self::Owned(field) => field, + } + } +} + +struct Target<'a> { + view: &'a wgpu::TextureView, + scissor: (UVec2, UVec2), +} + +struct StrokeRenderer<'a, 'gpu> { + recorder: &'a mut Recorder<'gpu>, + executor: &'gpu WgpuExecutor, + region: &'a Region, + crop: &'a Crop, + scratch: &'a Field, +} + +impl StrokeRenderer<'_, '_> { + fn render(&mut self, stroke: &StyledStroke, previous: Option, tail: Tail, target: Target<'_>) -> Option { + let (mut walk, density) = match previous { + Some(pending) => (pending.walk, Density::Owned(pending.field)), + None => match tail { + Tail::Commit => (Walk::default(), Density::Temporary(self.scratch)), + Tail::Preview => (Walk::default(), Density::Owned(Field::request(self.executor, self.region.size))), + }, + }; + let views = density.field().views(); + if walk.consumed == 0 { + self.recorder.clear_field(&views); + } + let kernel = self.recorder.kernel(stroke); + let mut update = walk.update(stroke, self.region); + match tail { + Tail::Commit => { + update.committed.append(&mut update.tail); + self.recorder.scatter(&views, &update.committed, &kernel); + self.recorder.resolve(stroke.color, self.crop, &views, target.view, target.scissor); + if let Density::Owned(field) = density { + self.recorder.keep(field.density); + self.recorder.keep(field.stamp); + } + None + } + Tail::Preview => { + self.recorder.scatter(&views, &update.committed, &kernel); + if update.tail.is_empty() { + self.recorder.resolve(stroke.color, self.crop, &views, target.view, target.scissor); + } else { + let field = density.field(); + self.recorder.copy_texture(&field.density, &self.scratch.density); + self.recorder.copy_texture(&field.stamp, &self.scratch.stamp); + let scratch_views = self.scratch.views(); + self.recorder.scatter(&scratch_views, &update.tail, &kernel); + self.recorder.resolve(stroke.color, self.crop, &scratch_views, target.view, target.scissor); + } + let Density::Owned(field) = density else { unreachable!() }; + Some(LivePending { + key: PendingKey::new(stroke, walk.consumed), + walk, + field, + }) + } + } + } +} + +fn stroke_key(stroke: &StyledStroke) -> StrokeKey { + let mut hasher = std::collections::hash_map::DefaultHasher::new(); + stroke.stroke.cache_hash(&mut hasher); + stroke.color.cache_hash(&mut hasher); + stroke.diameter.cache_hash(&mut hasher); + stroke.hardness.cache_hash(&mut hasher); + stroke.flow.cache_hash(&mut hasher); + StrokeKey(hasher.finish()) +} + +fn density_key(stroke: &StyledStroke) -> DensityKey { + let mut hasher = std::collections::hash_map::DefaultHasher::new(); + (stroke.diameter.max(0.) as f32).to_bits().hash(&mut hasher); + (stroke.hardness.clamp(0., 1.) as f32).to_bits().hash(&mut hasher); + (stroke.flow.clamp(0., 1.) as f32).to_bits().hash(&mut hasher); + DensityKey(hasher.finish()) +} + +fn prefix_key(stroke: &StyledStroke, consumed: usize) -> PrefixKey { + let mut hasher = std::collections::hash_map::DefaultHasher::new(); + for sample in stroke.stroke.samples().take(consumed) { + sample.position.x.to_bits().hash(&mut hasher); + sample.position.y.to_bits().hash(&mut hasher); + sample.pressure.clamp(0., 1.).to_bits().hash(&mut hasher); + } + PrefixKey(hasher.finish()) +} + +fn frame_key(finished: &[StrokeKey], active: StrokeKey) -> FrameKey { + FrameKey { finished: finished.to_vec(), active } +} + +#[cfg(test)] +mod tests { + use super::*; + use brush_types::{Channel, Stroke}; + use core_types::Color; + use glam::DVec2; + + fn stroke() -> StyledStroke { + StyledStroke { + color: Color::BLACK, + diameter: 20., + hardness: 0.8, + flow: 1., + stroke: Stroke { + position: vec![DVec2::new(1., 2.), DVec2::new(3., 4.), DVec2::new(5., 6.)], + pressure: Channel::Samples(vec![0.2, 0.4, 0.6]), + seed: 42, + ..Default::default() + }, + } + } + + #[test] + fn pending_key_accepts_an_appended_stroke() { + let original = stroke(); + let key = PendingKey::new(&original, original.stroke.len()); + let mut appended = stroke(); + appended.stroke.position.push(DVec2::new(7., 8.)); + let Channel::Samples(pressure) = &mut appended.stroke.pressure else { unreachable!() }; + pressure.push(0.8); + assert!(key.matches(&appended, original.stroke.len())); + } + + #[test] + fn pending_key_rejects_changed_render_data() { + let original = stroke(); + let key = PendingKey::new(&original, original.stroke.len()); + + let mut position = stroke(); + position.stroke.position[0].x += 1.; + assert!(!key.matches(&position, original.stroke.len())); + + let mut pressure = stroke(); + let Channel::Samples(samples) = &mut pressure.stroke.pressure else { unreachable!() }; + samples[1] += 0.1; + assert!(!key.matches(&pressure, original.stroke.len())); + + let mut flow = stroke(); + flow.flow *= 0.5; + assert!(!key.matches(&flow, original.stroke.len())); + } + + #[test] + fn pending_key_ignores_color() { + let original = stroke(); + let key = PendingKey::new(&original, original.stroke.len()); + let mut recolored = stroke(); + recolored.color = Color::WHITE; + assert!(key.matches(&recolored, original.stroke.len())); + } +} diff --git a/node-graph/nodes/brush/src/basic_brush/resolve.wgsl b/node-graph/nodes/brush/src/basic_brush/resolve.wgsl new file mode 100644 index 0000000000..f9053afa19 --- /dev/null +++ b/node-graph/nodes/brush/src/basic_brush/resolve.wgsl @@ -0,0 +1,43 @@ +// ============= +// VERTEX SHADER +// ============= + +@vertex +fn vs_main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4 { + let pos = array( + vec2f(-1.0, -1.0), + vec2f(3.0, -1.0), + vec2f(-1.0, 3.0), + ); + return vec4f(pos[vertex_index], 0.0, 1.0); +} + +// =============== +// FRAGMENT SHADER +// =============== + +struct Uniforms { + color: vec4, + density_offset: vec2, + _pad: vec2, +}; + +override RIDGE_GAIN: f32; +override RIDGE_NORM: f32; + +@group(0) @binding(0) +var uniforms: Uniforms; + +@group(0) @binding(1) +var t_density: texture_2d; + +@group(0) @binding(2) +var t_stamp: texture_2d; + +@fragment +fn fs_main(@builtin(position) frag: vec4) -> @location(0) vec4 { + let texel = vec2(frag.xy + uniforms.density_offset); + let field = max(textureLoad(t_density, texel, 0).r, textureLoad(t_stamp, texel, 0).r); + let alpha = clamp((1.0 - exp(-field * RIDGE_GAIN)) * RIDGE_NORM, 0.0, 1.0) * uniforms.color.a; + return vec4(uniforms.color.rgb * alpha, alpha); +} diff --git a/node-graph/nodes/brush/src/basic_brush/scatter.wgsl b/node-graph/nodes/brush/src/basic_brush/scatter.wgsl new file mode 100644 index 0000000000..0d0ba68c9b --- /dev/null +++ b/node-graph/nodes/brush/src/basic_brush/scatter.wgsl @@ -0,0 +1,117 @@ +override CUTOFF_SIGMA: f32; + +override LUT_SIZE: f32; +override LUT_V_MAX: f32; +override LUT_T_MAX: f32; + +// ============= +// VERTEX SHADER +// ============= + +struct Uniforms { + frame_size: vec2, + kernel_scale: f32, + kernel_exponent: f32, + kernel_section_scale: f32, +}; + +@group(0) @binding(0) +var uniforms: Uniforms; + +@group(0) @binding(1) +var t_kernel: texture_2d; + +@group(0) @binding(2) +var s_kernel: sampler; + +struct VertexOutput { + @builtin(position) clip_position: vec4, + @location(0) @interpolate(flat) a: vec2, + @location(1) @interpolate(flat) b: vec2, + @location(2) @interpolate(flat) sigma: f32, + @location(3) @interpolate(flat) weight: f32, +}; + +@vertex +fn vs_main( + @builtin(vertex_index) vertex_index: u32, + @location(0) a: vec2, + @location(1) b: vec2, + @location(2) sigma: f32, + @location(3) weight: f32, +) -> VertexOutput { + let cutoff = CUTOFF_SIGMA * sigma; + + let d = b - a; + let len = length(d); + var e = vec2f(1.0, 0.0); + if (len > 1e-6) { + e = d / len; + } + let n = vec2f(-e.y, e.x); + let base = select(a - e * cutoff, b + e * cutoff, (vertex_index & 1u) == 1u); + let normal_sign = select(-1.0, 1.0, vertex_index >= 2u); + let corner = base + n * (cutoff * normal_sign); + + let ndc = vec2f(corner.x / uniforms.frame_size.x * 2.0 - 1.0, 1.0 - corner.y / uniforms.frame_size.y * 2.0); + + var out: VertexOutput; + out.clip_position = vec4f(ndc, 0.0, 1.0); + out.a = a; + out.b = b; + out.sigma = sigma; + out.weight = weight; + return out; +} + +// =============== +// FRAGMENT SHADER +// =============== + +fn sweep(v: f32, t: f32) -> f32 { + let texel = (LUT_SIZE - 1.0) / LUT_SIZE; + let uv = vec2f( + ((t + LUT_T_MAX) / (2.0 * LUT_T_MAX)) * texel + 0.5 / LUT_SIZE, + (v / LUT_V_MAX) * texel + 0.5 / LUT_SIZE, + ); + return textureSampleLevel(t_kernel, s_kernel, uv, 0.0).r; +} + +fn section(r2: f32) -> f32 { + // Max avoids pow undefined log at zero. + return exp(-pow(max(r2 * 0.5, 1e-20), uniforms.kernel_exponent)); +} + +struct FragmentOutput { + @location(0) density: f32, + @location(1) stamp: f32, +}; + +@fragment +fn fs_main(in: VertexOutput) -> FragmentOutput { + let p = in.clip_position.xy; + let inv_section = uniforms.kernel_section_scale / in.sigma; + let d = in.b - in.a; + let len = length(d); + if (len < 1e-6) { + let dab = in.weight * section(dot(p - in.a, p - in.a) * inv_section * inv_section); + return FragmentOutput(dab, dab); + } + let e = d / len; + let rel = p - in.a; + let along = dot(rel, e); + let perp2 = max(dot(rel, rel) - along * along, 0.0); + + let cutoff = CUTOFF_SIGMA * in.sigma; + if (perp2 > cutoff * cutoff || along < -cutoff || along > len + cutoff) { + return FragmentOutput(0.0, 0.0); + } + let inv_sp = uniforms.kernel_scale / in.sigma; + let v = sqrt(perp2) * inv_sp; + let ridge = sweep(v, along * inv_sp) - sweep(v, (along - len) * inv_sp); + + let overhang = max(max(-along, along - len), 0.0); + let stamp = in.weight * section((perp2 + overhang * overhang) * inv_section * inv_section); + + return FragmentOutput(in.weight * max(ridge, 0.0), stamp); +} diff --git a/node-graph/nodes/brush/src/basic_brush/stroke.rs b/node-graph/nodes/brush/src/basic_brush/stroke.rs new file mode 100644 index 0000000000..4a715c1a64 --- /dev/null +++ b/node-graph/nodes/brush/src/basic_brush/stroke.rs @@ -0,0 +1,222 @@ +use super::consts::{RIDGE_GAIN, SIGMA_CUTOFF, SIGMA_PER_DIAMETER}; +use brush_types::{Sample, Stroke}; +use bytemuck::{Pod, Zeroable}; +use core_types::Color; +use core_types::math::bbox::AxisAlignedBbox; +use glam::DVec2; + +const MIN_SIGMA: f32 = f32::EPSILON; +const MAX_EDGE_SHIFT: f32 = 0.25; + +#[repr(C)] +#[derive(Copy, Clone, Debug, PartialEq, Pod, Zeroable)] +pub(super) struct Edge { + a: [f32; 2], + b: [f32; 2], + sigma: f32, + weight: f32, +} + +pub(super) struct StyledStroke { + pub(super) color: Color, + pub(super) diameter: f64, + pub(super) hardness: f64, + pub(super) flow: f64, + pub(super) stroke: Stroke, +} + +#[derive(Clone, Copy)] +struct Dab { + position: DVec2, + sigma: f32, + weight: f32, +} + +fn dab(sample: &Sample, stroke: &StyledStroke) -> Dab { + let pressure = sample.pressure.clamp(0., 1.); + let flow = stroke.flow.clamp(0., 1.) as f32; + Dab { + position: sample.position, + sigma: (stroke.diameter.max(0.) * SIGMA_PER_DIAMETER) as f32 * pressure, + weight: -(1. - flow * (1. - (-RIDGE_GAIN).exp())).ln() / RIDGE_GAIN, + } +} + +fn dab_pad(dab: Dab, scale: f64) -> AxisAlignedBbox { + let sigma = (dab.sigma as f64).max(MIN_SIGMA as f64 / scale); + let pad = DVec2::splat(SIGMA_CUTOFF as f64 * sigma + 1f64.max(1. / scale)); + AxisAlignedBbox { + start: dab.position - pad, + end: dab.position + pad, + } +} + +pub(super) fn union(bounds: &mut Option, other: AxisAlignedBbox) { + *bounds = Some(match bounds.take() { + Some(existing) => existing.union(&other), + None => other, + }); +} + +pub(super) fn bounds(stroke: &StyledStroke, scale: f64) -> AxisAlignedBbox { + let mut bounds = None; + for sample in stroke.stroke.samples() { + union(&mut bounds, dab_pad(dab(&sample, stroke), scale)); + } + bounds.unwrap_or(AxisAlignedBbox::ZERO) +} + +pub(super) struct Update { + pub(super) committed: Vec, + pub(super) tail: Vec, +} + +#[derive(Clone)] +pub(super) struct Walk { + sigma_min: f32, + kept_last: Option, + kept: usize, + pub(super) consumed: usize, +} + +impl Default for Walk { + fn default() -> Self { + Self { + sigma_min: f32::MAX, + kept_last: None, + kept: 0, + consumed: 0, + } + } +} + +impl Walk { + fn advance(&mut self, stroke: &StyledStroke, scale: f64) -> Vec { + let mut kept = Vec::new(); + for index in self.consumed..stroke.stroke.len() { + let sample = stroke.stroke.sample(index); + let dab = dab(&sample, stroke); + self.sigma_min = self.sigma_min.min(dab.sigma); + let min_step = (self.sigma_min as f64 * 0.5).max(0.5 / scale); + if self.kept_last.is_none_or(|last| last.position.distance(dab.position) >= min_step) { + kept.push(dab); + self.kept_last = Some(dab); + self.kept += 1; + } + } + self.consumed = stroke.stroke.len(); + kept + } + + fn tail(&self, stroke: &StyledStroke) -> Option<(Dab, Dab)> { + let kept_last = self.kept_last?; + let dab = dab(&stroke.stroke.sample(stroke.stroke.len() - 1), stroke); + if dab.position == kept_last.position { + return (self.kept == 1).then_some((kept_last, kept_last)); + } + Some((kept_last, dab)) + } + + pub(super) fn update(&mut self, stroke: &StyledStroke, region: &super::region::Region) -> Update { + let previous = self.kept_last; + let kept = self.advance(stroke, region.scale); + let tail = self.tail(stroke); + Update { + committed: edges(region, previous, &kept, None), + tail: edges(region, None, &[], tail), + } + } +} + +fn texel(region: &super::region::Region, p: DVec2) -> [f32; 2] { + [((p.x - region.min.x) * region.scale) as f32, ((p.y - region.min.y) * region.scale) as f32] +} + +fn edge(region: &super::region::Region, a: Dab, b: Dab) -> Edge { + Edge { + a: texel(region, a.position), + b: texel(region, b.position), + sigma: ((a.sigma + b.sigma) / 2. * region.scale as f32).max(MIN_SIGMA), + weight: (a.weight + b.weight) / 2., + } +} + +fn mix(a: Dab, b: Dab, t: f32) -> Dab { + Dab { + position: a.position.lerp(b.position, t as f64), + sigma: a.sigma + (b.sigma - a.sigma) * t, + weight: a.weight + (b.weight - a.weight) * t, + } +} + +fn segment_edges(edges: &mut Vec, region: &super::region::Region, a: Dab, b: Dab) { + let scale = region.scale as f32; + let gradient = (a.sigma.min(b.sigma) * scale).max(1.); + let shift = (b.sigma - a.sigma).abs() * scale * SIGMA_CUTOFF; + let pieces = (shift / (MAX_EDGE_SHIFT * gradient)).ceil().clamp(1., 64.) as usize; + let mut previous = a; + for piece in 1..=pieces { + let next = if piece == pieces { b } else { mix(a, b, piece as f32 / pieces as f32) }; + edges.push(edge(region, previous, next)); + previous = next; + } +} + +fn edges(region: &super::region::Region, prev: Option, kept: &[Dab], tail: Option<(Dab, Dab)>) -> Vec { + let mut edges = Vec::with_capacity(kept.len() + 1); + let mut last = prev; + for &dab in kept { + if let Some(previous) = last { + segment_edges(&mut edges, region, previous, dab); + } + last = Some(dab); + } + if let Some((a, b)) = tail { + segment_edges(&mut edges, region, a, b); + } + edges +} + +#[cfg(test)] +mod tests { + use super::*; + use glam::{DVec2, UVec2}; + + fn stroke(points: &[[f64; 2]]) -> StyledStroke { + StyledStroke { + color: Color::BLACK, + diameter: 20., + hardness: 0.8, + flow: 1., + stroke: Stroke { + position: points.iter().copied().map(DVec2::from).collect(), + ..Default::default() + }, + } + } + + fn region() -> super::super::region::Region { + super::super::region::Region { + min: DVec2::ZERO, + scale: 2., + size: UVec2::splat(512), + } + } + + #[test] + fn chunked_walk_matches_whole_stroke() { + let partial = stroke(&[[10., 10.], [15., 12.], [20., 15.]]); + let complete = stroke(&[[10., 10.], [15., 12.], [20., 15.], [31., 19.], [45., 24.]]); + let region = region(); + + let mut chunked = Walk::default(); + let first = chunked.update(&partial, ®ion); + let second = chunked.update(&complete, ®ion); + let mut committed = first.committed; + committed.extend(second.committed); + + let whole = Walk::default().update(&complete, ®ion); + assert_eq!(committed, whole.committed); + assert_eq!(second.tail, whole.tail); + } +} diff --git a/node-graph/nodes/brush/src/brush.rs b/node-graph/nodes/brush/src/brush.rs deleted file mode 100644 index 01f6fe9338..0000000000 --- a/node-graph/nodes/brush/src/brush.rs +++ /dev/null @@ -1,492 +0,0 @@ -use crate::brush_cache::BrushCache; -use crate::brush_stroke::{BrushStroke, BrushStyle}; -use core_types::attribute::{Attr, BlendMode as BlendModeAttr, ClippingMask, EditorLayerPath, Opacity, OpacityFill, Transform as TransformAttr}; -use core_types::blending::BlendMode; -use core_types::bounds::{BoundingBox, RenderBoundingBox}; -use core_types::color::{Alpha, Color, Pixel, Sample}; -use core_types::extent::{LevelIn, ListIn}; -use core_types::gpoll::{Extent, GPoll, GraphError, Interrupt}; -use core_types::list::{Item, List}; -use core_types::math::bbox::{AxisAlignedBbox, Bbox}; -use core_types::transform::Transform; -use core_types::uuid::NodeId; -use core_types::{ATTR_BLEND_MODE, ATTR_CLIPPING_MASK, ATTR_OPACITY, ATTR_OPACITY_FILL, ATTR_TRANSFORM}; -use core_types::{Ctx, ExtractIndex, InjectIndex}; -use glam::{DAffine2, DVec2}; -use raster_nodes::blending_nodes::blend_colors; -use raster_nodes::std_nodes::{empty_image_core, extend_image_to_bounds_core}; -use raster_types::BitmapMut; -use raster_types::Image; -use raster_types::{CPU, Raster}; - -#[derive(Clone, Copy, Debug, PartialEq, dyn_any::DynAny)] -pub struct BrushStampGenerator { - color: P, - feather_exponent: f32, - transform: DAffine2, -} - -impl Transform for BrushStampGenerator

{ - fn transform(&self) -> DAffine2 { - self.transform - } -} - -impl Sample for BrushStampGenerator

{ - type Pixel = P; - - #[inline] - fn sample(&self, position: DVec2, area: DVec2) -> Option

{ - let position = self.transform.inverse().transform_point2(position); - let area = self.transform.inverse().transform_vector2(area); - let aa_blur_radius = area.length() as f32 * 2.; - let center = DVec2::splat(0.5); - - let distance = (position + area / 2. - center).length() as f32 * 2.; - - let edge_opacity = 1. - (1. - aa_blur_radius).powf(self.feather_exponent); - let result = if distance < 1. - aa_blur_radius { - 1. - distance.powf(self.feather_exponent) - } else if distance < 1. { - // TODO: Replace this with a proper analytical AA implementation - edge_opacity * ((1. - distance) / aa_blur_radius) - } else { - return None; - }; - - use core_types::color::Channel; - Some(self.color.multiplied_alpha(P::AlphaChannel::from_linear(result))) - } -} - -/// Controls the brush shape with diameter and hardness, plus color and opacity (via flow). -/// The feather exponent is calculated from hardness to determine edge softness. -/// Used internally to create the brush texture before stamping it repeatedly along a stroke path. -#[node_macro::node(category(""), skip_impl)] -fn brush_stamp_generator(_: impl Ctx, #[unit(" px")] diameter: f64, color: Color, hardness: f64, flow: f64) -> BrushStampGenerator { - // Diameter - let radius = diameter / 2.; - - // Hardness - let hardness = hardness / 100.; - let feather_exponent = 1. / (1. - hardness) as f32; - - // Flow - let flow = flow / 100.; - - // Color - let color = color.apply_opacity(flow as f32); - - let transform = DAffine2::from_scale_angle_translation(DVec2::splat(diameter), 0., -DVec2::splat(radius)); - BrushStampGenerator { color, feather_exponent, transform } -} - -/// Used to efficiently paint brush strokes. Applies the same texture repeatedly at different positions with proper blending and boundary handling. -#[node_macro::node(category(""), skip_impl)] -fn blit Color>(_: impl Ctx, mut target: List>, texture: Raster, positions: Vec, blend_mode: BlendFn) -> List> { - if positions.is_empty() { - return target; - } - - let (elements, transforms) = target.element_and_attribute_slices_mut::(ATTR_TRANSFORM); - for (element, transform_attribute) in elements.iter_mut().zip(transforms.iter()) { - let target_width = element.width; - let target_height = element.height; - let target_size = DVec2::new(target_width as f64, target_height as f64); - - let texture_size = DVec2::new(texture.width as f64, texture.height as f64); - - let document_to_target = DAffine2::from_translation(-texture_size / 2.) * DAffine2::from_scale(target_size) * transform_attribute.inverse(); - - for position in &positions { - let start = document_to_target.transform_point2(*position).round(); - let stop = start + texture_size; - - // Half-open integer ranges [start, stop). - let clamp_start = start.clamp(DVec2::ZERO, target_size).as_uvec2(); - let clamp_stop = stop.clamp(DVec2::ZERO, target_size).as_uvec2(); - - let blit_area_offset = (clamp_start.as_dvec2() - start).as_uvec2().min(texture_size.as_uvec2()); - let blit_area_dimensions = (clamp_stop - clamp_start).min(texture_size.as_uvec2() - blit_area_offset); - - // Tight blitting loop. Eagerly assert bounds to hopefully eliminate bounds check inside loop. - let texture_index = |x: u32, y: u32| -> usize { (y as usize * texture.width as usize) + (x as usize) }; - let target_index = |x: u32, y: u32| -> usize { (y as usize * target_width as usize) + (x as usize) }; - - let max_y = (blit_area_offset.y + blit_area_dimensions.y).saturating_sub(1); - let max_x = (blit_area_offset.x + blit_area_dimensions.x).saturating_sub(1); - assert!(texture_index(max_x, max_y) < texture.data.len()); - assert!(target_index(max_x, max_y) < element.data.len()); - - for y in blit_area_offset.y..blit_area_offset.y + blit_area_dimensions.y { - for x in blit_area_offset.x..blit_area_offset.x + blit_area_dimensions.x { - let src_pixel = texture.data[texture_index(x, y)]; - let dst_pixel = &mut element.data_mut().data[target_index(x + clamp_start.x, y + clamp_start.y)]; - *dst_pixel = blend_mode(src_pixel, *dst_pixel); - } - } - } - } - - target -} - -pub fn create_brush_texture(brush_style: &BrushStyle) -> Raster { - let stamp = brush_stamp_generator(&(), brush_style.diameter, brush_style.color, brush_style.hardness, brush_style.flow); - let transform = DAffine2::from_scale_angle_translation(DVec2::splat(brush_style.diameter), 0., -DVec2::splat(brush_style.diameter / 2.)); - let blank_texture = { - let mut item = Item::new_from_element(empty_image_core(transform, Color::TRANSPARENT)); - item.set_attribute(ATTR_TRANSFORM, transform); - item - }; - let image = blend_stamp_closure(stamp, blank_texture, |a, b| blend_colors(a, b, BlendMode::Normal, 1.)); - - image.into_element() -} - -pub fn blend_with_mode(background: Item>, foreground: Item>, blend_mode: BlendMode, opacity: f64) -> Item> { - let opacity = opacity as f32 / 100.; - match std::hint::black_box(blend_mode) { - // Normal group - BlendMode::Normal => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Normal, opacity)), - // Darken group - BlendMode::Darken => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Darken, opacity)), - BlendMode::Multiply => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Multiply, opacity)), - BlendMode::ColorBurn => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::ColorBurn, opacity)), - BlendMode::LinearBurn => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::LinearBurn, opacity)), - BlendMode::DarkerColor => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::DarkerColor, opacity)), - // Lighten group - BlendMode::Lighten => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Lighten, opacity)), - BlendMode::Screen => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Screen, opacity)), - BlendMode::ColorDodge => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::ColorDodge, opacity)), - BlendMode::LinearDodge => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::LinearDodge, opacity)), - BlendMode::LighterColor => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::LighterColor, opacity)), - // Contrast group - BlendMode::Overlay => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Overlay, opacity)), - BlendMode::SoftLight => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::SoftLight, opacity)), - BlendMode::HardLight => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::HardLight, opacity)), - BlendMode::VividLight => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::VividLight, opacity)), - BlendMode::LinearLight => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::LinearLight, opacity)), - BlendMode::PinLight => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::PinLight, opacity)), - BlendMode::HardMix => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::HardMix, opacity)), - // Inversion group - BlendMode::Difference => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Difference, opacity)), - BlendMode::Exclusion => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Exclusion, opacity)), - BlendMode::Subtract => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Subtract, opacity)), - BlendMode::Divide => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Divide, opacity)), - // Component group - BlendMode::Hue => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Hue, opacity)), - BlendMode::Saturation => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Saturation, opacity)), - BlendMode::Color => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Color, opacity)), - BlendMode::Luminosity => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Luminosity, opacity)), - // Other utility blend modes (hidden from the normal list) - BlendMode::Erase => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Erase, opacity)), - BlendMode::Restore => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Restore, opacity)), - BlendMode::MultiplyAlpha => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::MultiplyAlpha, opacity)), - } -} - -/// Lane 0 of the materialized background as the legacy item the brush core works -/// on; an empty level starts from a blank item, as the pre-flip node did. -fn legacy_background(background: core_types::node::List<'_, Raster>) -> Item> { - if background.is_empty() { - return Item::default(); - } - let lane = background.lane(0); - let mut item = Item::new_from_element(background.element_ref(0).clone()); - item.set_attribute(ATTR_TRANSFORM, lane.attr::()); - item.set_attribute(ATTR_BLEND_MODE, lane.attr::()); - item.set_attribute(ATTR_OPACITY, lane.attr::()); - item.set_attribute(ATTR_OPACITY_FILL, lane.attr::()); - item.set_attribute(ATTR_CLIPPING_MASK, lane.attr::()); - item -} - -/// The brushed image replaces the whole background level with one lane. -fn brush_extent(_background: ListIn<'_, Raster>, _trace: ListIn<'_, BrushStroke>, _level: LevelIn) -> GPoll { - GPoll::Final(Extent::Exactly(1)) -} - -/// Generates the brush strokes painted with the Brush tool as a raster image. -/// If an input image is supplied, strokes are drawn on top of it, expanding bounds as needed. -#[node_macro::node(category("Raster"), extent(brush_extent))] -fn brush<'e>( - ctx: impl Ctx + ExtractArena<'e> + ExtractIndex + InjectIndex + Copy, - /// Optional raster content that may be drawn onto. - background: IList>, - /// The list of brush stroke paths drawn by the Brush tool, with each including both its coordinates and styles. - trace: IList, - /// Internal cache data used to accelerate rendering of the brush content. - #[data] - cache: BrushCache, -) -> Result< - IList<( - Raster, - Attr<'e, TransformAttr>, - Attr<'e, BlendModeAttr>, - Attr<'e, Opacity>, - Attr<'e, OpacityFill>, - Attr<'e, ClippingMask>, - Attr<'e, EditorLayerPath>, - )>, - Interrupt, -> { - if ctx.innermost_index() > 0 { - return Err(GraphError::past_end().into()); - } - // The layer path only rides through, so it is read off the source lane - // rather than round-tripped as a legacy list attribute. - let layer_path: Vec = match background.is_empty() { - true => Vec::new(), - false => background.lane(0).attr::().to_vec(), - }; - let strokes: Vec = (0..trace.len()).map(|row| trace.element_ref(row).clone()).collect(); - let actual_image = brush_core(legacy_background(background), strokes, cache); - - let transform: DAffine2 = actual_image.attribute_cloned_or_default(ATTR_TRANSFORM); - let blend_mode: BlendMode = actual_image.attribute_cloned_or_default(ATTR_BLEND_MODE); - let opacity: f64 = actual_image.attribute_cloned_or(ATTR_OPACITY, 1.); - let fill: f64 = actual_image.attribute_cloned_or(ATTR_OPACITY_FILL, 1.); - let clip: bool = actual_image.attribute_cloned_or_default(ATTR_CLIPPING_MASK); - let layer_path = ctx - .arena() - .alloc(layer_path) - .ok_or_else(|| { - Interrupt::from(GraphError { - kind: core_types::gpoll::ErrorKind::ArenaExhausted, - trace: Vec::new(), - }) - })? - .0; - - Ok(( - actual_image.into_element(), - Attr(transform), - Attr(blend_mode), - Attr(opacity), - Attr(fill), - Attr(clip), - Attr(layer_path.as_slice()), - )) -} - -/// The pre-flip brush body, on legacy items: one background item plus every -/// stroke in order, returning the painted image. -fn brush_core(list_item: Item>, strokes: Vec, cache: &BrushCache) -> Item> { - let bounds = List::new_from_item(list_item.clone()).bounding_box(DAffine2::IDENTITY, false); - let [start, end] = if let RenderBoundingBox::Rectangle(rect) = bounds { rect } else { [DVec2::ZERO, DVec2::ZERO] }; - let background_bbox = AxisAlignedBbox { start, end }; - let stroke_bbox = strokes.iter().map(|s| s.bounding_box()).reduce(|a, b| a.union(&b)).unwrap_or(AxisAlignedBbox::ZERO); - let bbox = if background_bbox.size().length() < 0.1 { - stroke_bbox - } else { - stroke_bbox.union(&background_bbox) - }; - let background_bounds = bbox.to_transform(); - - let mut draw_strokes: Vec<_> = strokes.iter().filter(|s| !matches!(s.style.blend_mode, BlendMode::Erase | BlendMode::Restore)).cloned().collect(); - - let mut brush_plan = cache.compute_brush_plan(list_item, &draw_strokes); - - // TODO: Find a way to handle more than one item - let mut actual_image = { - let background = brush_plan.background; - let transform: DAffine2 = background.attribute_cloned_or_default(ATTR_TRANSFORM); - let (element, attributes) = background.into_parts(); - let (element, transform) = extend_image_to_bounds_core(element, transform, background_bounds); - let mut item = Item::from_parts(element, attributes); - item.set_attribute(ATTR_TRANSFORM, transform); - item - }; - - let final_stroke_idx = brush_plan.strokes.len().saturating_sub(1); - for (idx, stroke) in brush_plan.strokes.into_iter().enumerate() { - // Create brush texture. - // TODO: apply rotation from layer to stamp for non-rotationally-symmetric brushes. - let mut brush_texture = cache.get_cached_brush(&stroke.style); - if brush_texture.is_none() { - let tex = create_brush_texture(&stroke.style); - cache.store_brush(stroke.style.clone(), tex.clone()); - brush_texture = Some(tex); - } - let brush_texture = brush_texture.unwrap(); - - // Compute transformation from stroke texture space into layer space, and create the stroke texture. - let skip = if idx == 0 { brush_plan.first_stroke_point_skip } else { 0 }; - let positions: Vec<_> = stroke.compute_blit_points().into_iter().skip(skip).collect(); - let stroke_texture = if idx == 0 && positions.is_empty() { - core::mem::take(&mut brush_plan.first_stroke_texture) - } else { - let mut bbox = stroke.bounding_box(); - bbox.start = bbox.start.floor(); - bbox.end = bbox.end.floor(); - let stroke_size = bbox.size() + DVec2::splat(stroke.style.diameter); - // For numerical stability we want to place the first blit point at a stable, integer offset in layer space. - let snap_offset = positions[0].floor() - positions[0]; - let stroke_origin_in_layer = bbox.start - snap_offset - DVec2::splat(stroke.style.diameter / 2.); - let stroke_to_layer = DAffine2::from_translation(stroke_origin_in_layer) * DAffine2::from_scale(stroke_size); - - let blit_target = if idx == 0 { - let target = core::mem::take(&mut brush_plan.first_stroke_texture); - let transform: DAffine2 = target.attribute_cloned_or_default(ATTR_TRANSFORM); - let (element, attributes) = target.into_parts(); - let (element, transform) = extend_image_to_bounds_core(element, transform, stroke_to_layer); - let mut item = Item::from_parts(element, attributes); - item.set_attribute(ATTR_TRANSFORM, transform); - List::new_from_item(item) - } else { - let mut item = Item::new_from_element(empty_image_core(stroke_to_layer, Color::TRANSPARENT)); - item.set_attribute(ATTR_TRANSFORM, stroke_to_layer); - List::new_from_item(item) - }; - - let list = blit(&(), blit_target, brush_texture, positions, |a, b| blend_colors(a, b, BlendMode::Normal, 1.)); - assert_eq!(list.len(), 1); - list.into_iter().next().unwrap_or_default() - }; - - // Cache image before doing final blend, and store final stroke texture. - if idx == final_stroke_idx { - cache.cache_results(core::mem::take(&mut draw_strokes), actual_image.clone(), stroke_texture.clone()); - } - - // TODO: Is this the correct way to do opacity in blending? - actual_image = blend_with_mode(actual_image, stroke_texture, stroke.style.blend_mode, (stroke.style.color.a() * 100.) as f64); - } - - let has_erase_or_restore_strokes = strokes.iter().any(|s| matches!(s.style.blend_mode, BlendMode::Erase | BlendMode::Restore)); - if has_erase_or_restore_strokes { - let opaque_image = Image::new(bbox.size().x as u32, bbox.size().y as u32, Color::WHITE); - let mut erase_restore_mask = Item::new_from_element(Raster::new_cpu(opaque_image)).with_attribute(ATTR_TRANSFORM, background_bounds); - - for stroke in strokes { - let mut brush_texture = cache.get_cached_brush(&stroke.style); - if brush_texture.is_none() { - let tex = create_brush_texture(&stroke.style); - cache.store_brush(stroke.style.clone(), tex.clone()); - brush_texture = Some(tex); - } - let brush_texture = brush_texture.unwrap(); - let positions: Vec<_> = stroke.compute_blit_points().into_iter().collect(); - - // For mask composition: Erase subtracts alpha, Restore adds alpha, and Draw acts like Restore to allow repainting erased areas. - let mask_blend_mode = match stroke.style.blend_mode { - BlendMode::Erase => BlendMode::Erase, - BlendMode::Restore => BlendMode::Restore, - _ => BlendMode::Restore, - }; - - erase_restore_mask = blit(&(), List::new_from_item(erase_restore_mask), brush_texture, positions, move |a, b| { - blend_colors(a, b, mask_blend_mode, 1.) - }) - .into_iter() - .next() - .unwrap_or_default(); - } - - actual_image = blend_image_closure(erase_restore_mask, actual_image, |a, b| blend_colors(a, b, BlendMode::MultiplyAlpha, 1.)); - } - - actual_image -} - -pub fn blend_image_closure(foreground: Item>, mut background: Item>, map_fn: impl Fn(Color, Color) -> Color) -> Item> { - let foreground_size = DVec2::new(foreground.element().width as f64, foreground.element().height as f64); - let background_size = DVec2::new(background.element().width as f64, background.element().height as f64); - - // Transforms a point from the background image to the foreground image - let foreground_transform: DAffine2 = foreground.attribute_cloned_or_default(ATTR_TRANSFORM); - let background_transform: DAffine2 = background.attribute_cloned_or_default(ATTR_TRANSFORM); - let background_to_foreground = DAffine2::from_scale(foreground_size) * foreground_transform.inverse() * background_transform * DAffine2::from_scale(1. / background_size); - - // Footprint of the foreground image (0, 0)..(1, 1) in the background image space - let background_aabb = Bbox::unit().affine_transform(background_transform.inverse() * foreground_transform).to_axis_aligned_bbox(); - - // Clamp the foreground image to the background image - let start = (background_aabb.start * background_size).max(DVec2::ZERO).as_uvec2(); - let end = (background_aabb.end * background_size).min(background_size).as_uvec2(); - - for y in start.y..end.y { - for x in start.x..end.x { - let background_point = DVec2::new(x as f64, y as f64); - let foreground_point = background_to_foreground.transform_point2(background_point); - - let source_pixel = foreground.element().sample(foreground_point); - let Some(destination_pixel) = background.element_mut().data_mut().get_pixel_mut(x, y) else { - continue; - }; - - *destination_pixel = map_fn(source_pixel, *destination_pixel); - } - } - - background -} - -pub fn blend_stamp_closure(foreground: BrushStampGenerator, mut background: Item>, map_fn: impl Fn(Color, Color) -> Color) -> Item> { - let background_size = DVec2::new(background.element().width as f64, background.element().height as f64); - - // Transforms a point from the background image to the foreground image - let background_transform: DAffine2 = background.attribute_cloned_or_default(ATTR_TRANSFORM); - let background_to_foreground = background_transform * DAffine2::from_scale(1. / background_size); - - // Footprint of the foreground image (0, 0)..(1, 1) in the background image space - let background_aabb = Bbox::unit().affine_transform(background_transform.inverse() * foreground.transform()).to_axis_aligned_bbox(); - - // Clamp the foreground image to the background image - let start = (background_aabb.start * background_size).max(DVec2::ZERO).as_uvec2(); - let end = (background_aabb.end * background_size).min(background_size).as_uvec2(); - - let area = background_to_foreground.transform_point2(DVec2::new(1., 1.)) - background_to_foreground.transform_point2(DVec2::ZERO); - for y in start.y..end.y { - for x in start.x..end.x { - let background_point = DVec2::new(x as f64, y as f64); - let foreground_point = background_to_foreground.transform_point2(background_point); - - let Some(source_pixel) = foreground.sample(foreground_point, area) else { continue }; - let Some(destination_pixel) = background.element_mut().data_mut().get_pixel_mut(x, y) else { - continue; - }; - - *destination_pixel = map_fn(source_pixel, *destination_pixel); - } - } - - background -} - -#[cfg(test)] -mod test { - use super::*; - use core_types::transform::Transform; - use glam::DAffine2; - - #[test] - fn test_brush_texture() { - let size = 20.; - let image = brush_stamp_generator(&(), size, Color::BLACK, 100., 100.); - assert_eq!(image.transform(), DAffine2::from_scale_angle_translation(DVec2::splat(size.ceil()), 0., -DVec2::splat(size / 2.))); - // center pixel should be BLACK - assert_eq!(image.sample(DVec2::splat(0.), DVec2::ONE), Some(Color::BLACK)); - } - - #[test] - fn test_brush_output_size() { - let image = brush_core( - Item::new_from_element(Raster::new_cpu(Image::::default())), - vec![BrushStroke { - trace: vec![crate::brush_stroke::BrushInputSample { position: DVec2::ZERO }], - style: BrushStyle { - color: Color::BLACK, - diameter: 20., - hardness: 20., - flow: 20., - spacing: 20., - blend_mode: BlendMode::Normal, - }, - }], - &BrushCache::default(), - ); - assert_eq!(image.element().width, 20); - } -} diff --git a/node-graph/nodes/brush/src/brush_cache.rs b/node-graph/nodes/brush/src/brush_cache.rs deleted file mode 100644 index f4b980efb8..0000000000 --- a/node-graph/nodes/brush/src/brush_cache.rs +++ /dev/null @@ -1,116 +0,0 @@ -use crate::brush_stroke::BrushStroke; -use crate::brush_stroke::BrushStyle; -use core_types::ATTR_TRANSFORM; -use core_types::graphene_hash::CacheHashWrapper; -use core_types::list::Item; -use raster_types::CPU; -use raster_types::Raster; -use std::collections::HashMap; -use std::sync::{Arc, Mutex}; - -#[derive(Clone, Debug, Default)] -struct BrushCacheImpl { - // The full previous input that was cached. - prev_input: Vec, - - // The strokes that have been fully processed and blended into the background. - background: Item>, - blended_image: Item>, - last_stroke_texture: Item>, - - // A cache for brush textures. - brush_texture_cache: HashMap, Raster>, -} - -impl BrushCacheImpl { - fn compute_brush_plan(&mut self, mut background: Item>, input: &[BrushStroke]) -> BrushPlan { - // Do background invalidation. - if background != self.background { - self.background = background.clone(); - return BrushPlan { - strokes: input.to_vec(), - background, - ..Default::default() - }; - } - - // Do blended_image invalidation. - let blended_strokes = &self.prev_input[..self.prev_input.len().saturating_sub(1)]; - let num_blended_strokes = blended_strokes.len(); - if input.get(..num_blended_strokes) != Some(blended_strokes) { - return BrushPlan { - strokes: input.to_vec(), - background, - ..Default::default() - }; - } - - // Take our previous blended image (and invalidate the cache). - // Since we're about to replace our cache anyway, this saves a clone. - background = std::mem::take(&mut self.blended_image); - - // Check if the first non-blended stroke is an extension of the last one. - // Transform is set to ZERO (not the default IDENTITY) as a sentinel to mark this item as uninitialized. - let mut first_stroke_texture = Item::new_from_element(Raster::::default()).with_attribute(ATTR_TRANSFORM, glam::DAffine2::ZERO); - let mut first_stroke_point_skip = 0; - let strokes = input[num_blended_strokes..].to_vec(); - if !strokes.is_empty() && self.prev_input.len() > num_blended_strokes { - let last_stroke = &self.prev_input[num_blended_strokes]; - let same_style = strokes[0].style == last_stroke.style; - let prev_points = last_stroke.compute_blit_points(); - let new_points = strokes[0].compute_blit_points(); - let is_point_prefix = new_points.get(..prev_points.len()) == Some(&prev_points); - if same_style && is_point_prefix { - first_stroke_texture = std::mem::take(&mut self.last_stroke_texture); - first_stroke_point_skip = prev_points.len(); - } - } - - self.prev_input = Vec::new(); - BrushPlan { - strokes, - background, - first_stroke_texture, - first_stroke_point_skip, - } - } - - pub fn cache_results(&mut self, input: Vec, blended_image: Item>, last_stroke_texture: Item>) { - self.prev_input = input; - self.blended_image = blended_image; - self.last_stroke_texture = last_stroke_texture; - } -} - -#[derive(Clone, Debug, Default)] -pub struct BrushPlan { - pub strokes: Vec, - pub background: Item>, - pub first_stroke_texture: Item>, - pub first_stroke_point_skip: usize, -} - -#[derive(Debug, Default, Clone)] -pub struct BrushCache(Arc>); - -impl BrushCache { - pub fn compute_brush_plan(&self, background: Item>, input: &[BrushStroke]) -> BrushPlan { - let mut inner = self.0.lock().unwrap(); - inner.compute_brush_plan(background, input) - } - - pub fn cache_results(&self, input: Vec, blended_image: Item>, last_stroke_texture: Item>) { - let mut inner = self.0.lock().unwrap(); - inner.cache_results(input, blended_image, last_stroke_texture) - } - - pub fn get_cached_brush(&self, style: &BrushStyle) -> Option> { - let inner = self.0.lock().unwrap(); - inner.brush_texture_cache.get(&CacheHashWrapper(style.clone())).cloned() - } - - pub fn store_brush(&self, style: BrushStyle, brush: Raster) { - let mut inner = self.0.lock().unwrap(); - inner.brush_texture_cache.insert(CacheHashWrapper(style), brush); - } -} diff --git a/node-graph/nodes/brush/src/brush_stroke.rs b/node-graph/nodes/brush/src/brush_stroke.rs deleted file mode 100644 index 0de410fea2..0000000000 --- a/node-graph/nodes/brush/src/brush_stroke.rs +++ /dev/null @@ -1,108 +0,0 @@ -use core_types::CacheHash; -use core_types::blending::BlendMode; -use core_types::color::Color; -use core_types::math::bbox::AxisAlignedBbox; -use dyn_any::DynAny; -use glam::DVec2; -/// The style of a brush. -#[derive(Clone, Debug, CacheHash, DynAny)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct BrushStyle { - pub color: Color, - pub diameter: f64, - pub hardness: f64, - pub flow: f64, - pub spacing: f64, // Spacing as a fraction of the diameter. - pub blend_mode: BlendMode, -} - -impl Default for BrushStyle { - fn default() -> Self { - Self { - color: Color::BLACK, - diameter: 40., - hardness: 50., - flow: 100., - spacing: 50., // Percentage of diameter. - blend_mode: BlendMode::Normal, - } - } -} - -impl Eq for BrushStyle {} - -impl PartialEq for BrushStyle { - fn eq(&self, other: &Self) -> bool { - self.color == other.color - && self.diameter.to_bits() == other.diameter.to_bits() - && self.hardness.to_bits() == other.hardness.to_bits() - && self.flow.to_bits() == other.flow.to_bits() - && self.spacing.to_bits() == other.spacing.to_bits() - && self.blend_mode == other.blend_mode - } -} - -/// A single sample of brush parameters across the brush stroke. -#[derive(Clone, Debug, PartialEq, core_types::CacheHash, DynAny)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct BrushInputSample { - pub position: DVec2, -} - -/// The parameters for a single stroke brush. -#[derive(Clone, Debug, PartialEq, core_types::CacheHash, Default, DynAny)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct BrushStroke { - pub style: BrushStyle, - pub trace: Vec, -} - -impl BrushStroke { - pub fn bounding_box(&self) -> AxisAlignedBbox { - let radius = self.style.diameter / 2.; - self.compute_blit_points() - .iter() - .map(|pos| AxisAlignedBbox { - start: *pos + DVec2::new(-radius, -radius), - end: *pos + DVec2::new(radius, radius), - }) - .reduce(|a, b| a.union(&b)) - .unwrap_or(AxisAlignedBbox::ZERO) - } - - pub fn compute_blit_points(&self) -> Vec { - // We always travel in a straight line towards the next user input, - // placing a blit point every time we travelled our spacing distance. - let spacing_dist = self.style.spacing / 100. * self.style.diameter; - - let Some(first_sample) = self.trace.first() else { - return Vec::new(); - }; - - let mut cur_pos = first_sample.position; - let mut result = vec![cur_pos]; - let mut dist_until_next_blit = spacing_dist; - for sample in &self.trace[1..] { - // Travel to the next sample. - let delta = sample.position - cur_pos; - let mut dist_left = delta.length(); - let unit_step = delta / dist_left; - - while dist_left >= dist_until_next_blit { - // Take a step to the next blit point. - cur_pos += dist_until_next_blit * unit_step; - dist_left -= dist_until_next_blit; - - // Blit. - result.push(cur_pos); - dist_until_next_blit = spacing_dist; - } - - // Take the partial step to land at the sample. - dist_until_next_blit -= dist_left; - cur_pos = sample.position; - } - - result - } -} diff --git a/node-graph/nodes/brush/src/lib.rs b/node-graph/nodes/brush/src/lib.rs index d9eae7b368..219fd9d701 100644 --- a/node-graph/nodes/brush/src/lib.rs +++ b/node-graph/nodes/brush/src/lib.rs @@ -1,30 +1,32 @@ -pub mod brush; -mod brush_cache; -pub mod brush_stroke; +use core_types::list::{ATTR_COLOR, ATTR_DIAMETER, ATTR_FLOW, ATTR_HARDNESS, Item, List}; +use core_types::registry::types::Percentage; +use core_types::{Color, Ctx}; +use graphic_types::Graphic; -pub mod migrations { - use crate::brush_stroke::BrushStroke; +pub mod basic_brush; - // TODO: Eventually remove this migration document upgrade code - pub fn migrate_to_brush_strokes<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { - use serde::Deserialize; +pub use brush_types::*; - #[derive(serde::Deserialize)] - struct LegacyTable { - #[serde(alias = "instances", alias = "instance")] - element: Vec, - } +pub(crate) const DEFAULT_DIAMETER: f64 = 40.; +pub(crate) const DEFAULT_HARDNESS: f64 = 0.; +pub(crate) const DEFAULT_FLOW: f64 = 100.; +pub(crate) const DEFAULT_COLOR: Color = Color::BLACK; - #[derive(serde::Deserialize)] - #[serde(untagged)] - enum BrushStrokesFormat { - Strokes(Vec), - List(LegacyTable), - } - - Ok(match BrushStrokesFormat::deserialize(deserializer)? { - BrushStrokesFormat::Strokes(strokes) => strokes, - BrushStrokesFormat::List(list) => list.element, - }) - } +#[node_macro::node(category("Raster: Brush"))] +fn brush_strokes( + _: impl Ctx, + strokes: List, + color: List, + #[default(DEFAULT_DIAMETER)] diameter: Item, + #[default(DEFAULT_HARDNESS)] hardness: Item, + #[default(DEFAULT_FLOW)] flow: Item, +) -> List { + let (diameter, hardness, flow) = (diameter.into_element(), hardness.into_element(), flow.into_element()); + List::new_from_item( + Item::new_from_element(Graphic::from(strokes)) + .with_attribute(ATTR_COLOR, color.element(0).copied().unwrap_or_default()) + .with_attribute(ATTR_DIAMETER, diameter.max(0.)) + .with_attribute(ATTR_HARDNESS, (hardness / 100.).clamp(0., 1.)) + .with_attribute(ATTR_FLOW, (flow / 100.).clamp(0., 1.)), + ) } diff --git a/node-graph/nodes/gcore/src/animation.rs b/node-graph/nodes/gcore/src/animation.rs index 9bd9ef2993..c85ec3548b 100644 --- a/node-graph/nodes/gcore/src/animation.rs +++ b/node-graph/nodes/gcore/src/animation.rs @@ -3,7 +3,7 @@ use core_types::list::List; use core_types::transform::Footprint; use core_types::{CacheHash, Color, Context, Ctx, DeriveCtx, ExtractAnimationTime, ExtractPointerPosition, ExtractRealTime}; use glam::{DAffine2, DVec2}; -use graphic_types::vector_types::GradientStops; +use graphic_types::vector_types::Gradient; use graphic_types::{Artboard, Graphic, Vector}; use raster_types::{CPU, GPU, Raster}; @@ -36,17 +36,20 @@ fn real_time( /// The time and date component to be produced as a number. component: RealTimeMode, ) -> f64 { + let component = component.into_element(); let real_time = ctx.try_real_time().unwrap_or_default(); // TODO: Implement proper conversion using and existing time implementation - match component { + let result = match component { RealTimeMode::Utc => real_time, RealTimeMode::Year => (real_time / DAY / 365.25).floor() + 1970., // TODO: Factor in a chosen timezone RealTimeMode::Hour => (real_time / 1000. / 3600.).floor() % 24., // TODO: Factor in a chosen timezone RealTimeMode::Minute => (real_time / 1000. / 60.).floor() % 60., // TODO: Factor in a chosen timezone RealTimeMode::Second => (real_time / 1000.).floor() % 60., RealTimeMode::Millisecond => real_time % 1000., - } + }; + + Item::new_from_element(result) } /// Produces the time, in seconds on the timeline, since the beginning of animation playback. @@ -58,7 +61,7 @@ fn animation_time( #[unit("/sec")] rate: f64, ) -> f64 { - ctx.try_animation_time().unwrap_or_default() * rate + Item::new_from_element(ctx.try_animation_time().unwrap_or_default() * *rate.element()) } #[node_macro::node(category("Debug"))] @@ -74,16 +77,23 @@ fn quantize_real_time( Context -> DAffine2, Context -> Footprint, Context -> DVec2, + Context -> Vector, + Context -> Graphic, + Context -> Raster, + Context -> Raster, + Context -> Color, + Context -> Gradient, + Context -> Artboard, + Context -> List, + Context -> List, + Context -> List, Context -> List, Context -> List, Context -> List>, Context -> List>, Context -> List, + Context -> List, Context -> List, - Context -> List, - Context -> List, - Context -> List, - Context -> (), )] value: impl Node, Output = T>, #[default(1)] @@ -92,6 +102,7 @@ fn quantize_real_time( ) -> GPoll { let time = ctx.try_real_time().unwrap_or_default(); let time = time / 1000.; + let quantum = quantum.into_element(); let mut quantized_time = (time * quantum.recip()).round() / quantum.recip(); if !quantized_time.is_finite() { quantized_time = time; @@ -114,16 +125,23 @@ fn quantize_animation_time( Context -> DAffine2, Context -> Footprint, Context -> DVec2, + Context -> Vector, + Context -> Graphic, + Context -> Raster, + Context -> Raster, + Context -> Color, + Context -> Gradient, + Context -> Artboard, + Context -> List, + Context -> List, + Context -> List, Context -> List, Context -> List, Context -> List>, Context -> List>, Context -> List, + Context -> List, Context -> List, - Context -> List, - Context -> List, - Context -> List, - Context -> (), )] value: impl Node, Output = T>, #[default(1)] @@ -131,6 +149,7 @@ fn quantize_animation_time( quantum: f64, ) -> GPoll { let time = ctx.try_animation_time().unwrap_or_default(); + let quantum = quantum.into_element(); let mut quantized_time = (time * quantum.recip()).round() / quantum.recip(); if !quantized_time.is_finite() { quantized_time = time; @@ -142,7 +161,7 @@ fn quantize_animation_time( /// Produces the current position of the user's pointer within the document canvas. #[node_macro::node(category("Animation"))] fn pointer_position(ctx: impl Ctx + ExtractPointerPosition) -> DVec2 { - ctx.try_pointer_position().unwrap_or_default() + Item::new_from_element(ctx.try_pointer_position().unwrap_or_default()) } // TODO: These nodes require more sophisticated algorithms for giving the correct result diff --git a/node-graph/nodes/gcore/src/context.rs b/node-graph/nodes/gcore/src/context.rs index ee60d26490..7e178a5451 100644 --- a/node-graph/nodes/gcore/src/context.rs +++ b/node-graph/nodes/gcore/src/context.rs @@ -1,9 +1,9 @@ use core_types::gpoll::{Extent, GPoll, GraphError, Interrupt}; -use core_types::list::List; +use core_types::list::{Item, List}; use core_types::{Color, ExtractVarArgs}; use core_types::{Ctx, ExtractIndex, ExtractIndices, ExtractPosition}; use glam::DVec2; -use graphic_types::vector_types::GradientStops; +use graphic_types::vector_types::Gradient; use graphic_types::{Graphic, Vector}; use raster_types::{CPU, Raster}; @@ -40,7 +40,7 @@ fn read_color(ctx: impl Ctx + ExtractVarArgs) -> List { } #[node_macro::node(category("Context"), path(graphene_core::vector))] -fn read_gradient(ctx: impl Ctx + ExtractVarArgs) -> List { +fn read_gradient(ctx: impl Ctx + ExtractVarArgs) -> List { let Ok(var_arg) = ctx.vararg(0) else { return Default::default() }; let var_arg = var_arg as &dyn std::any::Any; @@ -111,12 +111,49 @@ fn read_color_row_extent(_: &ReadColorRowNode, ctx: &C, /// Rank-model vararg source: the mapped row's items as lanes, elements only. #[node_macro::node(category("Test"), extent_raw(read_gradient_row_extent))] -pub fn read_gradient_row(ctx: impl Ctx + ExtractVarArgs + ExtractIndex) -> Result, Interrupt> { +pub fn read_gradient_row(ctx: impl Ctx + ExtractVarArgs + ExtractIndex) -> Result, Interrupt> { vararg_element(ctx) } fn read_gradient_row_extent(_: &ReadGradientRowNode, ctx: &C, level: u8) -> GPoll { - vararg_lanes::(ctx, level) + vararg_lanes::(ctx, level) +} + +/// Widens a numeric vararg row into `f64`, keeping each item's attributes. +fn widen_vararg(var_arg: &dyn std::any::Any, widen: impl Fn(T) -> f64) -> Option> { + let list = var_arg.downcast_ref::>()?.clone(); + Some( + list.into_iter() + .map(|item| { + let (element, attributes) = item.into_parts(); + Item::from_parts(widen(element), attributes) + }) + .collect(), + ) +} + +/// Reads the current number from within a **Map** node's loop. +#[node_macro::node(category("Context"))] +fn read_number(ctx: impl Ctx + ExtractVarArgs) -> List { + let Ok(var_arg) = ctx.vararg(0) else { return Default::default() }; + let var_arg = var_arg as &dyn std::any::Any; + + if let Some(list) = var_arg.downcast_ref::>() { + return list.clone(); + } + + // Numeric rows carry several possible element types, so probe each and widen to f64 + if let Some(list) = widen_vararg(var_arg, |value: f32| value as f64) { + return list; + } + if let Some(list) = widen_vararg(var_arg, |value: u32| value as f64) { + return list; + } + if let Some(list) = widen_vararg(var_arg, |value: u64| value as f64) { + return list; + } + + Default::default() } #[node_macro::node(category("Context"), path(core_types::vector))] diff --git a/node-graph/nodes/gcore/src/debug.rs b/node-graph/nodes/gcore/src/debug.rs index 88b1802caf..059207181c 100644 --- a/node-graph/nodes/gcore/src/debug.rs +++ b/node-graph/nodes/gcore/src/debug.rs @@ -1,6 +1,5 @@ use core_types::Ctx; use glam::{DAffine2, DVec2}; -use raster_types::{CPU, Raster}; /// Meant for debugging purposes, not general use. Logs the input value to the console and passes it through unchanged. #[node_macro::node(category("Debug"), name("Log to Console"))] diff --git a/node-graph/nodes/gcore/src/extract_xy.rs b/node-graph/nodes/gcore/src/extract_xy.rs index 267ac64fdc..8fbdffbc8f 100644 --- a/node-graph/nodes/gcore/src/extract_xy.rs +++ b/node-graph/nodes/gcore/src/extract_xy.rs @@ -1,16 +1,22 @@ +use core_types::list::Item; use core_types::{CacheHash, Ctx}; use dyn_any::DynAny; use glam::{DVec2, IVec2, UVec2}; /// Obtains the X or Y component of a vec2. /// -/// The inverse of this node is "Vec2 Value", which can have either or both its X and Y parameters exposed as graph inputs. -#[node_macro::node(name("Extract XY"), category("Math: Vector"))] -fn extract_xy>(_: impl Ctx, #[implementations(DVec2, IVec2, UVec2)] vector: T, axis: XY) -> f64 { - match axis { +/// The inverse of this node is **Combine Vec2**, which composes a vec2 from its X and Y components. +#[node_macro::node(name("Extract XY"), category("Math: Vec2"))] +fn extract_xy>(_: impl Ctx, #[implementations(DVec2, IVec2, UVec2)] vector: Item, axis: Item) -> Item { + let vector = vector.into_element(); + let axis = axis.into_element(); + + let result = match axis { XY::X => vector.into().x, XY::Y => vector.into().y, - } + }; + + Item::new_from_element(result) } /// The X or Y component of a vec2. diff --git a/node-graph/nodes/gcore/src/ops.rs b/node-graph/nodes/gcore/src/ops.rs index 5c47a5dcaa..3b32ade11a 100644 --- a/node-graph/nodes/gcore/src/ops.rs +++ b/node-graph/nodes/gcore/src/ops.rs @@ -9,6 +9,7 @@ fn passthrough(_: impl Ctx, content: T) -> T { content } +/// Shifts a whole value onto a connector's type through the std `Into` trait, serving the whole-`List` erasure onto `ListDyn` under the input adapter identifier. #[node_macro::node(category(""), skip_impl)] fn into, O: Send>(_: impl Ctx, value: T, #[data] _out_ty: PhantomData) -> O { value.into() diff --git a/node-graph/nodes/graphic/Cargo.toml b/node-graph/nodes/graphic/Cargo.toml index c67322948e..2fc815c2e3 100644 --- a/node-graph/nodes/graphic/Cargo.toml +++ b/node-graph/nodes/graphic/Cargo.toml @@ -8,6 +8,7 @@ authors.workspace = true [dependencies] # Local dependencies core-types = { workspace = true } +brush-types = { workspace = true } graphic-types = { workspace = true } vector-types = { workspace = true } raster-types = { workspace = true } @@ -17,3 +18,4 @@ dyn-any = { workspace = true } glam = { workspace = true } serde = { workspace = true } node-macro = { workspace = true } +rand = { workspace = true } diff --git a/node-graph/nodes/graphic/src/graphic.rs b/node-graph/nodes/graphic/src/graphic.rs index 2f73661051..0607b5b9bb 100644 --- a/node-graph/nodes/graphic/src/graphic.rs +++ b/node-graph/nodes/graphic/src/graphic.rs @@ -1,17 +1,20 @@ +use brush_types::Stroke; use core_types::attribute::{Attr, EditorLayerPath, Transform as TransformAttr}; use core_types::bounds::{BoundingBox, RenderBoundingBox}; use core_types::extent::{ExtentIn, LevelIn, ListIn, ValueIn}; use core_types::gpoll::{Extent, GPoll, GraphError, Interrupt, Level}; -use core_types::list::List; -use core_types::registry::types::{Angle, SignedInteger}; +use core_types::list::{Item, List, ListDyn}; +use core_types::registry::types::{Angle, SeedValue, SignedInteger}; use core_types::uuid::NodeId; use core_types::{ATTR_EDITOR_LAYER_PATH, ATTR_TRANSFORM, CacheHash, Color, Ctx, DeriveCtx, ExtractIndex, InjectIndex, ModifyIndex}; use glam::{DAffine2, DVec2}; -use graphic_types::graphic::{Graphic, IntoGraphicList}; +use graphic_types::graphic::{Graphic, IntoGraphicList, is_lone_anonymous_leaf}; use graphic_types::{ATTR_EDITOR_MERGED_LAYERS, Artboard, Vector}; use raster_types::{CPU, GPU, Raster}; - -use vector_types::{GradientStop, GradientStops, ReferencePoint}; +use rand::SeedableRng; +use rand::seq::SliceRandom; +use std::cmp::Ordering; +use vector_types::{Gradient, ReferencePoint}; /// Resolves a signed index over `total` lanes: negatives count from the end, /// out of range resolves to nothing. @@ -98,7 +101,7 @@ fn omit_element_extent(list: ExtentIn<'_>, index: ValueIn<'_, f64>, level: Level pub fn extract_element( _: impl Ctx, /// The `List` of data to extract from. - #[implementations(String, f64, NodeId, Color, GradientStops, Vector, Raster, Graphic, Artboard)] + #[implementations(String, f64, NodeId, Color, Gradient, Vector, Raster, Graphic, Artboard)] list: IList, /// The index of the item to retrieve, starting from 0 for the first item. Negative indices count backwards from the end of the list, starting from -1 for the last item. index: SignedInteger, @@ -112,7 +115,7 @@ pub fn extract_element( #[node_macro::node(category("General"))] fn map( ctx: impl Ctx + DeriveCtx + ExtractIndex + InjectIndex + Copy, - #[implementations(Graphic, Vector, Raster, Color, GradientStops, String)] content: IList, + #[implementations(Graphic, Vector, Raster, Color, Gradient, String)] content: IList, mapped: impl Node, Output = IList>, ) -> Result, Interrupt> { let mut remaining = ctx.index(); @@ -425,9 +428,9 @@ fn extend_extent(base: ExtentIn<'_>, new: ExtentIn<'_>, level: LevelIn) -> GPoll #[node_macro::node(category(""))] pub fn legacy_layer_extend( _: impl Ctx, - #[implementations(List, List, List, List, List>, List>, List, List)] base: List, + #[implementations(List, List, List, List, List>, List>, List, List)] base: List, #[expose] - #[implementations(List, List, List, List, List>, List>, List, List)] + #[implementations(List, List, List, List, List>, List>, List, List)] new: List, nested_node_path: List, ) -> List { @@ -447,21 +450,21 @@ pub fn legacy_layer_extend( base } -/// Nests the input graphical content in a wrapper graphic. This essentially "groups" the input. -/// The wrapped run keeps the level's element type, so the legacy boundary can -/// lower a wrapped vector level to the bare typed graphic the pre-flip wrap made. +/// Nests the input graphical content in a wrapper graphic, collecting it all into a single group. +/// The collected run keeps the level's element type, so the legacy boundary can +/// lower a collected vector level to the bare typed graphic the pre-flip wrap made. /// The inverse of this node is 'Flatten Graphic'. -#[node_macro::node(category("General"), extent(wrap_graphic_extent))] -pub fn wrap_graphic<'e, T: Clone + Send + Sync + core_types::CacheHash + 'static>( +#[node_macro::node(category("General"), extent(into_group_extent))] +pub fn into_group<'e, T: Clone + Send + Sync + core_types::CacheHash + 'static>( _: impl Ctx, - #[implementations(Graphic, Vector, Raster, Raster, Color, GradientStops, String)] content: IList, + #[implementations(Graphic, Vector, Raster, Raster, Color, Gradient, String)] content: IList, ) -> Result>, Interrupt> { let item = content.as_group_item(); Ok(Graphic::Group(core_types::record::Group { row: None, content: item })) } /// The collected group is the level's single lane. -fn wrap_graphic_extent(_content: ListIn<'_, T>, _level: LevelIn) -> GPoll { +fn into_group_extent(_content: ListIn<'_, T>, _level: LevelIn) -> GPoll { GPoll::Final(Extent::Exactly(1)) } @@ -469,7 +472,9 @@ fn wrap_graphic_extent(_content: ListIn<'_, T>, _level: LevelIn) -> GPoll( ctx: impl Ctx + core_types::context::ExtractArena<'e>, #[implementations( @@ -479,14 +484,22 @@ pub fn to_graphic<'e, T: graphic_types::graphic::IntoGraphicElement>( List>, List>, List, - List, + List, List, + List, )] content: T, ) -> Result, Interrupt> { content.into_graphic_element(ctx.arena()).ok_or_else(|| GraphError::new("the arena is exhausted").into()) } +/// Type-asserts a value to be graphical content, converting each item of other content types into its matching form. +/// Use the 'Into Group' node instead to collect the content into a single group. +#[node_macro::node(category("General"))] +pub fn as_graphic<'e>(_: impl Ctx, value: Graphic<'e>) -> Graphic<'e> { + value +} + /// The elementwise `Graphic` coercion the compiler-inserted converts use: each /// lane's element converts on its own, so a typed source feeds a graphic input /// without changing the level's shape. Registered under the convert identifier. @@ -499,14 +512,14 @@ pub fn to_graphic_element<'e, T: graphic_types::graphic::IntoGraphicElement>( Raster, Raster, Color, - GradientStops, + Gradient, String, List, List, List>, List>, List, - List, + List, List, )] content: T, @@ -520,7 +533,7 @@ pub fn to_graphic_element<'e, T: graphic_types::graphic::IntoGraphicElement>( #[node_macro::node(category(""), extent(wrap_graphic_extent))] pub fn to_graphic_typed<'e, T: Clone + Send + Sync + core_types::CacheHash + 'static>( _: impl Ctx, - #[implementations(Vector, Raster, Raster, Color, GradientStops, String)] content: IList, + #[implementations(Vector, Raster, Raster, Color, Gradient, String)] content: IList, ) -> Result>, Interrupt> { let item = content.as_group_item(); Ok(Graphic::Group(core_types::record::Group { row: None, content: item })) @@ -544,7 +557,7 @@ fn to_graphic_unit_extent(_content: core_types::extent::ValueIn<'_, ()>, _level: #[node_macro::node(category(""))] pub fn level_to_list( _: impl Ctx, - #[implementations(Graphic, Vector, Raster, Raster, Color, GradientStops, String)] value: IList, + #[implementations(Graphic, Vector, Raster, Raster, Color, Gradient, String)] value: IList, _converter: (), ) -> List { let item = value.as_group_item(); @@ -598,22 +611,22 @@ pub fn flatten_vector(_: impl Ctx, #[implementations(List::collect_metadata` can recurse into it, // TODO: which conflates render output with editor metadata and forces the pre-compensation dance below. // TODO: The cleaner fix is to drive each layer's metadata from its own Monitor's captured `(Context, List)`, - // TODO: at which point this attribute (and the equivalents in Boolean Operation, Solidify Stroke, Flatten Path, + // TODO: at which point this attribute (and the equivalents in Boolean Operation, Solidify Stroke, Combine Paths, // TODO: Morph, Rasterize) become unnecessary. - if !output.is_empty() { + if !output.is_empty() && !is_lone_anonymous_leaf(&graphic_list) { // Item 0 carries a composed transform inherited from the flattened input, but the merged_layers // already holds the original transforms; pre-compensate by item 0's inverse so the renderer's // `upstream_footprint *= item_0_transform` recursion cancels out and leaves the originals intact. - let mut graphic_list = graphic_list; + let mut merged_layers = graphic_list; let item_0_transform: DAffine2 = output.attribute_cloned_or_default(ATTR_TRANSFORM, 0); if item_0_transform.matrix2.determinant().abs() > f64::EPSILON { let inverse = item_0_transform.inverse(); - for transform in graphic_list.iter_attribute_values_mut_or_default::(ATTR_TRANSFORM) { + for transform in merged_layers.iter_attribute_values_mut_or_default::(ATTR_TRANSFORM) { *transform = inverse * *transform; } } - output.set_attribute(ATTR_EDITOR_MERGED_LAYERS, 0, Some(graphic_list)); + output.set_attribute(ATTR_EDITOR_MERGED_LAYERS, 0, Some(merged_layers)); } output @@ -631,19 +644,333 @@ pub fn flatten_color(_: impl Ctx, #[implementations(List(_: impl Ctx, #[implementations(List, List)] content: T) -> List { +pub fn flatten_gradient(_: impl Ctx, #[implementations(List, List)] content: T) -> List { content.into_flattened_list() } -/// Constructs a gradient from a `Color[]`, where the colors are evenly distributed as gradient stops across the range from 0 to 1. -#[node_macro::node(category("Color"))] -fn colors_to_gradient(_: impl Ctx, colors: IList) -> GradientStops { - let stop = |position: f64, color: Color| GradientStop { position, midpoint: 0.5, color }; - match colors.len() { - 0 => GradientStops::new(vec![stop(0., Color::BLACK), stop(1., Color::BLACK)]), - 1 => GradientStops::new(vec![stop(0., colors.get(0)), stop(1., colors.get(0))]), - total => GradientStops::new((0..total).map(|index| stop(index as f64 / (total - 1) as f64, colors.get(index)))), +/// Constructs a gradient from a `Color[]`, where each color becomes a gradient stop. A `position` attribute on the colors places their stops along the ramp and a `midpoint` attribute skews each transition, while colors carrying neither are distributed evenly across the 0 to 1 range. +#[node_macro::node(category("Gradient"), name("Colors to Gradient"))] +fn colors_to_gradient(_: impl Ctx, #[implementations(List, List)] colors: T) -> Gradient { + Gradient::from(colors.into_flattened_list::()) +} + +/// Unwraps a gradient into a `Color[]` of its stops, keeping any `position` and `midpoint` attributes that place them along the ramp. Attributes belonging to the gradient as a whole (like spread and interpolation), rather than its individual color stops, are not preserved. +#[node_macro::node(category("Gradient"), name("Gradient to Colors"))] +fn gradient_to_colors(_: impl Ctx, gradient: Gradient) -> List { + gradient.into_color_list() +} + +/// Keeps chosen items from a list (those corresponding to `true` values) and discards the others (those corresponding to `false` values) based on the *Keep Pattern* bool list. A short pattern is repeated over the remainder of the filtered list, allowing a pattern like `[true, false]` to keep every other item starting from the first. An empty pattern keeps all items. +#[node_macro::node(category("General"))] +fn filter( + _: impl Ctx, + /// The list of data to filter. + #[implementations( + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List>, + List>, + List, + List, + List, + )] + list: List, + /// The list of true and false values that determines which corresponding items are kept (`true`) and discarded (`false`). The pattern may repeat if it is shorter than the list of data. + keep_pattern: List, +) -> List { + // Tile the keep pattern over the items, so a short pattern repeats from the start + let pattern = keep_pattern.iter_element_values().as_slice(); + if pattern.is_empty() { + return list; + } + + list.into_iter().enumerate().filter_map(|(index, item)| pattern[index % pattern.len()].then_some(item)).collect() +} + +/// Reverses the order of the items in a list, so the last item comes first and the first comes last. +#[node_macro::node(category("General"))] +fn reverse( + _: impl Ctx, + /// The list of data to reverse. + #[implementations( + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List>, + List>, + List, + List, + List, + )] + list: List, +) -> List { + list.into_iter().rev().collect() +} + +/// Shifts the items in a list by a number of positions. With wrapping, items pushed off one end reappear at the other. Otherwise they are dropped, shortening the list. +#[node_macro::node(category("General"))] +fn shift( + _: impl Ctx, + /// The list of data to shift. + #[implementations( + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List>, + List>, + List, + List, + List, + )] + list: List, + /// How many positions to shift each item. Positive values shift items toward the start of the list, negative toward the end. + amount: SignedInteger, + /// Whether items shifted off one end wrap around to the other. When off, they are dropped and the list gets shorter. + #[default(true)] + wrap: bool, +) -> List { + let amount = amount as i64; + let len = list.len() as i64; + if len == 0 { + return list; + } + + let mut items: Vec> = list.into_iter().collect(); + if wrap { + items.rotate_left((((amount % len) + len) % len) as usize); + items.into_iter().collect() + } else if amount >= 0 { + items.into_iter().skip(amount.min(len) as usize).collect() + } else { + items.into_iter().take((len + amount).max(0) as usize).collect() } } + +/// Randomly reorders the items in a list. The same seed always produces the same ordering. +#[node_macro::node(category("General"))] +fn shuffle( + _: impl Ctx, + /// The list to have its items randomly reordered. + #[implementations( + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List>, + List>, + List, + List, + List, + )] + list: List, + /// Seed to determine the unique variation of the random shuffle ordering. The same seed always produces the same ordering. + seed: SeedValue, +) -> List { + let mut items: Vec> = list.into_iter().collect(); + + let mut rng = rand::rngs::StdRng::seed_from_u64(seed.into()); + items.shuffle(&mut rng); + + items.into_iter().collect() +} + +/// Generates a list of evenly spaced numbers, starting at a value and progressing by a step (which may be positive, negative, or zero) for a given count. +#[node_macro::node(category("General"), name("Number Sequence"))] +fn number_sequence( + _: impl Ctx, + _primary: (), + /// The first number in the sequence. + start: f64, + /// The amount added to reach each successive number. + #[default(1.)] + step: f64, + /// How many numbers to generate. + #[default(10)] + count: u32, +) -> List { + (0..count).map(|index| Item::new_from_element(start + step * index as f64)).collect() +} + +/// Counts out the index of each item in a list (0, 1, 2, and so on), producing a list of numbers with one for each item. +#[node_macro::node(category("General"))] +fn list_indices( + _: impl Ctx, + /// The list whose items are counted. + list: ListDyn, + /// The number that the count begins from for the first item. + start_index: SignedInteger, +) -> List { + (0..list.len()).map(|index| Item::new_from_element(start_index + index as f64)).collect() +} + +/// Extracts a portion of a list, starting at "Start" and ending before "End". +/// +/// Negative indices count from the end of the list. If the index of "Start" equals or exceeds "End", the result is an empty list. +#[node_macro::node(category("General"))] +fn list_slice( + _: impl Ctx, + /// The list of data to take a portion of. + #[implementations( + List, + List, + List, + List, + List, + List, + List, + List, + List, + List, + List>, + List>, + List, + List, + List, + )] + list: List, + /// The index of the first item in the portion. Negative indices count from the end of the list. + start: SignedInteger, + /// The index the portion ends before, which is not included. Zero or negative indices count from the end of the list. + end: SignedInteger, +) -> List { + let total_items = list.len(); + + let start = if start < 0. { + total_items.saturating_sub(start.abs() as usize) + } else { + (start as usize).min(total_items) + }; + let end = if end <= 0. { + total_items.saturating_sub(end.abs() as usize) + } else { + (end as usize).min(total_items) + }; + + if start >= end { + return List::new(); + } + + list.into_iter().skip(start).take(end - start).collect() +} + +/// Pairwise ordering used by the Sort node for element values. Types without a natural +/// order compare as equal, so the stable sort leaves their items in their original relative positions. +pub trait ElementOrder { + fn element_order(&self, _other: &Self) -> Ordering { + Ordering::Equal + } +} +impl ElementOrder for String { + fn element_order(&self, other: &Self) -> Ordering { + self.cmp(other) + } +} +impl ElementOrder for bool { + fn element_order(&self, other: &Self) -> Ordering { + self.cmp(other) + } +} +impl ElementOrder for f32 { + fn element_order(&self, other: &Self) -> Ordering { + self.total_cmp(other) + } +} +impl ElementOrder for f64 { + fn element_order(&self, other: &Self) -> Ordering { + self.total_cmp(other) + } +} +impl ElementOrder for u32 { + fn element_order(&self, other: &Self) -> Ordering { + self.cmp(other) + } +} +impl ElementOrder for u64 { + fn element_order(&self, other: &Self) -> Ordering { + self.cmp(other) + } +} +impl ElementOrder for DVec2 {} +impl ElementOrder for DAffine2 {} +impl ElementOrder for Vector {} +impl ElementOrder for Graphic<'_> {} +impl ElementOrder for Raster {} +impl ElementOrder for Raster {} +impl ElementOrder for Color {} +impl ElementOrder for Gradient {} +impl ElementOrder for Artboard<'_> {} + +/// Reorders a list's items from smallest to largest, either by each item's own value or by a parallel list of sortable values in the *Sort Order* input. The sort is stable, so items with the same sort order retain their relative positions. +#[node_macro::node(category("General"))] +fn sort( + _: impl Ctx, + /// The list of data to reorder. + #[implementations( + List, List, List, List, List, List, List, List, List, List, List>, List>, List, List, List, + List, List, List, List, List, List, List, List, List, List, List>, List>, List, List, List, + List, List, List, List, List, List, List, List, List, List, List>, List>, List, List, List, + )] + list: List, + /// The optional list of orderable values, corresponding item-to-item with the input list, to sort by instead of the items' own values. + #[expose] + #[implementations( + List, List, List, List, List, List, List, List, List, List, List, List, List, List, List, + List, List, List, List, List, List, List, List, List, List, List, List, List, List, List, + List, List, List, List, List, List, List, List, List, List, List, List, List, List, List, + )] + sort_order: List, + /// Reverses the sorted list order, following descending order instead of ascending (numbers largest-to-smallest, strings Z-to-A, etc.). + reverse: bool, +) -> List { + // Order by the parallel keys when provided (repeating the last if there are fewer keys than items), otherwise by the element values themselves + let keys = sort_order.iter_element_values().as_slice(); + let elements: Vec<&T> = list.iter_element_values().collect(); + + let mut order: Vec = (0..list.len()).collect(); + order.sort_by(|&a, &b| { + let ordering = match keys { + [] => elements[a].element_order(elements[b]), + keys => keys[a.min(keys.len() - 1)].element_order(&keys[b.min(keys.len() - 1)]), + }; + if reverse { ordering.reverse() } else { ordering } + }); + + let mut result = List::new(); + for index in order { + if let Some(item) = list.clone_item(index) { + result.push(item); + } + } + + result +} diff --git a/node-graph/nodes/graphic/src/record.rs b/node-graph/nodes/graphic/src/record.rs index 1fbb222bd0..9629481d0f 100644 --- a/node-graph/nodes/graphic/src/record.rs +++ b/node-graph/nodes/graphic/src/record.rs @@ -11,7 +11,7 @@ use glam::DAffine2; use graphic_types::Vector; use graphic_types::graphic::Graphic; use raster_types::{CPU, Raster}; -use vector_types::{GradientStop, GradientStops}; +use vector_types::{GradientStop, Gradient}; /// Whether the walk can descend into a group: the run holds `Graphic` /// elements. @@ -39,7 +39,7 @@ pub(crate) fn group_locate<'e>(group: &core_types::record::Group<'e>, transform: /// itself otherwise. pub(crate) fn leaf_count(graphic: &Graphic, fully_flatten: bool, depth: usize) -> usize { match graphic { - Graphic::Graphic(children) if fully_flatten || depth == 0 => (0..children.len()) + Graphic::GraphicList(children) if fully_flatten || depth == 0 => (0..children.len()) .map(|index| children.element(index).map_or(0, |child| leaf_count(child, fully_flatten, depth + 1))) .sum(), Graphic::Group(group) if (fully_flatten || depth == 0) && group_expands(group) => group_leaf_count(group, fully_flatten, depth), @@ -51,7 +51,7 @@ pub(crate) fn leaf_count(graphic: &Graphic, fully_flatten: bool, depth: usize) - /// along its path composed onto `transform`. pub(crate) fn locate<'e>(graphic: &Graphic<'e>, transform: DAffine2, fully_flatten: bool, depth: usize, remaining: &mut usize) -> Option<(Graphic<'e>, DAffine2)> { match graphic { - Graphic::Graphic(children) if fully_flatten || depth == 0 => (0..children.len()).find_map(|index| { + Graphic::GraphicList(children) if fully_flatten || depth == 0 => (0..children.len()).find_map(|index| { let child = children.element(index)?; let child_transform: DAffine2 = children.attribute_cloned_or_default(ATTR_TRANSFORM, index); locate(child, transform * child_transform, fully_flatten, depth + 1, remaining) @@ -113,12 +113,12 @@ fn wrap_extent(_content: ListIn<'_, Graphic>, _level: LevelIn) -> GPoll /// Rank-model colors-to-gradient: the color level folds into one gradient /// with evenly spaced stops. #[node_macro::node(category("Test"))] -fn to_gradient(_: impl Ctx, colors: IList) -> GradientStops { +fn to_gradient(_: impl Ctx, colors: IList) -> Gradient { let stop = |position: f64, color: Color| GradientStop { position, midpoint: 0.5, color }; match colors.len() { - 0 => GradientStops::new(vec![stop(0., Color::BLACK), stop(1., Color::BLACK)]), - 1 => GradientStops::new(vec![stop(0., colors.get(0)), stop(1., colors.get(0))]), - total => GradientStops::new((0..total).map(|index| stop(index as f64 / (total - 1) as f64, colors.get(index)))), + 0 => Gradient::new(vec![stop(0., Color::BLACK), stop(1., Color::BLACK)]), + 1 => Gradient::new(vec![stop(0., colors.get(0)), stop(1., colors.get(0))]), + total => Gradient::new((0..total).map(|index| stop(index as f64 / (total - 1) as f64, colors.get(index)))), } } @@ -135,7 +135,7 @@ pub(crate) fn vararg_row(content: core_types #[node_macro::node(category("Test"))] fn map( ctx: impl Ctx + DeriveCtx + ExtractIndex + InjectIndex + Copy, - #[implementations(Graphic, Vector, Raster, Color, GradientStops, String)] content: IList, + #[implementations(Graphic, Vector, Raster, Color, Gradient, String)] content: IList, mapped: impl Node, Output = IList>, ) -> Result>, Interrupt> { let mut remaining = ctx.index(); @@ -159,7 +159,7 @@ fn map( #[node_macro::node(category("Test"))] fn flat_map( ctx: impl Ctx + DeriveCtx + ExtractIndex + InjectIndex + Copy, - #[implementations(Graphic, Vector, Raster, Color, GradientStops, String)] content: IList, + #[implementations(Graphic, Vector, Raster, Color, Gradient, String)] content: IList, mapped: impl Node, Output = IList>, ) -> Result, Interrupt> { let mut remaining = ctx.index(); @@ -317,7 +317,7 @@ mod tests { list.push(Item::new_from_element(child)); list.set_attribute(ATTR_TRANSFORM, index, transform); } - Graphic::Graphic(list) + Graphic::GraphicList(list) } fn text_of<'a>(graphic: &'a Graphic<'_>) -> &'a str { @@ -636,7 +636,7 @@ mod tests { let GPoll::Final(record) = record::capture(&node, &ctx.promoted(&head, 2), &frames) else { panic!("expected a final record"); }; - let Graphic::Graphic(children) = record.element::() else { + let Graphic::GraphicList(children) = record.element::() else { panic!("lane 2 keeps the subgroup element"); }; assert_eq!(children.len(), 1); @@ -809,14 +809,14 @@ mod tests { let ctx = ContextImpl::root(&scope); let layout = Layout::default().with_writes(1, record::element_write_hashed::(), &[]); - let out = Layout::default().with_writes(0, record::element_write_hashed::(), &[]); + let out = Layout::default().with_writes(0, record::element_write_hashed::(), &[]); let build = |colors: Vec| install_flip(ToGradientNode::new(RecordSource::new(ColorSource { layout: layout.clone(), colors }, &layout, &layout), &layout), &out); let stops_of = |colors: Vec| { let node = build(colors); let GPoll::Final(record) = record::capture(&node, &ctx, &frames) else { panic!("expected a final record"); }; - record.element::() + record.element::() }; let three = stops_of(vec![Color::BLACK, Color::WHITE, Color::BLACK]); diff --git a/node-graph/nodes/gstd/src/lib.rs b/node-graph/nodes/gstd/src/lib.rs index 67dafe89db..1f48441bc3 100644 --- a/node-graph/nodes/gstd/src/lib.rs +++ b/node-graph/nodes/gstd/src/lib.rs @@ -12,7 +12,7 @@ pub use graphene_application_io as application_io; pub use graphene_core; pub use graphene_core::debug; pub use graphic_nodes; -pub use graphic_types::{Artboard, Graphic, Vector}; +pub use graphic_types::{Appearance, Artboard, Cover, CoverPlacement, Coverage, Graphic, Vector, stamp_coverage}; pub use math_nodes; pub use path_bool_nodes; pub use raster_nodes; @@ -32,7 +32,7 @@ pub mod vector { pub use vector_types::vector::algorithms; pub use vector_types::vector::click_target; pub use vector_types::vector::misc::HandleId; - pub use vector_types::vector::{PointId, RegionId, SegmentId, StrokeId}; + pub use vector_types::vector::{PointId, SegmentId}; pub use vector_types::vector::{deserialize_hashmap, serialize_hashmap, serialize_hashmap_as_sorted_object}; // Re-export HandleExt trait and NoHashBuilder @@ -53,12 +53,8 @@ pub mod artboard { pub use graphic_types::artboard::*; } -pub mod subpath { - pub use vector_types::subpath::*; -} - pub mod gradient { - pub use vector_types::{GradientStop, GradientStops}; + pub use vector_types::{Gradient, GradientStop}; } pub mod transform { @@ -71,10 +67,11 @@ pub mod repeat { } pub mod math { + pub use core_types::math::float_noise; pub use core_types::math::quad; pub mod math_ext { - pub use vector_types::{QuadExt, RectExt}; + pub use vector_types::QuadExt; } } diff --git a/node-graph/nodes/gstd/src/platform_application_io.rs b/node-graph/nodes/gstd/src/platform_application_io.rs index b78901ccc1..a81f750be6 100644 --- a/node-graph/nodes/gstd/src/platform_application_io.rs +++ b/node-graph/nodes/gstd/src/platform_application_io.rs @@ -33,7 +33,7 @@ use graphic_types::markers::EditorMergedLayers; use graphic_types::raster_types::Image; use graphic_types::raster_types::{CPU, Raster}; #[cfg(target_family = "wasm")] -use graphic_types::vector_types::gradient::GradientStops; +use graphic_types::vector_types::gradient::Gradient; #[cfg(target_family = "wasm")] use rendering::{Render, RenderParams, RenderSvgSegmentList, SvgRender}; use std::sync::Arc; @@ -212,7 +212,7 @@ async fn rasterize( List>, List, List, - List, + List, )] mut data: List, footprint: Footprint, @@ -282,12 +282,17 @@ pub fn editor_api(_: impl Ctx, #[scope("editor-api")] editor_api: Arc) -> SourceFuture> { let application_io = editor_api.application_io.clone(); Box::pin(async move { + // An older document can name a resource whose bytes are gone, so hand back an empty one and keep the document loading let Some(application_io) = application_io else { - return GPoll::error("ApplicationIo not available"); + log::error!("Resource {hash} is unavailable because the platform's application IO is missing"); + return GPoll::Final(Resource::empty()); }; match application_io.load_resource(hash).await { Some(resource) => GPoll::Final(resource), - None => GPoll::error("resource not found"), + None => { + log::error!("Resource {hash} was not found in storage"); + GPoll::Final(Resource::empty()) + } } }) } diff --git a/node-graph/nodes/gstd/src/render_background.rs b/node-graph/nodes/gstd/src/render_background.rs index ecac43f67d..c56085c47a 100644 --- a/node-graph/nodes/gstd/src/render_background.rs +++ b/node-graph/nodes/gstd/src/render_background.rs @@ -8,8 +8,7 @@ use graph_craft::document::value::{RenderOutput, RenderOutputType}; use graphic_types::raster_types::Texture; use rendering::{RenderParams, SvgRender, SvgRenderOutput}; use std::fmt::Write; -use wgpu::util::DeviceExt; -use wgpu_executor::{WgpuExecutor, WgpuPipeline, WgpuPipelineCache}; +use wgpu_executor::{Buffer, WgpuExecutor, WgpuPipeline, WgpuPipelineCache}; #[node_macro::node(category(""))] fn render_background(ctx: impl Ctx + ExtractFootprint + ExtractVarArgs, #[scope(composite_background_pipeline::IDENTIFIER)] pipeline: WgpuPipelineCache, data: RenderOutput) -> RenderOutput { @@ -352,10 +351,8 @@ impl WgpuPipeline for CompositeBackground { let foreground_view = foreground.create_view(&wgpu::TextureViewDescriptor::default()); let checker_draws = if backgrounds.is_empty() { - vec![( - 3, - self.create_checker_bind_group(device, CompositeUniforms::fullscreen(viewport_size, screen_to_document, checker_size_doc)), - )] + let uniforms = CompositeUniforms::fullscreen(viewport_size, screen_to_document, checker_size_doc).create_buffer(executor); + vec![(3, self.create_checker_bind_group(device, &uniforms), uniforms)] } else { backgrounds .iter() @@ -370,8 +367,8 @@ impl WgpuPipeline for CompositeBackground { return None; } - let uniforms = CompositeUniforms::rect(min, max, document_to_screen, viewport_size, checker_size_doc); - Some((6, self.create_checker_bind_group(device, uniforms))) + let uniforms = CompositeUniforms::rect(min, max, document_to_screen, viewport_size, checker_size_doc).create_buffer(executor); + Some((6, self.create_checker_bind_group(device, &uniforms), uniforms)) }) .collect() }; @@ -413,13 +410,13 @@ impl WgpuPipeline for CompositeBackground { if backgrounds.is_empty() { pass.set_pipeline(&self.checker_viewport_pipeline); - for (vertex_count, bind_group) in &checker_draws { + for (vertex_count, bind_group, _uniforms) in &checker_draws { pass.set_bind_group(0, bind_group, &[]); pass.draw(0..*vertex_count, 0..1); } } else { pass.set_pipeline(&self.checker_rect_pipeline); - for (vertex_count, bind_group) in &checker_draws { + for (vertex_count, bind_group, _uniforms) in &checker_draws { pass.set_bind_group(0, bind_group, &[]); pass.draw(0..*vertex_count, 0..1); } @@ -437,19 +434,13 @@ impl WgpuPipeline for CompositeBackground { } impl CompositeBackground { - fn create_checker_bind_group(&self, device: &wgpu::Device, uniforms: CompositeUniforms) -> wgpu::BindGroup { - let buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("background_checker_uniforms"), - contents: bytemuck::bytes_of(&uniforms), - usage: wgpu::BufferUsages::UNIFORM, - }); - + fn create_checker_bind_group(&self, device: &wgpu::Device, uniforms: &Buffer) -> wgpu::BindGroup { device.create_bind_group(&wgpu::BindGroupDescriptor { label: Some("background_checker_bind_group"), layout: &self.checker_bind_group_layout, entries: &[wgpu::BindGroupEntry { binding: 0, - resource: buffer.as_entire_binding(), + resource: uniforms.as_entire_binding(), }], }) } @@ -491,4 +482,12 @@ impl CompositeUniforms { _pad: 0., } } + + fn create_buffer(&self, executor: &WgpuExecutor) -> Buffer { + executor.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("background_checker_uniforms"), + contents: bytemuck::bytes_of(self), + usage: wgpu::BufferUsages::UNIFORM, + }) + } } diff --git a/node-graph/nodes/gstd/src/render_cache.rs b/node-graph/nodes/gstd/src/render_cache.rs index 304c570e98..9e1e6a4586 100644 --- a/node-graph/nodes/gstd/src/render_cache.rs +++ b/node-graph/nodes/gstd/src/render_cache.rs @@ -43,7 +43,7 @@ pub struct CacheKey { pub for_mask: bool, pub thumbnail: bool, pub aligned_strokes: bool, - pub override_paint_order: bool, + pub stroke_below: bool, pub animation_time_ms: i64, pub real_time_ms: i64, pub pointer: [u8; 16], @@ -60,7 +60,7 @@ impl CacheKey { for_mask: bool, thumbnail: bool, aligned_strokes: bool, - override_paint_order: bool, + stroke_below: bool, animation_time: f64, real_time: f64, pointer: Option, @@ -85,7 +85,7 @@ impl CacheKey { for_mask, thumbnail, aligned_strokes, - override_paint_order, + stroke_below, animation_time_ms: (animation_time * 1000.).round() as i64, real_time_ms: (real_time * 1000.).round() as i64, pointer: pointer_bytes, @@ -360,7 +360,7 @@ pub fn render_output_cache( render_params.for_mask, render_params.thumbnail, render_params.aligned_strokes, - render_params.override_paint_order, + render_params.stroke_below, ctx.try_animation_time().unwrap_or(0.), ctx.try_real_time().unwrap_or(0.), ctx.try_pointer_position(), diff --git a/node-graph/nodes/gstd/src/render_node.rs b/node-graph/nodes/gstd/src/render_node.rs index c349e71f6b..9d5c309603 100644 --- a/node-graph/nodes/gstd/src/render_node.rs +++ b/node-graph/nodes/gstd/src/render_node.rs @@ -8,7 +8,7 @@ use graphic_types::raster_types::{CPU, Raster}; use graphic_types::{Artboard, Graphic, Vector}; use rendering::{Render, RenderMetadata, RenderOutputType as RenderOutputTypeRequest, RenderParams, SvgRender, SvgRenderOutput}; use std::sync::Arc; -use vector_types::GradientStops; +use vector_types::Gradient; use wgpu_executor::RenderContext; #[derive(Clone, dyn_any::DynAny)] @@ -25,7 +25,7 @@ pub struct RenderIntermediate { fn intermediate_of(data: &R, render_params: &RenderParams) -> RenderIntermediate { let footprint = Footprint::default(); let mut metadata = RenderMetadata::default(); - data.collect_metadata(&mut metadata, footprint, None); + data.collect_metadata(&mut metadata, footprint, None, None); match &render_params.render_output_type { RenderOutputTypeRequest::Vello => { let mut scene = vello::Scene::new(); @@ -60,7 +60,7 @@ fn render_intermediate List, Context -> List>, Context -> List, - Context -> List, + Context -> List, Context -> List, )] data: impl Node, Output = T>, @@ -80,7 +80,7 @@ fn render_intermediate( ctx: impl Ctx + ExtractVarArgs + ExtractIndex + InjectIndex + Copy, - #[implementations(Artboard, Graphic, Vector, Raster, Color, GradientStops, String)] data: IList, + #[implementations(Artboard, Graphic, Vector, Raster, Color, Gradient, String)] data: IList, ) -> Result where for<'a> core_types::record::RunView<'a, T>: Render, diff --git a/node-graph/nodes/gstd/src/text.rs b/node-graph/nodes/gstd/src/text.rs index 7d44390289..dde3234420 100644 --- a/node-graph/nodes/gstd/src/text.rs +++ b/node-graph/nodes/gstd/src/text.rs @@ -5,7 +5,7 @@ use graph_craft::application_io::resource::Resource; use graphic_types::Vector; pub use text_nodes::*; -/// Produces a styled `String[]` carrying all typographic attributes. +/// Produces a styled text string carrying all typographic attributes. /// /// Use the **Text to Vector** node to convert this into vector geometry if desired. #[node_macro::node(category("Text"))] @@ -15,15 +15,15 @@ fn text( /// The text content to be drawn. #[widget(ParsedWidgetOverride::Custom = "text_area")] #[default("Lorem ipsum")] - text: String, + text: Item, /// The loaded font file used to draw the text. The editor resolves the chosen typeface to these bytes via the resource system. #[widget(ParsedWidgetOverride::Custom = "text_font")] - font: Resource, + font: Item, /// The font size used to draw the text. #[unit(" px")] #[default(24.)] #[hard(1..)] - size: f64, + size: Item, /// The line height ratio, relative to the font size. Each line is drawn lower than its previous line by the distance of *Size* Γ— *Line Height*. /// /// 0 means all lines overlap. 1 means all lines are spaced by just the font size. 1.2 is a common default for readable text. 2 means double-spaced text. @@ -31,74 +31,87 @@ fn text( #[hard(0..)] #[step(0.1)] #[default(1.2)] - line_height: f64, + line_height: Item, /// Additional spacing, in pixels, added between each character. #[unit(" px")] #[step(0.1)] - letter_spacing: f64, + letter_spacing: Item, /// The angle of faux italic slant applied to each glyph. #[unit("Β°")] #[hard(-85..85)] - letter_tilt: f64, + letter_tilt: Item, /// Enables the maximum width constraint so lines can wrap. #[widget(ParsedWidgetOverride::Hidden)] - has_max_width: bool, + has_max_width: Item, /// The maximum width that the text block can occupy before wrapping to a new line. Otherwise, lines do not wrap. #[unit(" px")] #[hard(1..)] #[widget(ParsedWidgetOverride::Custom = "optional_f64")] - max_width: f64, + max_width: Item, /// Whether the *Max Height* property is enabled so that lines beyond it are not drawn. #[widget(ParsedWidgetOverride::Hidden)] - has_max_height: bool, + has_max_height: Item, /// The maximum height that the text block can occupy. Excess lines are not drawn. #[unit(" px")] #[hard(1..)] #[widget(ParsedWidgetOverride::Custom = "optional_f64")] - max_height: f64, + max_height: Item, /// The horizontal alignment of each line of text within its surrounding box. To have an effect on a single line of text, *Max Width* must be set. #[widget(ParsedWidgetOverride::Custom = "text_align")] - align: TextAlign, -) -> List { - let mut list = List::new_from_element(text); + align: Item, +) -> Item { + let text = text.into_element(); + let font = font.into_element(); + let (size, line_height, letter_spacing, letter_tilt) = (*size.element(), *line_height.element(), *letter_spacing.element(), *letter_tilt.element()); + let (has_max_width, max_width, has_max_height, max_height) = (*has_max_width.element(), *max_width.element(), *has_max_height.element(), *max_height.element()); + let align = align.into_element(); + + let mut item = Item::new_from_element(text); if font != Resource::default() { - list.set_attribute(ATTR_FONT, 0, font); + item.set_attribute(ATTR_FONT, font); } if (size - DEFAULT_FONT_SIZE).abs() > f64::EPSILON { - list.set_attribute(ATTR_FONT_SIZE, 0, size); + item.set_attribute(ATTR_FONT_SIZE, size); } if (line_height - DEFAULT_LINE_HEIGHT).abs() > f64::EPSILON { - list.set_attribute(ATTR_LINE_HEIGHT, 0, line_height); + item.set_attribute(ATTR_LINE_HEIGHT, line_height); } if letter_spacing != 0. { - list.set_attribute(ATTR_LETTER_SPACING, 0, letter_spacing); + item.set_attribute(ATTR_LETTER_SPACING, letter_spacing); } if letter_tilt != 0. { - list.set_attribute(ATTR_LETTER_TILT, 0, letter_tilt); + item.set_attribute(ATTR_LETTER_TILT, letter_tilt); } if has_max_width { - list.set_attribute(ATTR_MAX_WIDTH, 0, Some(max_width)); + item.set_attribute(ATTR_MAX_WIDTH, Some(max_width)); } if has_max_height { - list.set_attribute(ATTR_MAX_HEIGHT, 0, Some(max_height)); + item.set_attribute(ATTR_MAX_HEIGHT, Some(max_height)); } if align != TextAlign::default() { - list.set_attribute(ATTR_TEXT_ALIGN, 0, align); + item.set_attribute(ATTR_TEXT_ALIGN, align); } - list + item } -/// Converts a styled `String[]` into vector geometry. +/// Converts a styled text string into a vector compound path. #[node_macro::node(category("Text"), name("Text to Vector"))] fn text_to_vector( _: impl Ctx, - /// A styled list of text strings produced by the **Text** node (or any other `String[]` source). - #[implementations(List)] - strings: List, - /// Whether to split every letterform into its own vector item. Otherwise, a single vector compound path is produced. - separate_glyphs: bool, -) -> List { - shape_text_list(&strings, separate_glyphs) + /// A styled text string produced by the **Text** node (or any other string source). + string: Item, +) -> Item { + shape_text_item(&string, false).into_iter().next().unwrap_or_default() +} + +/// Splits a styled text string into a separate vector item for each of its glyphs (letterforms). +#[node_macro::node(category("Text"), name("Text to Vector Glyphs"))] +fn text_to_vector_glyphs( + _: impl Ctx, + /// A styled text string produced by the **Text** node (or any other string source). + string: Item, +) -> List { + shape_text_item(&string, true) } diff --git a/node-graph/nodes/math/src/lib.rs b/node-graph/nodes/math/src/lib.rs index 9d50bb87bd..5cf07a7635 100644 --- a/node-graph/nodes/math/src/lib.rs +++ b/node-graph/nodes/math/src/lib.rs @@ -8,7 +8,6 @@ use log::warn; use math_parser::ast; use math_parser::context::{EvalContext, NothingMap, ValueProvider}; use math_parser::value::{Number, Value}; -use num_traits::Pow; use rand::{Rng, SeedableRng}; use std::ops::{Add, Div, Mul, Rem, Sub}; use vector_types::GradientStops; @@ -41,17 +40,17 @@ fn math( #[implementations(f64, f32)] operand_a: T, /// A math expression that may incorporate "A" and/or "B", such as `sqrt(A + B) - B^2`. - #[default(A + B)] + #[default("A + B")] expression: String, /// The value of "B" when calculating the expression. #[implementations(f64, f32)] #[default(1.)] operand_b: T, ) -> T { - let (node, _unit) = match ast::Node::try_parse_from_str(&expression) { + let node = match ast::Node::try_parse_from_str(&expression) { Ok(expr) => expr, Err(e) => { - warn!("Invalid expression: `{expression}`\n{e:?}"); + warn!("Invalid expression: `{expression}`\n{e}"); return T::from(0.).unwrap(); } }; @@ -72,13 +71,15 @@ fn math( }; let Value::Number(num) = value; - match num { + let result = match num { Number::Real(val) => T::from(val).unwrap(), Number::Complex(c) => T::from(c.re).unwrap(), - } + }; + + result } -/// The addition operation (`+`) calculates the sum of two scalar numbers or vectors. +/// The addition operation (`+`) calculates the sum of two scalar numbers or vec2s. #[node_macro::node(category("Math: Arithmetic"))] fn add, B>( _: impl Ctx, @@ -92,7 +93,7 @@ fn add, B>( augend + addend } -/// The subtraction operation (`-`) calculates the difference between two scalar numbers or vectors. +/// The subtraction operation (`-`) calculates the difference between two scalar numbers or vec2s. #[node_macro::node(category("Math: Arithmetic"))] fn subtract, B>( _: impl Ctx, @@ -106,7 +107,7 @@ fn subtract, B>( minuend - subtrahend } -/// The multiplication operation (`Γ—`) calculates the product of two scalar numbers, vectors, or transforms. +/// The multiplication operation (`Γ—`) calculates the product of two scalar numbers, vec2s, or transforms. #[node_macro::node(category("Math: Arithmetic"))] fn multiply, B>( _: impl Ctx, @@ -121,11 +122,52 @@ fn multiply, B>( multiplier * multiplicand } -/// The division operation (`Γ·`) calculates the quotient of two scalar numbers or vectors. +pub trait SafeDivide { + type Output; + fn safe_divide(self, denominator: Rhs) -> Self::Output; +} +impl SafeDivide for f64 { + type Output = f64; + fn safe_divide(self, denominator: f64) -> f64 { + if denominator == 0. { 0. } else { self / denominator } + } +} +impl SafeDivide for f32 { + type Output = f32; + fn safe_divide(self, denominator: f32) -> f32 { + if denominator == 0. { 0. } else { self / denominator } + } +} +impl SafeDivide for u32 { + type Output = u32; + fn safe_divide(self, denominator: u32) -> u32 { + self.checked_div(denominator).unwrap_or(0) + } +} +impl SafeDivide for DVec2 { + type Output = DVec2; + fn safe_divide(self, denominator: DVec2) -> DVec2 { + DVec2::new(self.x.safe_divide(denominator.x), self.y.safe_divide(denominator.y)) + } +} +impl SafeDivide for DVec2 { + type Output = DVec2; + fn safe_divide(self, denominator: f64) -> DVec2 { + DVec2::new(self.x.safe_divide(denominator), self.y.safe_divide(denominator)) + } +} +impl SafeDivide for f64 { + type Output = DVec2; + fn safe_divide(self, denominator: DVec2) -> DVec2 { + DVec2::new(self.safe_divide(denominator.x), self.safe_divide(denominator.y)) + } +} + +/// The division operation (`Γ·`) calculates the quotient of two scalar numbers or vec2s. /// -/// Produces 0 if the denominator is 0. +/// Produces 0 for any division by 0. With vec2 inputs, this applies separately to the X and Y components. #[node_macro::node(category("Math: Arithmetic"))] -fn divide + Default + PartialEq, B: Default + PartialEq>( +fn divide, B>( _: impl Ctx, /// The left-hand side of the division operation. #[implementations(f64, f32, u32, DVec2, DVec2, f64)] @@ -134,30 +176,43 @@ fn divide + Default + PartialEq, B: Default + PartialEq>( #[default(1.)] #[implementations(f64, f32, u32, DVec2, f64, DVec2)] denominator: B, -) -> >::Output -where - >::Output: Default, -{ - if denominator == B::default() { - return >::Output::default(); +) -> >::Output { + numerator.safe_divide(denominator) +} + +trait Componentwise { + fn componentwise(self, f: impl Fn(f64) -> f64) -> Self; +} +impl Componentwise for f64 { + fn componentwise(self, f: impl Fn(f64) -> f64) -> Self { + f(self) + } +} +impl Componentwise for f32 { + fn componentwise(self, f: impl Fn(f64) -> f64) -> Self { + f(self as f64) as f32 + } +} +impl Componentwise for DVec2 { + fn componentwise(self, f: impl Fn(f64) -> f64) -> Self { + DVec2::new(f(self.x), f(self.y)) } - numerator / denominator } /// The reciprocal operation (`1/x`) calculates the multiplicative inverse of a number. /// -/// Produces 0 if the input is 0. +/// Produces 0 if the input is 0. With a vec2 input, this applies separately to the X and Y components. #[node_macro::node(category("Math: Arithmetic"))] -fn reciprocal( +fn reciprocal( _: impl Ctx, /// The number for which the reciprocal is calculated. - #[implementations(f64, f32)] + #[implementations(f64, f32, DVec2)] value: T, ) -> T { - if value == T::from(0.).unwrap() { T::from(0.).unwrap() } else { T::from(1.).unwrap() / value } + value.componentwise(|value| if value == 0. { 0. } else { 1. / value }) } -/// The modulo operation (`%`) calculates the remainder from the division of two scalar numbers or vectors. +/// The modulo operation (`%`) calculates the remainder from the division of two scalar numbers or vec2s. /// /// The sign of the result shares the sign of the numerator unless *Always Positive* is enabled. #[node_macro::node(category("Math: Arithmetic"))] @@ -174,111 +229,258 @@ fn modulo>>, B: Copy #[default(true)] always_positive: bool, ) -> >::Output { - if always_positive { (numerator % modulus + modulus) % modulus } else { numerator % modulus } + let (modulus, always_positive) = (modulus, always_positive); + + let result = if always_positive { (numerator % modulus + modulus) % modulus } else { numerator % modulus }; + result +} + +pub trait Exponent { + type Output; + fn power(self, power: Rhs) -> Self::Output; +} +impl Exponent for f64 { + type Output = f64; + fn power(self, power: f64) -> f64 { + self.powf(power) + } +} +impl Exponent for f32 { + type Output = f32; + fn power(self, power: f32) -> f32 { + self.powf(power) + } +} +impl Exponent for u32 { + type Output = u32; + fn power(self, power: u32) -> u32 { + self.pow(power) + } +} +impl Exponent for DVec2 { + type Output = DVec2; + fn power(self, power: DVec2) -> DVec2 { + DVec2::new(self.x.powf(power.x), self.y.powf(power.y)) + } +} +impl Exponent for DVec2 { + type Output = DVec2; + fn power(self, power: f64) -> DVec2 { + DVec2::new(self.x.powf(power), self.y.powf(power)) + } +} +impl Exponent for f64 { + type Output = DVec2; + fn power(self, power: DVec2) -> DVec2 { + DVec2::new(self.powf(power.x), self.powf(power.y)) + } } /// The exponent operation (`^`) calculates the result of raising a number to a power. +/// +/// With vec2 inputs, this applies separately to the X and Y components. #[node_macro::node(category("Math: Arithmetic"))] -fn exponent>( +fn exponent, B>( _: impl Ctx, /// The base number that is raised to the power. - #[implementations(f64, f32, u32)] - base: T, + #[implementations(f64, f32, u32, DVec2, DVec2, f64)] + base: A, /// The power to which the base number is raised. - #[implementations(f64, f32, u32)] + #[implementations(f64, f32, u32, DVec2, f64, DVec2)] #[default(2.)] - power: T, -) -> >::Output { - base.pow(power) + power: B, +) -> >::Output { + base.power(power) +} + +fn scalar_nth_root(radicand: f64, degree: f64) -> f64 { + if degree == 2. { + radicand.sqrt() + } else if degree == 3. { + radicand.cbrt() + } else if degree <= 0. { + 0. + } else { + radicand.powf(1. / degree) + } +} + +pub trait NthRoot { + type Output; + fn nth_root(self, degree: Degree) -> Self::Output; +} +impl NthRoot for f64 { + type Output = f64; + fn nth_root(self, degree: f64) -> f64 { + scalar_nth_root(self, degree) + } +} +impl NthRoot for f32 { + type Output = f32; + fn nth_root(self, degree: f32) -> f32 { + scalar_nth_root(self as f64, degree as f64) as f32 + } +} +impl NthRoot for DVec2 { + type Output = DVec2; + fn nth_root(self, degree: DVec2) -> DVec2 { + DVec2::new(scalar_nth_root(self.x, degree.x), scalar_nth_root(self.y, degree.y)) + } +} +impl NthRoot for DVec2 { + type Output = DVec2; + fn nth_root(self, degree: f64) -> DVec2 { + DVec2::new(scalar_nth_root(self.x, degree), scalar_nth_root(self.y, degree)) + } +} +impl NthRoot for f64 { + type Output = DVec2; + fn nth_root(self, degree: DVec2) -> DVec2 { + DVec2::new(scalar_nth_root(self, degree.x), scalar_nth_root(self, degree.y)) + } } /// The `n`th root operation (`√`) calculates the inverse of exponentiation. Square root inverts squaring, cube root inverts cubing, and so on. /// -/// This is equivalent to raising the number to the power of `1/n`. +/// This is equivalent to raising the number to the power of `1/n`. With vec2 inputs, this applies separately to the X and Y components. #[node_macro::node(category("Math: Arithmetic"))] -fn root( +fn root, B>( _: impl Ctx, /// The number inside the radical for which the `n`th root is calculated. #[default(2.)] - #[implementations(f64, f32)] - radicand: T, + #[implementations(f64, f32, DVec2, DVec2, f64)] + radicand: A, /// The degree of the root to be calculated. Square root is 2, cube root is 3, and so on. /// Degrees 0 or less are invalid and will produce an output of 0. #[default(2.)] - #[implementations(f64, f32)] - degree: T, -) -> T { - if degree == T::from(2.).unwrap() { - radicand.sqrt() - } else if degree == T::from(3.).unwrap() { - radicand.cbrt() - } else if degree <= T::from(0.).unwrap() { - T::from(0.).unwrap() - } else { - radicand.powf(T::from(1.).unwrap() / degree) - } + #[implementations(f64, f32, f64, DVec2, DVec2)] + degree: B, +) -> >::Output { + radicand.nth_root(degree) } -/// The logarithmic function (`log`) calculates the logarithm of a number with a specified base. If the natural logarithm function (`ln`) is desired, set the base to "e". -#[node_macro::node(category("Math: Arithmetic"))] -fn logarithm( - _: impl Ctx, - /// The number for which the logarithm is calculated. - #[implementations(f64, f32)] - value: T, - /// The base of the logarithm, such as 2 (binary), 10 (decimal), and e (natural logarithm). - #[default(2.)] - #[implementations(f64, f32)] - base: T, -) -> T { - if base == T::from(2.).unwrap() { +fn scalar_logarithm(value: f64, base: f64) -> f64 { + if base == 2. { value.log2() - } else if base == T::from(10.).unwrap() { + } else if base == 10. { value.log10() - } else if base - T::from(std::f64::consts::E).unwrap() < T::epsilon() * T::from(1e6).unwrap() { + } else if (base - std::f64::consts::E).abs() < f64::EPSILON * 1e6 { value.ln() } else { value.log(base) } } +pub trait Logarithm { + type Output; + fn logarithm(self, base: Base) -> Self::Output; +} +impl Logarithm for f64 { + type Output = f64; + fn logarithm(self, base: f64) -> f64 { + scalar_logarithm(self, base) + } +} +impl Logarithm for f32 { + type Output = f32; + fn logarithm(self, base: f32) -> f32 { + // The f32 representation of e widens inexactly, so match it against e at f32 precision and substitute the exact f64 e + let base = if (base - std::f32::consts::E).abs() < f32::EPSILON * 10. { + std::f64::consts::E + } else { + base as f64 + }; + scalar_logarithm(self as f64, base) as f32 + } +} +impl Logarithm for DVec2 { + type Output = DVec2; + fn logarithm(self, base: DVec2) -> DVec2 { + DVec2::new(scalar_logarithm(self.x, base.x), scalar_logarithm(self.y, base.y)) + } +} +impl Logarithm for DVec2 { + type Output = DVec2; + fn logarithm(self, base: f64) -> DVec2 { + DVec2::new(scalar_logarithm(self.x, base), scalar_logarithm(self.y, base)) + } +} +impl Logarithm for f64 { + type Output = DVec2; + fn logarithm(self, base: DVec2) -> DVec2 { + DVec2::new(scalar_logarithm(self, base.x), scalar_logarithm(self, base.y)) + } +} + +/// The logarithmic function (`log`) calculates the logarithm of a number with a specified base. If the natural logarithm function (`ln`) is desired, set the base to "e". +/// +/// With vec2 inputs, this applies separately to the X and Y components. +#[node_macro::node(category("Math: Arithmetic"))] +fn logarithm, B>( + _: impl Ctx, + /// The number for which the logarithm is calculated. + #[implementations(f64, f32, DVec2, DVec2, f64)] + value: A, + /// The base of the logarithm, such as 2 (binary), 10 (decimal), and e (natural logarithm). + #[default(2.)] + #[implementations(f64, f32, f64, DVec2, DVec2)] + base: B, +) -> >::Output { + value.logarithm(base) +} + /// The sine trigonometric function (`sin`) calculates the ratio of the angle's opposite side length to its hypotenuse length. +/// +/// With a vec2 input, this applies separately to the X and Y components. #[node_macro::node(category("Math: Trig"))] -fn sine( +fn sine( _: impl Ctx, /// The given angle. - #[implementations(f64, f32)] + #[implementations(f64, f32, DVec2)] theta: T, /// Whether the given angle should be interpreted as radians instead of degrees. radians: bool, ) -> T { - if radians { theta.sin() } else { theta.to_radians().sin() } + let radians = radians; + + let result = theta.componentwise(|theta| if radians { theta.sin() } else { theta.to_radians().sin() }); + result } /// The cosine trigonometric function (`cos`) calculates the ratio of the angle's adjacent side length to its hypotenuse length. +/// +/// With a vec2 input, this applies separately to the X and Y components. #[node_macro::node(category("Math: Trig"))] -fn cosine( +fn cosine( _: impl Ctx, /// The given angle. - #[implementations(f64, f32)] + #[implementations(f64, f32, DVec2)] theta: T, /// Whether the given angle should be interpreted as radians instead of degrees. radians: bool, ) -> T { - if radians { theta.cos() } else { theta.to_radians().cos() } + let radians = radians; + + let result = theta.componentwise(|theta| if radians { theta.cos() } else { theta.to_radians().cos() }); + result } /// The tangent trigonometric function (`tan`) calculates the ratio of the angle's opposite side length to its adjacent side length. +/// +/// With a vec2 input, this applies separately to the X and Y components. #[node_macro::node(category("Math: Trig"))] -fn tangent( +fn tangent( _: impl Ctx, /// The given angle. - #[implementations(f64, f32)] + #[implementations(f64, f32, DVec2)] theta: T, /// Whether the given angle should be interpreted as radians instead of degrees. radians: bool, ) -> T { - if radians { theta.tan() } else { theta.to_radians().tan() } + let radians = radians; + + let result = theta.componentwise(|theta| if radians { theta.tan() } else { theta.to_radians().tan() }); + result } /// The inverse sine trigonometric function (`asin`) calculates the angle whose sine is the input value. @@ -292,7 +494,8 @@ fn sine_inverse( radians: bool, ) -> T { let angle = value.clamp(T::from(-1.).unwrap(), T::from(1.).unwrap()).asin(); - if radians { angle } else { angle.to_degrees() } + let result = if radians { angle } else { angle.to_degrees() }; + result } /// The inverse cosine trigonometric function (`acos`) calculates the angle whose cosine is the input value. @@ -306,7 +509,8 @@ fn cosine_inverse( radians: bool, ) -> T { let angle = value.clamp(T::from(-1.).unwrap(), T::from(1.).unwrap()).acos(); - if radians { angle } else { angle.to_degrees() } + let result = if radians { angle } else { angle.to_degrees() }; + result } /// The inverse tangent trigonometric function (`atan` or `atan2`, depending on input type) calculates: @@ -375,6 +579,8 @@ fn remap( /// Whether to constrain the result within the output range instead of extrapolating beyond its bounds. clamped: bool, ) -> U { + let (input_min, input_max, output_min, output_max) = (input_min, input_max, output_min, output_max); + let input_range = input_max - input_min; // Handle division by zero @@ -387,7 +593,7 @@ fn remap( let result = output_min + normalized * output_range; - if clamped { + let result = if clamped { // Handle both normal and inverted ranges, since we want to allow the user to use this node to also reverse a range. if output_min <= output_max { result.clamp(output_min, output_max) @@ -396,8 +602,62 @@ fn remap( } } else { result + }; + + result +} + +trait Lerp { + fn lerp(self, end: Self, factor: f64) -> Self; +} +impl Lerp for f64 { + fn lerp(self, end: Self, factor: f64) -> Self { + self * (1. - factor) + end * factor } } +impl Lerp for f32 { + fn lerp(self, end: Self, factor: f64) -> Self { + (self as f64 * (1. - factor) + end as f64 * factor) as f32 + } +} +impl Lerp for DVec2 { + fn lerp(self, end: Self, factor: f64) -> Self { + self * (1. - factor) + end * factor + } +} + +/// Linearly interpolates between the start and end values, where a factor of 0 gives the start value, 1 gives the end value, and 0.5 gives their midpoint. +/// +/// With vec2 inputs, this traces the straight line path between the two points. +#[node_macro::node(category("Math: Numeric"))] +fn lerp( + _: impl Ctx, + /// The value produced when the factor is 0. + #[implementations(f64, f32, DVec2)] + start: T, + /// The value produced when the factor is 1. + #[default(1.)] + #[implementations(f64, f32, DVec2)] + end: T, + /// The mix between the start (at 0) and end (at 1) values. + #[default(0.5)] + factor: f64, + /// Whether to constrain the factor within 0 to 1, preventing extrapolation beyond the start and end values. + #[default(true)] + clamped: bool, +) -> T { + let factor = if clamped { factor.clamp(0., 1.) } else { factor }; + + // Exact endpoint factors pass the endpoint through untouched, since the unused operand would otherwise contaminate the weighted sum (NaN or infinity times 0 is NaN) + let result = if factor == 0. { + start + } else if factor == 1. { + end + } else { + start.lerp(end, factor) + }; + result +} /// The random function (`rand`) converts a seed into a random number within the specified range, inclusive of the minimum and exclusive of the maximum. The minimum and maximum values are automatically swapped if they are reversed. #[node_macro::node(category("Math: Numeric"))] @@ -414,62 +674,69 @@ fn random( ) -> f64 { let mut rng = rand::rngs::StdRng::seed_from_u64(seed); let result = rng.random::(); + let (min, max) = (min, max); let (min, max) = if min < max { (min, max) } else { (max, min) }; - result * (max - min) + min + (result * (max - min) + min) } // TODO: Test that these are no longer needed in all circumstances, then remove them and add a migration to convert these into Passthrough nodes. Note: these act more as type annotations than as identity functions. /// Convert a number to an integer of the type u32, which may be the required type for certain node inputs. -#[node_macro::node(name("As u32"), category("Debug"))] +#[node_macro::node(name("As u32"), category("Type Assertion"))] fn as_u32(_: impl Ctx, value: u32) -> u32 { value } // TODO: Test that these are no longer needed in all circumstances, then remove them and add a migration to convert these into Passthrough nodes. Note: these act more as type annotations than as identity functions. /// Convert a number to an integer of the type u64, which may be the required type for certain node inputs. -#[node_macro::node(name("As u64"), category("Debug"))] +#[node_macro::node(name("As u64"), category("Type Assertion"))] fn as_u64(_: impl Ctx, value: u64) -> u64 { value } // TODO: Test that these are no longer needed in all circumstances, then remove them and add a migration to convert these into Passthrough nodes. Note: these act more as type annotations than as identity functions. /// Convert an integer to a decimal number of the type f64, which may be the required type for certain node inputs. -#[node_macro::node(name("As f64"), category("Debug"))] +#[node_macro::node(name("As f64"), category("Type Assertion"))] fn as_f64(_: impl Ctx, value: f64) -> f64 { value } /// The rounding function (`round`) maps an input value to its nearest whole number. Halfway values are rounded away from zero. +/// +/// With a vec2 input, this applies separately to the X and Y components. #[node_macro::node(category("Math: Numeric"))] -fn round( +fn round( _: impl Ctx, /// The number to be rounded to the nearest whole number. - #[implementations(f64, f32)] + #[implementations(f64, f32, DVec2)] value: T, ) -> T { - value.round() + value.componentwise(f64::round) } /// The floor function (`floor`) rounds down an input value to the nearest whole number, unless the input number is already whole. +/// +/// With a vec2 input, this applies separately to the X and Y components. #[node_macro::node(category("Math: Numeric"))] -fn floor( +fn floor( _: impl Ctx, /// The number to be rounded down. - #[implementations(f64, f32)] + #[implementations(f64, f32, DVec2)] value: T, ) -> T { - value.floor() + value.componentwise(f64::floor) } /// The ceiling function (`ceil`) rounds up an input value to the nearest whole number, unless the input number is already whole. +/// +/// With a vec2 input, this applies separately to the X and Y components. #[node_macro::node(category("Math: Numeric"))] -fn ceiling( +fn ceiling( _: impl Ctx, /// The number to be rounded up. - #[implementations(f64, f32)] + #[implementations(f64, f32, DVec2)] value: T, ) -> T { - value.ceil() + value.componentwise(f64::ceil) } trait AbsoluteValue { @@ -502,6 +769,8 @@ impl AbsoluteValue for i64 { } /// The absolute value function (`abs`) removes the negative sign from an input value, if present. +/// +/// With a vec2 input, this applies separately to the X and Y components. For the overall length of a vec2, see the "Magnitude" node instead. #[node_macro::node(category("Math: Numeric"))] fn absolute_value( _: impl Ctx, @@ -512,57 +781,153 @@ fn absolute_value( value.abs() } -/// The minimum function (`min`) picks the smaller of two numbers. +/// The sign function (`sign`) reports whether an input value is positive (1), negative (-1), or zero (0). +/// +/// With a vec2 input, this applies separately to the X and Y components. #[node_macro::node(category("Math: Numeric"))] -fn min( +fn sign( + _: impl Ctx, + /// The number whose sign is checked. + #[implementations(f64, f32, DVec2)] + value: T, +) -> T { + let result = value.componentwise(|value| { + if value > 0. { + 1. + } else if value < 0. { + -1. + } else { + 0. + } + }); + result +} + +pub trait MinMax { + type Output; + fn minimum(self, other: Rhs) -> Self::Output; + fn maximum(self, other: Rhs) -> Self::Output; +} +impl MinMax for f64 { + type Output = f64; + fn minimum(self, other: f64) -> f64 { + if self < other { self } else { other } + } + fn maximum(self, other: f64) -> f64 { + if self > other { self } else { other } + } +} +impl MinMax for f32 { + type Output = f32; + fn minimum(self, other: f32) -> f32 { + if self < other { self } else { other } + } + fn maximum(self, other: f32) -> f32 { + if self > other { self } else { other } + } +} +impl MinMax for u32 { + type Output = u32; + fn minimum(self, other: u32) -> u32 { + if self < other { self } else { other } + } + fn maximum(self, other: u32) -> u32 { + if self > other { self } else { other } + } +} +impl MinMax for String { + type Output = String; + fn minimum(self, other: Self) -> String { + if self < other { self } else { other } + } + fn maximum(self, other: Self) -> String { + if self > other { self } else { other } + } +} +impl MinMax for DVec2 { + type Output = DVec2; + fn minimum(self, other: DVec2) -> DVec2 { + self.min(other) + } + fn maximum(self, other: DVec2) -> DVec2 { + self.max(other) + } +} +impl MinMax for DVec2 { + type Output = DVec2; + fn minimum(self, other: f64) -> DVec2 { + self.min(DVec2::splat(other)) + } + fn maximum(self, other: f64) -> DVec2 { + self.max(DVec2::splat(other)) + } +} +impl MinMax for f64 { + type Output = DVec2; + fn minimum(self, other: DVec2) -> DVec2 { + DVec2::splat(self).min(other) + } + fn maximum(self, other: DVec2) -> DVec2 { + DVec2::splat(self).max(other) + } +} + +/// The minimum function (`min`) picks the smaller of two numbers. +/// +/// With vec2 inputs, this applies separately to the X and Y components. +#[node_macro::node(category("Math: Numeric"))] +fn min, B>( _: impl Ctx, /// One of the two numbers, of which the lesser is returned. - #[implementations(f64, f32, u32, &str)] - value: T, + #[implementations(f64, f32, u32, String, DVec2, DVec2, f64)] + value: A, /// The other of the two numbers, of which the lesser is returned. - #[implementations(f64, f32, u32, &str)] - other_value: T, -) -> T { - if value < other_value { value } else { other_value } + #[implementations(f64, f32, u32, String, DVec2, f64, DVec2)] + other_value: B, +) -> >::Output { + value.minimum(other_value) } /// The maximum function (`max`) picks the larger of two numbers. +/// +/// With vec2 inputs, this applies separately to the X and Y components. #[node_macro::node(category("Math: Numeric"))] -fn max( +fn max, B>( _: impl Ctx, /// One of the two numbers, of which the greater is returned. - #[implementations(f64, f32, u32, &str)] - value: T, + #[implementations(f64, f32, u32, String, DVec2, DVec2, f64)] + value: A, /// The other of the two numbers, of which the greater is returned. - #[implementations(f64, f32, u32, &str)] - other_value: T, -) -> T { - if value > other_value { value } else { other_value } + #[implementations(f64, f32, u32, String, DVec2, f64, DVec2)] + other_value: B, +) -> >::Output { + value.maximum(other_value) } /// The clamp function (`clamp`) restricts a number to a specified range between a minimum and maximum value. The minimum and maximum values are automatically swapped if they are reversed. +/// +/// With vec2 inputs, this applies separately to the X and Y components. #[node_macro::node(category("Math: Numeric"))] -fn clamp( +fn clamp, B: MinMax + Clone>( _: impl Ctx, /// The number to be clamped, which is restricted to the range between the minimum and maximum values. - #[implementations(f64, f32, u32, &str)] - value: T, + #[implementations(f64, f32, u32, String, DVec2, DVec2, f64)] + value: A, /// The left (smaller) side of the range. The output is never less than this number. - #[implementations(f64, f32, u32, &str)] - min: T, + #[implementations(f64, f32, u32, String, DVec2, f64, DVec2)] + min: B, /// The right (greater) side of the range. The output is never greater than this number. - #[implementations(f64, f32, u32, &str)] + #[implementations(f64, f32, u32, String, DVec2, f64, DVec2)] #[default(1)] - max: T, -) -> T { - let (min, max) = if min < max { (min, max) } else { (max, min) }; - if value < min { - min - } else if value > max { - max - } else { - value - } + max: B, +) -> >::Output +where + >::Output: MinMax>::Output>, +{ + let (min, max) = (min, max); + + let (min, max) = (min.clone().minimum(max.clone()), min.maximum(max)); + value.maximum(min).minimum(max) } /// The greatest common divisor (GCD) calculates the largest positive integer that divides both of the two input numbers without leaving a remainder. @@ -576,13 +941,17 @@ fn greatest_common_divisor T { - if value == T::zero() { - return other_value; - } - if other_value == T::zero() { - return value; - } - binary_gcd(value, other_value) + let other_value = other_value; + + let result = if value == T::zero() { + other_value + } else if other_value == T::zero() { + value + } else { + binary_gcd(value, other_value) + }; + + result } /// The least common multiple (LCM) calculates the smallest positive integer that is a multiple of both of the two input numbers. @@ -639,6 +1008,45 @@ fn binary_gcd + std::ops: a << shift } +/// Adds together all the numbers in the input list, producing their total. +#[node_macro::node(category("Math: Numeric"))] +fn sum(_: impl Ctx, values: List) -> f64 { + (values.iter_element_values().sum()) +} + +/// Averages all the numbers in the input list. An empty list gives 0. +#[node_macro::node(category("Math: Numeric"))] +fn average(_: impl Ctx, values: List) -> f64 { + let count = values.len(); + let average = if count == 0 { 0. } else { values.iter_element_values().sum::() / count as f64 }; + + (average) +} + +/// Gives the smallest number in the input list. An empty list gives 0. +#[node_macro::node(category("Math: Numeric"))] +fn minimum(_: impl Ctx, values: List) -> f64 { + (values.iter_element_values().copied().reduce(f64::min).unwrap_or_default()) +} + +/// Gives the largest number in the input list. An empty list gives 0. +#[node_macro::node(category("Math: Numeric"))] +fn maximum(_: impl Ctx, values: List) -> f64 { + (values.iter_element_values().copied().reduce(f64::max).unwrap_or_default()) +} + +/// Outputs true if at least one value in the input list is true. An empty list gives false. +#[node_macro::node(category("Math: Logic"))] +fn any(_: impl Ctx, values: List) -> bool { + (values.iter_element_values().any(|&value| value)) +} + +/// Outputs true only if every value in the input list is true. An empty list gives true. +#[node_macro::node(category("Math: Logic"))] +fn all(_: impl Ctx, values: List) -> bool { + (values.iter_element_values().all(|&value| value)) +} + /// The less-than operation (`<`) compares two values and returns true if the first value is less than the second, or false if it is not. /// If enabled with *Or Equal*, the less-than-or-equal operation (`<=`) is used instead. #[node_macro::node(category("Math: Logic"))] @@ -653,7 +1061,10 @@ fn less_than>( /// Uses the less-than-or-equal operation (`<=`) instead of the less-than operation (`<`). or_equal: bool, ) -> bool { - if or_equal { value <= other_value } else { value < other_value } + let other_value = other_value; + + let result = if or_equal { value <= other_value } else { value < other_value }; + result } /// The greater-than operation (`>`) compares two values and returns true if the first value is greater than the second, or false if it is not. @@ -670,7 +1081,10 @@ fn greater_than>( /// Uses the greater-than-or-equal operation (`>=`) instead of the greater-than operation (`>`). or_equal: bool, ) -> bool { - if or_equal { value >= other_value } else { value > other_value } + let other_value = other_value; + + let result = if or_equal { value >= other_value } else { value > other_value }; + result } /// The equality operation (`==`, `XNOR`) compares two values and returns true if they are equal, or false if they are not. @@ -678,13 +1092,15 @@ fn greater_than>( fn equals>( _: impl Ctx, /// One of the two values to compare for equality. - #[implementations(f64, f32, u32, DVec2, bool, &str, String)] + #[implementations(f64, f32, u32, DVec2, bool, String)] value: T, /// The other of the two values to compare for equality. - #[implementations(f64, f32, u32, DVec2, bool, &str, String)] + #[implementations(f64, f32, u32, DVec2, bool, String)] other_value: T, ) -> bool { - other_value == value + let value = value; + + (other_value == value) } /// The inequality operation (`!=`, `XOR`) compares two values and returns true if they are not equal, or false if they are. @@ -692,13 +1108,15 @@ fn equals>( fn not_equals>( _: impl Ctx, /// One of the two values to compare for inequality. - #[implementations(f64, f32, u32, DVec2, bool, &str)] + #[implementations(f64, f32, u32, DVec2, bool, String)] value: T, /// The other of the two values to compare for inequality. - #[implementations(f64, f32, u32, DVec2, bool, &str)] + #[implementations(f64, f32, u32, DVec2, bool, String)] other_value: T, ) -> bool { - other_value != value + let value = value; + + (other_value != value) } /// The logical OR operation (`||`) returns true if either of the two inputs are true, or false if both are false. @@ -761,13 +1179,13 @@ fn percentage_value(_: impl Ctx, _primary: (), percentage: Percentage) -> f64 { percentage } -/// Constructs a two-dimensional vector value which may be set to any XY pair. +/// Constructs a vec2 value, a two-dimensional quantity which may be set to any XY pair. #[node_macro::node(category("Value"), name("Vec2 Value"))] -fn vec2_value(_: impl Ctx, _primary: (), x: f64, y: f64) -> DVec2 { - DVec2::new(x, y) +fn vec2_value(_: impl Ctx, _primary: (), #[name("Vec2")] vec2: DVec2) -> DVec2 { + vec2 } -/// Constructs a color value which may be set to any color, or no color. +/// Constructs a color value which may be set to any color. #[node_macro::node(category("Value"))] fn color_value(_: impl Ctx, _primary: (), #[default(Color::BLACK)] color: Color) -> Color { color @@ -807,7 +1225,7 @@ fn hsla_to_color(_: impl Ctx, _primary: (), hue: Fraction, #[default(1.)] satura Color::from_hsla(hue, saturation, lightness, alpha) } -/// Constructs a color value from a CSS color string. Accepts hex (`#RRGGBB`, `#RRGGBBAA`, plus bare and shorthand variants), CSS named colors (like `red`), and functional notations (`rgb(...)`, `hsl(...)`, etc.). Invalid inputs produce no color. +/// Constructs a color value from a CSS color string. Accepts hex (`#RRGGBB`, `#RRGGBBAA`, plus bare and shorthand variants), CSS named colors (like `red`), and functional notations (`rgb(...)`, `hsl(...)`, etc.). Invalid inputs produce a transparent color. #[node_macro::node(category("Color"), name("Hex to Color"))] fn hex_to_color(ctx: impl Ctx + ExtractIndex + InjectIndex + Copy, hex_code: String) -> Result, Interrupt> { // An invalid input serves an empty level: no color @@ -850,44 +1268,95 @@ fn sample_gradient(ctx: impl Ctx + ExtractIndex + InjectIndex + Copy, _primary: /// Constructs a footprint value which may be set to any transformation of a unit square describing a render area, and a render resolution at least 1x1 integer pixels. #[node_macro::node(category("Value"))] fn footprint_value(_: impl Ctx, _primary: (), transform: DAffine2, #[default(100., 100.)] resolution: PixelSize) -> Footprint { - Footprint { - transform, + (Footprint { + transform: transform, resolution: resolution.max(DVec2::ONE).as_uvec2(), ..Default::default() - } + }) +} + +/// Composes a vec2 from its X and Y components. +/// +/// The inverse of this node is **Split Vec2**, which decomposes a vec2 back into its X and Y components. +#[node_macro::node(category("Math: Vec2"), name("Combine Vec2"))] +fn combine_vec2( + _: impl Ctx, + _primary: (), + /// The X component of the vec2. + #[expose] + x: f64, + /// The Y component of the vec2. + #[expose] + y: f64, +) -> DVec2 { + (DVec2::new(x, y)) } /// The dot product operation (`Β·`) calculates the degree of similarity of a vec2 pair based on their angles and lengths. /// /// Calculated as `β€–aβ€–β€–bβ€–cos(ΞΈ)`, it represents the product of their lengths (`β€–aβ€–β€–bβ€–`) scaled by the alignment of their directions (`cos(ΞΈ)`). /// The output ranges from the positive to negative product of their lengths based on when they are pointing in the same or opposite directions. -/// If any vector has zero length, the output is 0. -#[node_macro::node(category("Math: Vector"))] +/// If either vec2 has zero length, the output is 0. +#[node_macro::node(category("Math: Vec2"))] fn dot_product( _: impl Ctx, /// An operand of the dot product operation. - vector_a: DVec2, + value: DVec2, /// The other operand of the dot product operation. #[default(1., 0.)] - vector_b: DVec2, - /// Whether to normalize both input vectors so the calculation ranges in `[-1, 1]` by considering only their degree of directional alignment. + other_value: DVec2, + /// Whether to normalize both input vec2s so the calculation ranges in `[-1, 1]` by considering only their degree of directional alignment. normalize: bool, ) -> f64 { - if normalize { - vector_a.normalize_or_zero().dot(vector_b.normalize_or_zero()) + let other_value = other_value; + + let result = if normalize { + value.normalize_or_zero().dot(other_value.normalize_or_zero()) } else { - vector_a.dot(vector_b) - } + value.dot(other_value) + }; + + result } -/// Calculates the angle swept between two vectors. +/// The cross product operation (`Γ—`) calculates the signed area of the parallelogram formed by a vec2 pair. /// -/// The value is always positive and ranges from 0Β° (both vectors point the same direction) to 180Β° (both vectors point opposite directions). -#[node_macro::node(category("Math: Vector"))] -fn angle_between(_: impl Ctx, vector_a: DVec2, vector_b: DVec2, radians: bool) -> f64 { - let dot_product = vector_a.normalize_or_zero().dot(vector_b.normalize_or_zero()); - let angle = dot_product.acos(); - if radians { angle } else { angle.to_degrees() } +/// The sign gives the rotation direction from the first vec2 to the second: positive for clockwise, negative for counterclockwise, and 0 when both are parallel, as drawn in the viewport. +#[node_macro::node(category("Math: Vec2"))] +fn cross_product( + _: impl Ctx, + /// The vec2 on the left-hand side of the cross product operation. + value: DVec2, + /// The vec2 on the right-hand side of the cross product operation. + #[default(1., 0.)] + other_value: DVec2, +) -> f64 { + value.perp_dot(other_value) +} + +/// Calculates the angle swept between two vec2s. +/// +/// The angle ranges from -180Β° to 180Β° (or -Ο€ to Ο€ radians) and its sign gives the sweep direction from the "Direction From" input to the "Direction To" input: positive for clockwise, negative for counterclockwise, as drawn in the viewport and matching the direction convention of the Transform node's rotation. +#[node_macro::node(category("Math: Vec2"))] +fn angle_between( + _: impl Ctx, + /// The direction the angle is measured from. + direction_from: DVec2, + /// The direction the angle is measured to. + #[default(1., 0.)] + direction_to: DVec2, + /// Whether the resulting angle should be given in radians instead of degrees. + radians: bool, +) -> f64 { + let direction_to = direction_to; + + if direction_from == DVec2::ZERO || direction_to == DVec2::ZERO { + return 0.; + } + + let angle = direction_from.angle_to(direction_to); + let result = if radians { angle } else { angle.to_degrees() }; + result } pub trait ToPosition { @@ -904,40 +1373,52 @@ impl ToPosition for DAffine2 { } } -/// Calculates the angle needed for a rightward-facing object placed at the observer position to turn so it points toward the target position. -#[node_macro::node(category("Math: Vector"))] +/// Calculates the angle needed for a rightward-facing object placed at the "Position From" point to turn so it points toward the "Position To" point. +#[node_macro::node(category("Math: Vec2"))] fn angle_to( _: impl Ctx, /// The position from which the angle is measured. #[implementations(DVec2, DAffine2, DVec2, DAffine2)] - observer: T, + position_from: T, /// The position toward which the angle is measured. #[expose] #[implementations(DVec2, DVec2, DAffine2, DAffine2)] - target: U, + position_to: U, /// Whether the resulting angle should be given in radians instead of degrees. radians: bool, ) -> f64 { - let from = observer.to_position(); - let to = target.to_position(); + let from = position_from.to_position(); + let to = position_to.to_position(); let delta = to - from; let angle = delta.y.atan2(delta.x); - if radians { angle } else { angle.to_degrees() } + let result = if radians { angle } else { angle.to_degrees() }; + result } -// TODO: Rename to "Magnitude" -/// The magnitude operator (`β€–xβ€–`) calculates the length of a vec2, which is the distance from the base to the tip of the arrow represented by the vector. -#[node_macro::node(category("Math: Vector"))] -fn length(_: impl Ctx, vector: DVec2) -> f64 { - vector.length() +/// The magnitude operator (`β€–xβ€–`) calculates the length of a vec2, which is the distance from the base to the tip of the arrow it represents. +#[node_macro::node(category("Math: Vec2"))] +fn magnitude(_: impl Ctx, vec2: DVec2) -> f64 { + vec2.length() } -/// Scales the input vector to unit length while preserving its direction. This is equivalent to dividing the input vector by its own magnitude. +/// Measures the distance between two points, which is the length of the straight line segment connecting them. +#[node_macro::node(category("Math: Vec2"))] +fn distance( + _: impl Ctx, + /// The point the distance is measured from. + position_from: DVec2, + /// The point the distance is measured to. + position_to: DVec2, +) -> f64 { + position_from.distance(position_to) +} + +/// Scales the input vec2 to unit length while preserving its direction. This is equivalent to dividing the input vec2 by its own magnitude. /// -/// Returns 0 when the input vector has zero length. -#[node_macro::node(category("Math: Vector"))] -fn normalize(_: impl Ctx, vector: DVec2) -> DVec2 { - vector.normalize_or_zero() +/// Returns 0 when the input vec2 has zero length. +#[node_macro::node(category("Math: Vec2"))] +fn normalize(_: impl Ctx, vec2: DVec2) -> DVec2 { + vec2.normalize_or_zero() } #[cfg(test)] diff --git a/node-graph/nodes/path-bool/src/lib.rs b/node-graph/nodes/path-bool/src/lib.rs index 70cfef21c1..622f45ddca 100644 --- a/node-graph/nodes/path-bool/src/lib.rs +++ b/node-graph/nodes/path-bool/src/lib.rs @@ -6,17 +6,16 @@ use glam::{DAffine2, DVec2}; use graphic_types::graphic::{GraphicLevel, PaintColumns, PaintReach, bake_paint_transforms, is_paint_present, set_paint_attribute, set_paint_attribute_at}; use graphic_types::markers::{EditorMergedLayers, Fill, Stroke}; use graphic_types::raster_types::{CPU, GPU, Raster}; -use graphic_types::vector_types::GradientStops; -use graphic_types::vector_types::gradient::{GradientSpreadMethod, GradientType}; -use graphic_types::vector_types::subpath::{ManipulatorGroup, Subpath}; -use graphic_types::vector_types::vector::PointId; +use graphic_types::vector_types::markers::{ATTR_GRADIENT_FORM, ATTR_GRADIENT_SPREAD}; +use graphic_types::vector_types::vector::VectorExt; use graphic_types::vector_types::vector::algorithms::merge_by_distance::MergeByDistanceExt; -use graphic_types::vector_types::{ATTR_GRADIENT_TYPE, ATTR_SPREAD_METHOD}; +use graphic_types::vector_types::vector::algorithms::shapes::rectangle_bezpath; +use graphic_types::vector_types::{Gradient, GradientForm, GradientSpread}; use graphic_types::{ATTR_FILL, ATTR_STROKE, Graphic, IntoGraphicList, Vector}; use linesweeper::topology::Topology; use linesweeper::{BinaryOp, FillRule, binary_op}; use smallvec::SmallVec; -use vector_types::kurbo::{Affine, BezPath, CubicBez, Line, ParamCurve, PathSeg, Point, QuadBez}; +use vector_types::kurbo::{Affine, BezPath, CubicBez, Line, ParamCurve, PathEl, PathSeg, Point, QuadBez}; pub use vector_types::vector::misc::BooleanOperation; // TODO: Fix boolean ops to work by removing .transform() and .one_instance_*() calls, @@ -44,6 +43,8 @@ fn boolean_core<'e>( ), core_types::gpoll::Interrupt, > { + use core_types::lane::LaneSource; + // The first index is the bottom of the stack let mut result_vector_list = boolean_operation_on_vector_list(&flattened, operation); @@ -54,7 +55,15 @@ fn boolean_core<'e>( let result_vector = result_vector_list.element_mut(0).unwrap(); Vector::transform(result_vector, transform); - result_vector.set_stroke_transform(DAffine2::IDENTITY); + + // The geometry is baked into identity space, so a copied paint authoring space would be stale. + // Master drops it off each `Appearance` coverage; our paint rides `ATTR_FILL`/`ATTR_STROKE`, so it drops off there. + let stale_paint = [(ATTR_FILL, result_vector_list.attr::(0).cloned()), (ATTR_STROKE, result_vector_list.attr::(0).cloned())]; + for (key, paint) in stale_paint { + let Some(mut paint) = paint else { continue }; + paint.remove_attribute(ATTR_TRANSFORM); + set_paint_attribute_at(&mut result_vector_list, 0, key, paint); + } // Clean up the boolean operation result by merging duplicated points let merge_transform: DAffine2 = result_vector_list.attribute_cloned_or_default(ATTR_TRANSFORM, 0); @@ -75,7 +84,6 @@ fn boolean_core<'e>( }; let element = result_vector_list.element(0).cloned().unwrap_or_default(); - use core_types::lane::LaneSource; let fill = park_paint(result_vector_list.attr::(0).filter(|paint| is_paint_present(paint)).cloned())?; let stroke = park_paint(result_vector_list.attr::(0).filter(|paint| is_paint_present(paint)).cloned())?; let layer_path: Vec = result_vector_list.attribute::>(ATTR_EDITOR_LAYER_PATH, 0).cloned().unwrap_or_default(); @@ -244,12 +252,7 @@ fn boolean_operation_on_vector_list(vector: &List, boolean_operation: Bo bake_paint_transforms(&mut attributes, copy_from_transform); - let copy_from = vector.element(index).unwrap(); - let element = Vector { - stroke: copy_from.stroke.clone(), - ..Default::default() - }; - Item::from_parts(element, attributes) + Item::from_parts(Vector::default(), attributes) } else { Item::::default() }; @@ -268,8 +271,8 @@ fn boolean_operation_on_vector_list(vector: &List, boolean_operation: Bo } }; let contours = top.contours(|winding| winding.is_inside(boolean_operation)); - for subpath in from_bez_paths(contours.contours().map(|c| &c.path)) { - row.element_mut().append_subpath(subpath, false); + for contour in contours.contours() { + row.element_mut().append_bezpath(closed(contour.path.clone())); } list.push(row); @@ -289,10 +292,10 @@ fn raster_stand_in_rows(image: &S, parent_trans let fill: f64 = image.attr::(i); let clip: bool = image.attr::(i); - let mut subpath = Subpath::new_rectangle(DVec2::ZERO, DVec2::ONE); - subpath.apply_transform(parent_transform * row_transform); + let mut bezpath = rectangle_bezpath(DVec2::ZERO, DVec2::ONE); + bezpath.apply_affine(Affine::new((parent_transform * row_transform).to_cols_array())); - let element = Vector::from_subpath(subpath); + let element = Vector::from_bezpath(bezpath); let mut item = Item::new_from_element(element) .with_attribute(ATTR_BLEND_MODE, blend_mode) @@ -311,31 +314,25 @@ fn raster_stand_in_rows(image: &S, parent_trans fn color_paint_row(color: Color, mut attributes: core_types::list::ItemAttributeValues) -> Item { set_paint_attribute(&mut attributes, ATTR_FILL, List::new_from_element(color)); - let mut element = Vector::default(); - element.set_stroke_transform(DAffine2::IDENTITY); - - Item::from_parts(element, attributes) + Item::from_parts(Vector::default(), attributes) } /// A gradient row: an empty vector carrying the stops as its fill paint, the /// gradient keys moved onto the paint. -fn gradient_paint_row(stops: GradientStops, mut attributes: core_types::list::ItemAttributeValues) -> Item { - let mut gradient_paint = List::new_from_element(Graphic::Gradient(stops)); +fn gradient_paint_row(gradient: Gradient, mut attributes: core_types::list::ItemAttributeValues) -> Item { + let mut gradient_paint = List::new_from_element(Graphic::Gradient(gradient)); if let Some(transform) = attributes.remove::(ATTR_TRANSFORM) { gradient_paint.set_attribute(ATTR_TRANSFORM, 0, transform); } - if let Some(gradient_type) = attributes.remove::(ATTR_GRADIENT_TYPE) { - gradient_paint.set_attribute(ATTR_GRADIENT_TYPE, 0, gradient_type); + if let Some(gradient_form) = attributes.remove::(ATTR_GRADIENT_FORM) { + gradient_paint.set_attribute(ATTR_GRADIENT_FORM, 0, gradient_form); } - if let Some(spread_method) = attributes.remove::(ATTR_SPREAD_METHOD) { - gradient_paint.set_attribute(ATTR_SPREAD_METHOD, 0, spread_method); + if let Some(gradient_spread) = attributes.remove::(ATTR_GRADIENT_SPREAD) { + gradient_paint.set_attribute(ATTR_GRADIENT_SPREAD, 0, gradient_spread); } attributes.insert(ATTR_FILL, Some(gradient_paint)); - let mut element = Vector::default(); - element.set_stroke_transform(DAffine2::IDENTITY); - - Item::from_parts(element, attributes) + Item::from_parts(Vector::default(), attributes) } /// A text lane's rows: the shaped glyph vectors under the composed transform. @@ -413,7 +410,7 @@ fn flatten_vector_run_into<'a>(out: &mut List, level: GraphicLevel<'a>, let composed = transform * level.attr::(index); match element { Graphic::Vector(vector) => push_leaf_vector_row(out, level, index, vector, transform, reach), - Graphic::Graphic(children) => push_union(out, flatten_vector_run(GraphicLevel::Legacy(children), composed, reach.nested())), + Graphic::GraphicList(children) => push_union(out, flatten_vector_run(GraphicLevel::Legacy(children), composed, reach.nested())), Graphic::Group(group) => flatten_group(out, group, composed, reach), Graphic::RasterCPU(raster) => push_rows(out, raster_stand_in_rows(&LeafLane::new(&level, index, raster), transform)), Graphic::RasterGPU(raster) => push_rows(out, raster_stand_in_rows(&LeafLane::new(&level, index, raster), transform)), @@ -423,6 +420,8 @@ fn flatten_vector_run_into<'a>(out: &mut List, level: GraphicLevel<'a>, let one = List::new_from_item(Item::from_parts(text.clone(), graphic_types::graphic::lane_attributes(level, index))); push_rows(out, text_rows(&one, composed)); } + // Brush strokes have no vector outline; a brush node renders them to rasters + Graphic::Stroke(_) => {} } } } @@ -445,7 +444,7 @@ fn flatten_group(out: &mut List, group: &core_types::record::Group, comp out, (0..color.len()).filter_map(|i| Some(color_paint_row(*color.element(i)?, color.clone_item_attributes(i)))).collect(), ); - } else if let Some(gradient) = graphic_types::graphic::run_to_list::(item) { + } else if let Some(gradient) = graphic_types::graphic::run_to_list::(item) { push_rows( out, (0..gradient.len()) @@ -473,65 +472,36 @@ fn quantize_segment(seg: PathSeg) -> PathSeg { } } -fn to_bez_path(vector: &Vector, transform: DAffine2) -> BezPath { - let mut path = BezPath::new(); - for subpath in vector.stroke_bezier_paths() { - push_subpath(&mut path, &subpath, transform); +/// Every operand and result region is treated as closed, so an open path gets its closing segment here. +fn closed(mut path: BezPath) -> BezPath { + if !path.elements().is_empty() && path.elements().last() != Some(&PathEl::ClosePath) { + path.close_path(); } path } -fn push_subpath(path: &mut BezPath, subpath: &Subpath, transform: DAffine2) { +fn to_bez_path(vector: &Vector, transform: DAffine2) -> BezPath { let transform = Affine::new(transform.to_cols_array()); - let mut first = true; + let mut path = BezPath::new(); - for seg in subpath.iter_closed() { - let quantized = quantize_segment(transform * seg); - if first { - first = false; - path.move_to(quantized.start()); + for subpath in vector.stroke_bezpath_iter() { + let mut first = true; + + for segment in closed(subpath).segments() { + let quantized = quantize_segment(transform * segment); + if first { + first = false; + path.move_to(quantized.start()); + } + path.push(quantized.as_path_el()); } - path.push(quantized.as_path_el()); - } - path.close_path(); -} -fn from_bez_paths<'a>(paths: impl Iterator) -> Vec> { - let mut all_subpaths = Vec::new(); - - for path in paths { - let cubics: Vec = path.segments().map(|segment| segment.to_cubic()).collect(); - let mut manipulators_list = Vec::new(); - let mut current_start = None; - - for (index, cubic) in cubics.iter().enumerate() { - let d = |p: Point| DVec2::new(p.x, p.y); - let [start, handle1, handle2, end] = [d(cubic.p0), d(cubic.p1), d(cubic.p2), d(cubic.p3)]; - - if current_start.is_none() { - // Use the correct in-handle (None) and out-handle for the start point - manipulators_list.push(ManipulatorGroup::new(start, None, Some(handle1))); - } else { - // Update the out-handle of the previous point - if let Some(last) = manipulators_list.last_mut() { - last.out_handle = Some(handle1); - } - } - - // Add the end point with the correct in-handle and out-handle (None) - manipulators_list.push(ManipulatorGroup::new(end, Some(handle2), None)); - - current_start = Some(end); - - // Check if this is the last segment - if index == cubics.len() - 1 { - all_subpaths.push(Subpath::new(manipulators_list, true)); - manipulators_list = Vec::new(); // Reset manipulators for the next path - } + if !first { + path.close_path(); } } - all_subpaths + path } pub fn boolean_intersect(a: &BezPath, b: &BezPath) -> Vec { @@ -550,7 +520,7 @@ mod tests { use core_types::record::Group; fn square(corner: DVec2) -> Vector { - Vector::from_subpath(Subpath::::new_rectangle(corner, corner + DVec2::ONE)) + Vector::from_bezpath(rectangle_bezpath(corner, corner + DVec2::ONE)) } fn black_paint() -> List> { diff --git a/node-graph/nodes/raster/src/adjust.rs b/node-graph/nodes/raster/src/adjust.rs index a08e6d84fc..650b81d1fd 100644 --- a/node-graph/nodes/raster/src/adjust.rs +++ b/node-graph/nodes/raster/src/adjust.rs @@ -13,7 +13,7 @@ impl Adjust for Color { mod adjust_std { use super::*; use raster_types::{CPU, Raster}; - use vector_types::GradientStops; + use vector_types::Gradient; impl Adjust for Raster { fn adjust(&mut self, map_fn: impl Fn(&Color) -> Color) { @@ -22,11 +22,9 @@ mod adjust_std { } } } - impl Adjust for GradientStops { + impl Adjust for Gradient { fn adjust(&mut self, map_fn: impl Fn(&Color) -> Color) { - for color in self.color.iter_mut() { - *color = map_fn(color); - } + *self = self.map_colors(map_fn); } } } diff --git a/node-graph/nodes/raster/src/adjustments.rs b/node-graph/nodes/raster/src/adjustments.rs index 4afdbcc2c2..e26b493cda 100644 --- a/node-graph/nodes/raster/src/adjustments.rs +++ b/node-graph/nodes/raster/src/adjustments.rs @@ -6,6 +6,8 @@ use core::fmt::Debug; use glam::Vec3; use no_std_types::color::{Color, linear_to_srgb, srgb_to_linear}; use no_std_types::context::Ctx; +#[cfg(not(feature = "std"))] +use no_std_types::list::ShaderItem as Item; use no_std_types::registry::types::{AngleF32, PercentageF32, SignedPercentageF32}; use node_macro::BufferStruct; use num_enum::{FromPrimitive, IntoPrimitive}; @@ -14,7 +16,7 @@ use num_traits::float::Float; #[cfg(feature = "std")] use raster_types::{CPU, Raster}; #[cfg(feature = "std")] -use vector_types::GradientStops; +use vector_types::Gradient; // TODO: Implement the following: // Color Balance @@ -56,10 +58,13 @@ fn luminance + Clone + Send + Sync + no_std_types::context::Cac GradientStops, )] #[gpu_image] - mut input: T, - luminance_calc: LuminanceCalculation, -) -> T { - input.adjust(|color| { + input: Item, + luminance_calc: Item, +) -> Item { + let mut input = input; + let luminance_calc = luminance_calc.into_element(); + + input.element_mut().adjust(|color| { let luminance = match luminance_calc { LuminanceCalculation::SRGB => color.luminance_rec_709(), LuminanceCalculation::Perceptual => color.luminance_perceptual(), @@ -81,16 +86,20 @@ fn gamma_correction + Clone + Send + Sync + no_std_types::conte GradientStops, )] #[gpu_image] - mut input: T, + input: Item, #[default(2.2)] #[range] #[hard(0.0001..)] #[soft(0.01..10)] - gamma: f32, - inverse: bool, -) -> T { + gamma: Item, + inverse: Item, +) -> Item { + let mut input = input; + let gamma = gamma.into_element(); + let inverse = inverse.into_element(); + let exponent = if inverse { 1. / gamma } else { gamma }; - input.adjust(|color| color.apply_gamma_exponent(exponent)); + input.element_mut().adjust(|color| color.apply_gamma_exponent(exponent)); input } @@ -103,10 +112,13 @@ fn extract_channel + Clone + Send + Sync + no_std_types::contex GradientStops, )] #[gpu_image] - mut input: T, - channel: RedGreenBlueAlpha, -) -> T { - input.adjust(|color| { + input: Item, + channel: Item, +) -> Item { + let mut input = input; + let channel = channel.into_element(); + + input.element_mut().adjust(|color| { let extracted_value = match channel { RedGreenBlueAlpha::Red => color.r(), RedGreenBlueAlpha::Green => color.g(), @@ -127,9 +139,10 @@ fn make_opaque + Clone + Send + Sync + no_std_types::context::C GradientStops, )] #[gpu_image] - mut input: T, -) -> T { - input.adjust(|color| { + input: Item, +) -> Item { + let mut input = input; + input.element_mut().adjust(|color| { if color.a() == 0. { return color.with_alpha(1.); } @@ -149,10 +162,14 @@ fn brightness_contrast_classic + Clone + Send + Sync + no_std_t GradientStops, )] #[gpu_image] - mut input: T, - brightness: SignedPercentageF32, - contrast: SignedPercentageF32, -) -> T { + input: Item, + brightness: Item, + contrast: Item, +) -> Item { + let mut input = input; + let brightness = brightness.into_element(); + let contrast = contrast.into_element(); + let brightness = brightness / 255.; let contrast = contrast / 100.; @@ -160,7 +177,7 @@ fn brightness_contrast_classic + Clone + Send + Sync + no_std_t let offset = brightness * contrast + brightness - contrast / 2.; - input.adjust(|color| color.map_gamma_rgb(|c| (c + c * contrast + offset).clamp(0., 1.))); + input.element_mut().adjust(|color| color.map_gamma_rgb(|c| (c + c * contrast + offset).clamp(0., 1.))); input } @@ -180,15 +197,20 @@ fn brightness_contrast + Clone + Send + Sync + no_std_types::co GradientStops, )] #[gpu_image] - mut input: T, - brightness: SignedPercentageF32, - contrast: SignedPercentageF32, - use_classic: bool, -) -> T { + input: Item, + brightness: Item, + contrast: Item, + use_classic: Item, +) -> Item { + let use_classic = use_classic.into_element(); if use_classic { return brightness_contrast_classic(_ctx, input, brightness, contrast); } + let mut input = input; + let brightness = brightness.into_element(); + let contrast = contrast.into_element(); + const WINDOW_SIZE: usize = 1024; // Brightness LUT @@ -239,7 +261,7 @@ fn brightness_contrast + Clone + Send + Sync + no_std_types::co }); let lut_max = (combined_lut.len() - 1) as f32; - input.adjust(|color| color.map_gamma_rgb(|c| combined_lut[(c * lut_max).round() as usize])); + input.element_mut().adjust(|color| color.map_gamma_rgb(|c| combined_lut[(c * lut_max).round() as usize])); input } @@ -261,14 +283,21 @@ fn levels + Clone + Send + Sync + no_std_types::context::CacheH GradientStops, )] #[gpu_image] - mut image: T, - #[default(0.)] shadows: PercentageF32, - #[default(50.)] midtones: PercentageF32, - #[default(100.)] highlights: PercentageF32, - #[default(0.)] output_minimums: PercentageF32, - #[default(100.)] output_maximums: PercentageF32, -) -> T { - image.adjust(|color| { + image: Item, + #[default(0.)] shadows: Item, + #[default(50.)] midtones: Item, + #[default(100.)] highlights: Item, + #[default(0.)] output_minimums: Item, + #[default(100.)] output_maximums: Item, +) -> Item { + let mut image = image; + let shadows = shadows.into_element(); + let midtones = midtones.into_element(); + let highlights = highlights.into_element(); + let output_minimums = output_minimums.into_element(); + let output_maximums = output_maximums.into_element(); + + image.element_mut().adjust(|color| { // Levels math operates in gamma space let [mut r, mut g, mut b, a] = color.to_gamma_srgb_channels(); @@ -340,34 +369,43 @@ fn black_and_white + Clone + Send + Sync + no_std_types::contex GradientStops, )] #[gpu_image] - mut image: T, - #[default(Color::BLACK)] tint: Color, + image: Item, + #[default(Color::BLACK)] tint: Item, #[default(40.)] #[range] #[soft(-200..300)] - reds: PercentageF32, + reds: Item, #[default(60.)] #[range] #[soft(-200..300)] - yellows: PercentageF32, + yellows: Item, #[default(40.)] #[range] #[soft(-200..300)] - greens: PercentageF32, + greens: Item, #[default(60.)] #[range] #[soft(-200..300)] - cyans: PercentageF32, + cyans: Item, #[default(20.)] #[range] #[soft(-200..300)] - blues: PercentageF32, + blues: Item, #[default(80.)] #[range] #[soft(-200..300)] - magentas: PercentageF32, -) -> T { - image.adjust(|color| { + magentas: Item, +) -> Item { + let mut image = image; + let tint = tint.into_element(); + let reds = reds.into_element(); + let yellows = yellows.into_element(); + let greens = greens.into_element(); + let cyans = cyans.into_element(); + let blues = blues.into_element(); + let magentas = magentas.into_element(); + + image.element_mut().adjust(|color| { // Black & White channel weights are tuned for gamma-space values let [r, g, b, alpha_part] = color.to_gamma_srgb_channels(); @@ -423,12 +461,17 @@ fn hue_saturation + Clone + Send + Sync + no_std_types::context GradientStops, )] #[gpu_image] - mut input: T, - hue_shift: AngleF32, - saturation_shift: SignedPercentageF32, - lightness_shift: SignedPercentageF32, -) -> T { - input.adjust(|color| { + input: Item, + hue_shift: Item, + saturation_shift: Item, + lightness_shift: Item, +) -> Item { + let mut input = input; + let hue_shift = hue_shift.into_element(); + let saturation_shift = saturation_shift.into_element(); + let lightness_shift = lightness_shift.into_element(); + + input.element_mut().adjust(|color| { // HSL operates on gamma-space channels let [hue, saturation, lightness, alpha] = color.to_hsla(); @@ -455,9 +498,10 @@ fn invert + Clone + Send + Sync + no_std_types::context::CacheH GradientStops, )] #[gpu_image] - mut input: T, -) -> T { - input.adjust(|color| { + input: Item, +) -> Item { + let mut input = input; + input.element_mut().adjust(|color| { // Invert in gamma space relative to alpha let [r, g, b, a] = color.to_gamma_srgb_channels(); Color::from_gamma_srgb_channels(a - r, a - g, a - b, a) @@ -476,12 +520,17 @@ fn threshold + Clone + Send + Sync + no_std_types::context::Cac GradientStops, )] #[gpu_image] - mut image: T, - #[default(50.)] min_luminance: PercentageF32, - #[default(100.)] max_luminance: PercentageF32, - luminance_calc: LuminanceCalculation, -) -> T { - image.adjust(|color| { + image: Item, + #[default(50.)] min_luminance: Item, + #[default(100.)] max_luminance: Item, + luminance_calc: Item, +) -> Item { + let mut image = image; + let min_luminance = min_luminance.into_element(); + let max_luminance = max_luminance.into_element(); + let luminance_calc = luminance_calc.into_element(); + + image.element_mut().adjust(|color| { let min_luminance = srgb_to_linear(min_luminance / 100.); let max_luminance = srgb_to_linear(max_luminance / 100.); @@ -522,10 +571,13 @@ fn vibrance + Clone + Send + Sync + no_std_types::context::Cach GradientStops, )] #[gpu_image] - mut image: T, - vibrance: SignedPercentageF32, -) -> T { - image.adjust(|color| { + image: Item, + vibrance: Item, +) -> Item { + let mut image = image; + let vibrance = vibrance.into_element(); + + image.element_mut().adjust(|color| { let r_raw = color.r(); let g_raw = color.g(); let b_raw = color.b(); @@ -724,66 +776,73 @@ fn channel_mixer + Clone + Send + Sync + no_std_types::context: GradientStops, )] #[gpu_image] - mut image: T, + image: Item, - monochrome: bool, + monochrome: Item, #[default(40.)] #[name("Red")] - monochrome_r: f32, + monochrome_r: Item, #[default(40.)] #[name("Green")] - monochrome_g: f32, + monochrome_g: Item, #[default(20.)] #[name("Blue")] - monochrome_b: f32, + monochrome_b: Item, #[default(0.)] #[name("Constant")] - monochrome_c: f32, + monochrome_c: Item, #[default(100.)] #[name("(Red) Red")] - red_r: f32, + red_r: Item, #[default(0.)] #[name("(Red) Green")] - red_g: f32, + red_g: Item, #[default(0.)] #[name("(Red) Blue")] - red_b: f32, + red_b: Item, #[default(0.)] #[name("(Red) Constant")] - red_c: f32, + red_c: Item, #[default(0.)] #[name("(Green) Red")] - green_r: f32, + green_r: Item, #[default(100.)] #[name("(Green) Green")] - green_g: f32, + green_g: Item, #[default(0.)] #[name("(Green) Blue")] - green_b: f32, + green_b: Item, #[default(0.)] #[name("(Green) Constant")] - green_c: f32, + green_c: Item, #[default(0.)] #[name("(Blue) Red")] - blue_r: f32, + blue_r: Item, #[default(0.)] #[name("(Blue) Green")] - blue_g: f32, + blue_g: Item, #[default(100.)] #[name("(Blue) Blue")] - blue_b: f32, + blue_b: Item, #[default(0.)] #[name("(Blue) Constant")] - blue_c: f32, + blue_c: Item, // Display-only properties (not used within the node) - _output_channel: RedGreenBlue, -) -> T { - image.adjust(|color| { + _output_channel: Item, +) -> Item { + let mut image = image; + let monochrome = monochrome.into_element(); + let (monochrome_r, monochrome_g, monochrome_b, monochrome_c) = (monochrome_r.into_element(), monochrome_g.into_element(), monochrome_b.into_element(), monochrome_c.into_element()); + let (red_r, red_g, red_b, red_c) = (red_r.into_element(), red_g.into_element(), red_b.into_element(), red_c.into_element()); + let (green_r, green_g, green_b, green_c) = (green_r.into_element(), green_g.into_element(), green_b.into_element(), green_c.into_element()); + let (blue_r, blue_g, blue_b, blue_c) = (blue_r.into_element(), blue_g.into_element(), blue_b.into_element(), blue_c.into_element()); + + image.element_mut().adjust(|color| { let [r, g, b, a] = color.to_gamma_srgb_channels(); let (out_r, out_g, out_b) = if monochrome { @@ -856,58 +915,70 @@ fn selective_color + Clone + Send + Sync + no_std_types::contex GradientStops, )] #[gpu_image] - mut image: T, + image: Item, - mode: RelativeAbsolute, + mode: Item, - #[name("(Reds) Cyan")] r_c: f32, - #[name("(Reds) Magenta")] r_m: f32, - #[name("(Reds) Yellow")] r_y: f32, - #[name("(Reds) Black")] r_k: f32, + #[name("(Reds) Cyan")] r_c: Item, + #[name("(Reds) Magenta")] r_m: Item, + #[name("(Reds) Yellow")] r_y: Item, + #[name("(Reds) Black")] r_k: Item, - #[name("(Yellows) Cyan")] y_c: f32, - #[name("(Yellows) Magenta")] y_m: f32, - #[name("(Yellows) Yellow")] y_y: f32, - #[name("(Yellows) Black")] y_k: f32, + #[name("(Yellows) Cyan")] y_c: Item, + #[name("(Yellows) Magenta")] y_m: Item, + #[name("(Yellows) Yellow")] y_y: Item, + #[name("(Yellows) Black")] y_k: Item, - #[name("(Greens) Cyan")] g_c: f32, - #[name("(Greens) Magenta")] g_m: f32, - #[name("(Greens) Yellow")] g_y: f32, - #[name("(Greens) Black")] g_k: f32, + #[name("(Greens) Cyan")] g_c: Item, + #[name("(Greens) Magenta")] g_m: Item, + #[name("(Greens) Yellow")] g_y: Item, + #[name("(Greens) Black")] g_k: Item, - #[name("(Cyans) Cyan")] c_c: f32, - #[name("(Cyans) Magenta")] c_m: f32, - #[name("(Cyans) Yellow")] c_y: f32, - #[name("(Cyans) Black")] c_k: f32, + #[name("(Cyans) Cyan")] c_c: Item, + #[name("(Cyans) Magenta")] c_m: Item, + #[name("(Cyans) Yellow")] c_y: Item, + #[name("(Cyans) Black")] c_k: Item, - #[name("(Blues) Cyan")] b_c: f32, - #[name("(Blues) Magenta")] b_m: f32, - #[name("(Blues) Yellow")] b_y: f32, - #[name("(Blues) Black")] b_k: f32, + #[name("(Blues) Cyan")] b_c: Item, + #[name("(Blues) Magenta")] b_m: Item, + #[name("(Blues) Yellow")] b_y: Item, + #[name("(Blues) Black")] b_k: Item, - #[name("(Magentas) Cyan")] m_c: f32, - #[name("(Magentas) Magenta")] m_m: f32, - #[name("(Magentas) Yellow")] m_y: f32, - #[name("(Magentas) Black")] m_k: f32, + #[name("(Magentas) Cyan")] m_c: Item, + #[name("(Magentas) Magenta")] m_m: Item, + #[name("(Magentas) Yellow")] m_y: Item, + #[name("(Magentas) Black")] m_k: Item, - #[name("(Whites) Cyan")] w_c: f32, - #[name("(Whites) Magenta")] w_m: f32, - #[name("(Whites) Yellow")] w_y: f32, - #[name("(Whites) Black")] w_k: f32, + #[name("(Whites) Cyan")] w_c: Item, + #[name("(Whites) Magenta")] w_m: Item, + #[name("(Whites) Yellow")] w_y: Item, + #[name("(Whites) Black")] w_k: Item, - #[name("(Neutrals) Cyan")] n_c: f32, - #[name("(Neutrals) Magenta")] n_m: f32, - #[name("(Neutrals) Yellow")] n_y: f32, - #[name("(Neutrals) Black")] n_k: f32, + #[name("(Neutrals) Cyan")] n_c: Item, + #[name("(Neutrals) Magenta")] n_m: Item, + #[name("(Neutrals) Yellow")] n_y: Item, + #[name("(Neutrals) Black")] n_k: Item, - #[name("(Blacks) Cyan")] k_c: f32, - #[name("(Blacks) Magenta")] k_m: f32, - #[name("(Blacks) Yellow")] k_y: f32, - #[name("(Blacks) Black")] k_k: f32, + #[name("(Blacks) Cyan")] k_c: Item, + #[name("(Blacks) Magenta")] k_m: Item, + #[name("(Blacks) Yellow")] k_y: Item, + #[name("(Blacks) Black")] k_k: Item, - _colors: SelectiveColorChoice, -) -> T { - image.adjust(|color| { + _colors: Item, +) -> Item { + let mut image = image; + let mode = mode.into_element(); + let (r_c, r_m, r_y, r_k) = (r_c.into_element(), r_m.into_element(), r_y.into_element(), r_k.into_element()); + let (y_c, y_m, y_y, y_k) = (y_c.into_element(), y_m.into_element(), y_y.into_element(), y_k.into_element()); + let (g_c, g_m, g_y, g_k) = (g_c.into_element(), g_m.into_element(), g_y.into_element(), g_k.into_element()); + let (c_c, c_m, c_y, c_k) = (c_c.into_element(), c_m.into_element(), c_y.into_element(), c_k.into_element()); + let (b_c, b_m, b_y, b_k) = (b_c.into_element(), b_m.into_element(), b_y.into_element(), b_k.into_element()); + let (m_c, m_m, m_y, m_k) = (m_c.into_element(), m_m.into_element(), m_y.into_element(), m_k.into_element()); + let (w_c, w_m, w_y, w_k) = (w_c.into_element(), w_m.into_element(), w_y.into_element(), w_k.into_element()); + let (n_c, n_m, n_y, n_k) = (n_c.into_element(), n_m.into_element(), n_y.into_element(), n_k.into_element()); + let (k_c, k_m, k_y, k_k) = (k_c.into_element(), k_m.into_element(), k_y.into_element(), k_k.into_element()); + + image.element_mut().adjust(|color| { let [r, g, b, a] = color.to_gamma_srgb_channels(); let min = |a: f32, b: f32, c: f32| a.min(b).min(c); @@ -1000,13 +1071,15 @@ fn posterize + Clone + Send + Sync + no_std_types::context::Cac GradientStops, )] #[gpu_image] - mut input: T, + input: Item, #[default(4)] #[hard(2..)] - levels: u32, -) -> T { - let levels = levels as f32; - input.adjust(|color| { + levels: Item, +) -> Item { + let mut input = input; + let levels = levels.into_element() as f32; + + input.element_mut().adjust(|color| { let number_of_areas = levels.recip(); let size_of_areas = (levels - 1.).recip(); color.map_gamma_rgb(|c| (c / number_of_areas).floor() * size_of_areas) @@ -1029,16 +1102,21 @@ fn exposure + Clone + Send + Sync + no_std_types::context::Cach GradientStops, )] #[gpu_image] - mut input: T, - exposure: f32, - offset: f32, + input: Item, + exposure: Item, + offset: Item, #[default(1.)] #[range] #[hard(0.0001..)] #[soft(0.01..10)] - gamma_correction: f32, -) -> T { - input.adjust(|color| { + gamma_correction: Item, +) -> Item { + let mut input = input; + let exposure = exposure.into_element(); + let offset = offset.into_element(); + let gamma_correction = gamma_correction.into_element(); + + input.element_mut().adjust(|color| { let adjusted = color // Exposure .map_rgb(|c: f32| c * 2_f32.powf(exposure)) diff --git a/node-graph/nodes/raster/src/blending_nodes.rs b/node-graph/nodes/raster/src/blending_nodes.rs index 3970ceb298..18742e3bb2 100644 --- a/node-graph/nodes/raster/src/blending_nodes.rs +++ b/node-graph/nodes/raster/src/blending_nodes.rs @@ -6,7 +6,7 @@ use no_std_types::registry::types::PercentageF32; #[cfg(feature = "std")] use raster_types::{CPU, Raster}; #[cfg(feature = "std")] -use vector_types::{GradientStop, GradientStops}; +use vector_types::{Gradient, GradientStop}; pub trait Blend { fn blend(&self, under: &Self, blend_fn: impl Fn(P, P) -> P) -> Self; @@ -36,73 +36,28 @@ mod blend_std { } } - impl Blend for GradientStops { + impl Blend for Gradient { + // TODO: This joining is unfaithful in several ways: it samples only at stop positions so midpoint curves flatten away; + // TODO: it evaluates both sources with default whole-ramp attributes rather than their own (which this element-level impl cannot read); + // TODO: and the output keeps over's attributes despite being sampled with defaults fn blend(&self, under: &Self, blend_fn: impl Fn(Color, Color) -> Color) -> Self { - let mut combined_stops = self.position.iter().chain(under.position.iter()).copied().collect::>(); - combined_stops.dedup_by(|a, b| (*a - *b).abs() < 1e-6); + let mut combined_stops = self.positions(false).into_iter().chain(under.positions(false)).collect::>(); combined_stops.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal)); + combined_stops.dedup_by(|a, b| (*a - *b).abs() < 1e-6); + let over_evaluator = self.evaluator(Default::default()); + let under_evaluator = under.evaluator(Default::default()); let stops = combined_stops.into_iter().map(|position| { - let over_color = self.evaluate(position); - let under_color = under.evaluate(position); - let color = blend_fn(over_color, under_color); + let color = blend_fn(over_evaluator.evaluate(position), under_evaluator.evaluate(position)); GradientStop { position, midpoint: 0.5, color } }); - GradientStops::new(stops) + + // Positions stay explicit because eliding them needs the cyclic flag this impl can't read, and a wrong guess would relocate the stops + Gradient::new(stops) } } } -#[inline(always)] -pub fn blend_colors(foreground: Color, background: Color, blend_mode: BlendMode, opacity: f32) -> Color { - let target_color = match blend_mode { - // Other utility blend modes (hidden from the normal list) - do not have alpha blend - BlendMode::Erase => return background.alpha_subtract(foreground), - BlendMode::Restore => return background.alpha_add(foreground), - BlendMode::MultiplyAlpha => return background.alpha_multiply(foreground), - blend_mode => apply_blend_mode(foreground, background, blend_mode), - }; - - background.alpha_blend(target_color.apply_opacity(opacity)) -} - -pub fn apply_blend_mode(foreground: Color, background: Color, blend_mode: BlendMode) -> Color { - match blend_mode { - // Normal group - BlendMode::Normal => background.blend_rgb(foreground, Color::blend_normal), - // Darken group - BlendMode::Darken => background.blend_rgb(foreground, Color::blend_darken), - BlendMode::Multiply => background.blend_rgb(foreground, Color::blend_multiply), - BlendMode::ColorBurn => background.blend_rgb(foreground, Color::blend_color_burn), - BlendMode::LinearBurn => background.blend_rgb(foreground, Color::blend_linear_burn), - BlendMode::DarkerColor => background.blend_darker_color(foreground), - // Lighten group - BlendMode::Lighten => background.blend_rgb(foreground, Color::blend_lighten), - BlendMode::Screen => background.blend_rgb(foreground, Color::blend_screen), - BlendMode::ColorDodge => background.blend_rgb(foreground, Color::blend_color_dodge), - BlendMode::LinearDodge => background.blend_rgb(foreground, Color::blend_linear_dodge), - BlendMode::LighterColor => background.blend_lighter_color(foreground), - // Contrast group - BlendMode::Overlay => foreground.blend_rgb(background, Color::blend_hardlight), - BlendMode::SoftLight => background.blend_rgb(foreground, Color::blend_softlight), - BlendMode::HardLight => background.blend_rgb(foreground, Color::blend_hardlight), - BlendMode::VividLight => background.blend_rgb(foreground, Color::blend_vivid_light), - BlendMode::LinearLight => background.blend_rgb(foreground, Color::blend_linear_light), - BlendMode::PinLight => background.blend_rgb(foreground, Color::blend_pin_light), - BlendMode::HardMix => background.blend_rgb(foreground, Color::blend_hard_mix), - // Inversion group - BlendMode::Difference => background.blend_rgb(foreground, Color::blend_difference), - BlendMode::Exclusion => background.blend_rgb(foreground, Color::blend_exclusion), - BlendMode::Subtract => background.blend_rgb(foreground, Color::blend_subtract), - BlendMode::Divide => background.blend_rgb(foreground, Color::blend_divide), - // Component group - BlendMode::Hue => background.blend_hue(foreground), - BlendMode::Saturation => background.blend_saturation(foreground), - BlendMode::Color => background.blend_color(foreground), - BlendMode::Luminosity => background.blend_luminosity(foreground), - // Other utility blend modes (hidden from the normal list) - do not have alpha blend - _ => panic!("Used blend mode without alpha blend"), - } -} +pub use no_std_types::blending::{apply_blend_mode, blend_colors}; #[cfg(feature = "std")] #[node_macro::node(category("Raster"), cfg(feature = "std"))] @@ -111,7 +66,7 @@ fn mix + Clone + Send + Sync + core_types::CacheHash + 'static>( #[implementations( Raster, Color, - GradientStops, + Gradient, )] #[gpu_image] over: T, @@ -119,7 +74,7 @@ fn mix + Clone + Send + Sync + core_types::CacheHash + 'static>( #[implementations( Raster, Color, - GradientStops, + Gradient, )] #[gpu_image] under: T, @@ -135,7 +90,7 @@ fn color_overlay + Clone + Send + Sync + no_std_types::context: #[implementations( Raster, Color, - GradientStops, + Gradient, )] #[gpu_image] mut image: T, diff --git a/node-graph/nodes/raster/src/filter.rs b/node-graph/nodes/raster/src/filter.rs index 34e9069663..09a61e2290 100644 --- a/node-graph/nodes/raster/src/filter.rs +++ b/node-graph/nodes/raster/src/filter.rs @@ -94,9 +94,9 @@ fn blur( #[range] #[hard(0..)] #[soft(..100)] - radius: PixelLength, + radius: Item, /// Use a lower-quality box kernel instead of a circular Gaussian kernel. This is faster but produces boxy artifacts. - box_blur: bool, + box_blur: Item, /// Opt to incorrectly apply the filter with color calculations in gamma space for compatibility with the results from other software. gamma: bool, ) -> Raster { diff --git a/node-graph/nodes/raster/src/gradient_map.rs b/node-graph/nodes/raster/src/gradient_map.rs index 0965b677c6..0f08a6aa2b 100644 --- a/node-graph/nodes/raster/src/gradient_map.rs +++ b/node-graph/nodes/raster/src/gradient_map.rs @@ -1,9 +1,13 @@ -//! Not immediately shader compatible due to needing [`GradientStops`] as a param, which needs [`Vec`] +//! Not immediately shader compatible due to needing [`Gradient`] as a param, which needs [`Vec`] use crate::adjust::Adjust; use core_types::{Color, Ctx}; use raster_types::{CPU, Raster}; -use vector_types::GradientStops; +use vector_types::markers::{ + GradientCyclic as GradientCyclicAttr, GradientHueDirection as GradientHueDirectionAttr, GradientInterpolation as GradientInterpolationAttr, GradientSpace as GradientSpaceAttr, + GradientSpread as GradientSpreadAttr, +}; +use vector_types::{Gradient, GradientSettings}; // Aims for interoperable compatibility with: // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=%27grdm%27%20%3D%20Gradient%20Map @@ -14,21 +18,30 @@ fn gradient_map + Clone + Send + Sync + core_types::CacheHash + #[implementations( Raster, Color, - GradientStops, + Gradient, )] mut image: T, - gradient: IList, + #[default(Color::BLACK, Color::WHITE)] gradient: IList, reverse: bool, ) -> T { if gradient.is_empty() { return image; } - let gradient = gradient.element_ref(0); + // Master reads the whole-ramp settings off the item; ours ride the gradient's own lane. + let lane = gradient.lane(0); + let settings = GradientSettings { + spread: lane.attr::(), + cyclic: lane.attr::(), + space: lane.attr::(), + hue_direction: lane.attr::(), + interpolation: lane.attr::(), + }; + let evaluator = gradient.element_ref(0).evaluator(settings); image.adjust(|color| { let intensity = color.luminance_rec_709(); let intensity = if reverse { 1. - intensity } else { intensity }; - gradient.evaluate(intensity as f64) + evaluator.evaluate(intensity as f64) }); image diff --git a/node-graph/nodes/raster/src/std_nodes.rs b/node-graph/nodes/raster/src/std_nodes.rs index fdf188bac7..af44cd5375 100644 --- a/node-graph/nodes/raster/src/std_nodes.rs +++ b/node-graph/nodes/raster/src/std_nodes.rs @@ -369,32 +369,32 @@ pub fn image(_: impl Ctx, resource: Resource) -> Raster { pub fn noise_pattern( ctx: impl ExtractFootprint + Ctx, _primary: (), - #[default(true)] clip: bool, - seed: u32, + #[default(true)] clip: Item, + seed: Item, #[widget(ParsedWidgetOverride::Custom = "noise_properties_scale")] #[default(10.)] - scale: f64, - #[widget(ParsedWidgetOverride::Custom = "noise_properties_noise_type")] noise_type: NoiseType, - #[widget(ParsedWidgetOverride::Custom = "noise_properties_domain_warp_type")] domain_warp_type: DomainWarpType, + scale: Item, + #[widget(ParsedWidgetOverride::Custom = "noise_properties_noise_type")] noise_type: Item, + #[widget(ParsedWidgetOverride::Custom = "noise_properties_domain_warp_type")] domain_warp_type: Item, #[widget(ParsedWidgetOverride::Custom = "noise_properties_domain_warp_amplitude")] #[default(100.)] - domain_warp_amplitude: f64, - #[widget(ParsedWidgetOverride::Custom = "noise_properties_fractal_type")] fractal_type: FractalType, + domain_warp_amplitude: Item, + #[widget(ParsedWidgetOverride::Custom = "noise_properties_fractal_type")] fractal_type: Item, #[widget(ParsedWidgetOverride::Custom = "noise_properties_fractal_octaves")] #[default(3)] - fractal_octaves: u32, + fractal_octaves: Item, #[widget(ParsedWidgetOverride::Custom = "noise_properties_fractal_lacunarity")] #[default(2.)] - fractal_lacunarity: f64, + fractal_lacunarity: Item, #[widget(ParsedWidgetOverride::Custom = "noise_properties_fractal_gain")] #[default(0.5)] - fractal_gain: f64, - #[widget(ParsedWidgetOverride::Custom = "noise_properties_fractal_weighted_strength")] fractal_weighted_strength: f64, + fractal_gain: Item, + #[widget(ParsedWidgetOverride::Custom = "noise_properties_fractal_weighted_strength")] fractal_weighted_strength: Item, #[widget(ParsedWidgetOverride::Custom = "noise_properties_ping_pong_strength")] #[default(2.)] - fractal_ping_pong_strength: f64, - #[widget(ParsedWidgetOverride::Custom = "noise_properties_cellular_distance_function")] cellular_distance_function: CellularDistanceFunction, - #[widget(ParsedWidgetOverride::Custom = "noise_properties_cellular_return_type")] cellular_return_type: CellularReturnType, + fractal_ping_pong_strength: Item, + #[widget(ParsedWidgetOverride::Custom = "noise_properties_cellular_distance_function")] cellular_distance_function: Item, + #[widget(ParsedWidgetOverride::Custom = "noise_properties_cellular_return_type")] cellular_return_type: Item, #[widget(ParsedWidgetOverride::Custom = "noise_properties_cellular_jitter")] #[default(1.)] cellular_jitter: f64, diff --git a/node-graph/nodes/repeat/src/repeat_nodes.rs b/node-graph/nodes/repeat/src/repeat_nodes.rs index 013e894f4c..f16bcc59b1 100644 --- a/node-graph/nodes/repeat/src/repeat_nodes.rs +++ b/node-graph/nodes/repeat/src/repeat_nodes.rs @@ -51,8 +51,8 @@ pub fn repeat_array( content: impl Node, Output = (T, Attr)>, #[default(100., 100.)] // TODO: When using a custom Properties panel layout in document_node_definitions.rs and this default is set, the widget weirdly doesn't show up in the Properties panel. Investigation is needed. - direction: PixelSize, - angle: Angle, + direction: Item, + angle: Item, #[default(5)] #[hard(1..)] count: u32, @@ -95,7 +95,7 @@ fn repeat_radial( start_angle: Angle, #[unit(" px")] #[default(5)] - radius: f64, + radius: Item, #[default(5)] #[hard(1..)] count: u32, @@ -185,7 +185,7 @@ mod test { use core_types::node::Node; use core_types::record::{FieldWrite, FrameClaim, Layout, RecordSource, Served, capture, element_write}; use core_types::value::ValueSource; - use vector_types::subpath::Subpath; + use vector_types::vector::algorithms::shapes::polyline_bezpath; struct TransformSource { layout: Layout, @@ -399,8 +399,8 @@ mod test { let points = VectorRows { layout: vector_rows_layout(), rows: vec![ - (Vector::from_subpath(Subpath::from_anchors(row0.clone(), false)), row0_transform), - (Vector::from_subpath(Subpath::from_anchors(row1.clone(), false)), DAffine2::IDENTITY), + (Vector::from_bezpath(polyline_bezpath(row0.clone(), false)), row0_transform), + (Vector::from_bezpath(polyline_bezpath(row1.clone(), false)), DAffine2::IDENTITY), ], }; let content_layout = transform_layout(); @@ -442,7 +442,7 @@ mod test { let positions: Vec = vec![DVec2::new(40., 20.), DVec2::ONE, DVec2::new(-42., 9.), DVec2::new(10., 345.)]; let points = VectorRows { layout: vector_rows_layout(), - rows: vec![(Vector::from_subpath(Subpath::from_anchors(positions.clone(), false)), DAffine2::IDENTITY)], + rows: vec![(Vector::from_bezpath(polyline_bezpath(positions.clone(), false)), DAffine2::IDENTITY)], }; let content_layout = transform_layout(); let content = PositionProbe { layout: content_layout.clone() }; diff --git a/node-graph/nodes/text/src/font.rs b/node-graph/nodes/text/src/font.rs index 74024b8096..425994a5b4 100644 --- a/node-graph/nodes/text/src/font.rs +++ b/node-graph/nodes/text/src/font.rs @@ -64,7 +64,7 @@ impl Default for Font { } } -// TODO: Eventually remove this migration document upgrade code +// TODO: Eventually remove this document upgrade code fn migrate_font_style<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result { use serde::Deserialize; String::deserialize(deserializer).map(|name| if name == "Normal (400)" { "Regular (400)".to_string() } else { name }) diff --git a/node-graph/nodes/text/src/json.rs b/node-graph/nodes/text/src/json.rs index caa1257b97..05fd69ab3c 100644 --- a/node-graph/nodes/text/src/json.rs +++ b/node-graph/nodes/text/src/json.rs @@ -14,37 +14,44 @@ fn format_json( _: impl Ctx, /// The JSON string to reformat. #[name("JSON")] - json: String, + json: Item, /// Removes optional spaces within curly brackets and after colons and commas. - compact: bool, + compact: Item, /// Break arrays and objects across multiple lines when they exceed the line break length. #[default(true)] #[name("Multi-Line")] - multi_line: bool, + multi_line: Item, /// The indentation string used for each nesting level. Escape sequences like `\t` (the tab character) are supported. Two or four spaces are also common choices. #[default("\\t")] - indent: String, + indent: Item, /// The maximum line length before a container (array or object) is broken across lines. Set this to 0 to always break containers. (Requires *Multi-Line* to take effect.) /// /// This is not a maximum line length guarantee. Deep nesting and long keys or values may exceed this length. #[default(120)] - break_length: u32, + break_length: Item, /// Always break a container (array or object) across lines if it holds another container, even if it would fit within the break length. (Requires *Multi-Line* to take effect.) #[default(true)] - break_nested: bool, -) -> String { - let cleaned = strip_trailing_commas(&json); + break_nested: Item, +) -> Item { + let mut json = json; + let (compact, multi_line, break_length, break_nested) = (*compact.element(), *multi_line.element(), *break_length.element(), *break_nested.element()); + let indent = indent.element().clone(); + + let cleaned = strip_trailing_commas(json.element()); let Ok(value) = serde_json::from_str::(&cleaned) else { return json }; let indent = unescape_string(indent); let colon = if compact { ":" } else { ": " }; let comma_space = if compact { "," } else { ", " }; let line_width = break_length as usize; - if multi_line { + let result = if multi_line { format_value(&value, 0, &indent, colon, comma_space, compact, break_nested, line_width) } else { format_inline(&value, colon, comma_space, compact) - } + }; + + *json.element_mut() = result; + json } /// Strips trailing commas before `]` and `}` to accept JSON-with-trailing-commas input. @@ -188,7 +195,7 @@ fn query_json( _: impl Ctx, /// The JSON string to extract a value from. #[name("JSON")] - json: String, + json: Item, /// Determines which contained value to extract from within the JSON. /// /// The path syntax is like JavaScript's accessor syntax that follows an array/object value. It also supports negative indexing to count backwards from the end. Additionally, `[]` accesses all array and object values instead of just one. @@ -198,19 +205,29 @@ fn query_json( /// Use `.size` or `["size"]` to get the `size` property of `{ "size": 10 }`. The latter form is required if the key contains spaces or special characters like `["this key with spaces!"]`. /// Use chained accessors like `.fonts[0].name` to query deeper. /// Use the `[]` accessor to query all elements, like `.fonts[].weights[]` to get every weight of every font. - path: String, + path: Item, /// Strips the surrounding double quotes from string values, returning the raw text. Other types are never wrapped in quotes. #[default(true)] - unquote_strings: bool, -) -> String { - let cleaned = strip_trailing_commas(&json); - let Ok(value): Result = serde_json::from_str(&cleaned) else { return String::new() }; - let Some(segments) = parse_json_path(path.trim()) else { return String::new() }; + unquote_strings: Item, +) -> Item { + let mut json = json; + let path = path.element().clone(); + let unquote_strings = *unquote_strings.element(); - let mut results = Vec::new(); - resolve_all(&value, &segments, !unquote_strings, &mut results); + let cleaned = strip_trailing_commas(json.element()); - results.into_iter().next().map(|(text, _ty)| text).unwrap_or_default() + let result = match (serde_json::from_str::(&cleaned), parse_json_path(path.trim())) { + (Ok(value), Some(segments)) => { + let mut results = Vec::new(); + resolve_all(&value, &segments, !unquote_strings, &mut results); + + results.into_iter().next().map(|(text, _ty)| text).unwrap_or_default() + } + _ => String::new(), + }; + + *json.element_mut() = result; + json } /// Extracts every matched value from a JSON string using a path expression (see that parameter's description for its syntax). A list of zero or more resultant strings is produced. The `[]` path accessor is used to read more than one value. @@ -226,7 +243,7 @@ fn query_json_all( _: impl Ctx, /// The JSON string to extract values from. #[name("JSON")] - json: String, + json: Item, /// Determines which contained values to extract from within the JSON. /// /// The path syntax is like JavaScript's accessor syntax that follows an array/object value. It also supports negative indexing to count backwards from the end. Additionally, `[]` accesses all array and object values instead of just one. @@ -236,17 +253,17 @@ fn query_json_all( /// Use `.size` or `["size"]` to get the `size` property of `{ "size": 10 }`. The latter form is required if the key contains spaces or special characters like `["this key with spaces!"]`. /// Use chained accessors like `.fonts[0].name` to query deeper. /// Use the `[]` accessor to query all elements, like `.fonts[].weights[]` to get every weight of every font. - path: String, + path: Item, /// Strips the surrounding double quotes from string values, returning the raw text. Other types are never wrapped in quotes. #[default(true)] - unquote_strings: bool, + unquote_strings: Item, ) -> List { - let cleaned = strip_trailing_commas(&json); + let cleaned = strip_trailing_commas(json.element()); let Ok(value): Result = serde_json::from_str(&cleaned) else { return List::new() }; - let Some(segments) = parse_json_path(path.trim()) else { return List::new() }; + let Some(segments) = parse_json_path(path.element().trim()) else { return List::new() }; let mut results = Vec::new(); - resolve_all(&value, &segments, !unquote_strings, &mut results); + resolve_all(&value, &segments, !*unquote_strings.element(), &mut results); results.into_iter().map(|(text, ty)| Item::new_from_element(text).with_attribute(ATTR_TYPE, ty.to_string())).collect() } diff --git a/node-graph/nodes/text/src/lib.rs b/node-graph/nodes/text/src/lib.rs index 6b0612a86a..8da8506063 100644 --- a/node-graph/nodes/text/src/lib.rs +++ b/node-graph/nodes/text/src/lib.rs @@ -11,6 +11,7 @@ use convert_case::{Boundary, Converter, pattern}; use core_types::gpoll::Interrupt; use core_types::graphene_hash::CacheHash; use core_types::list::{Item, List}; +use core_types::math::float_noise::round_away_float_noise; use core_types::registry::types::{SignedInteger, TextArea}; use core_types::{Context, Ctx, DeriveCtx, ExtractVarArgs}; use dyn_any::DynAny; @@ -187,34 +188,43 @@ pub enum StringCapitalization { /// Constructs a string value which may be set to any plain text. #[node_macro::node(category("Value"))] -fn string_value(_: impl Ctx, _primary: (), string: TextArea) -> String { +fn string_value(_: impl Ctx, _primary: (), string: Item